DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: wugangbest
今日帖子: 24
在线用户: 22
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/14 22:06:54
标题:
如何将Select 查出来数据保存起来,在需要的地方把他赋给数据集浏览 浏览:1304
加入我的收藏
楼主: 我这个做法不知道对不对, 结果存起来了 如何调用呢.
function TMedUser.GetUserListVar: Variant;
var UserCDS:TClientDataSet;
begin
  try
   UserCDS:=TClientDataSet.Create(nil);
   if not  FAdoCOn.Connected then FAdoCOn.Open;
   with UserCDS do
   begin
     FieldDefs.Add('AutoNo',ftInteger);
     FieldDefs.Add('UserName',ftString,20);
     FieldDefs.Add('UserReMark',ftString,20);
     FieldDefs.Add('UserPass',ftString,20);
     Open;
   end;
    with FAdoUser do
    begin
      close;
      sql.Text:='Select * from UserName ';
      Open;
      First;
      while not eof  do
      begin
         UserCDS.Append;
         UserCDS.FieldByName('AUtoNo').AsInteger:=FieldByName('AutoNo').AsInteger;
         UserCDS.FieldByName('UserName').AsString:=FieldByName('UserName').AsString;
         UserCDS.FieldByName('UserReMark').AsString:=FieldByName('ReMark').AsString;
         UserCDS.FieldByName('UserPass').AsString:=FieldByName('UserPass').AsString;
         UserCDS.Post;
        Next;
      end;
    end;

    Result:=USerCDs.as
   finally
     UserCDS.Free;
  end;

end;
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2023/1/14 22:31:39
1楼: result:=UserCds.data;

AnotherCDS.data:=result;
AnotherCDS.open;

可以试试这个方法。
----------------------------------------------
z@S7
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/14 22:36:45
2楼: 我本来就是这个做的但是会报错,  Missing data provider or data packet 
procedure Tfmtest.Button9Click(Sender: TObject);
var MedUser:TMedUser;
begin
      try
        MedUser:=TMedUser.Create;

        //ClientDataSet1.PersistDataPacket(MedUser.UserListVar);
        self.ClientDataSet1.Data:=MedUser.UserListVar;

       ClientDataSet1.Open;
      finally
        MedUser.Free;
      end;
end;
----------------------------------------------
-
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/14 22:44:46
3楼: 我其实就是在TUser这个类里面做一个属性,需要的时候直接调用出来 有没有其他方法实现呢?
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2023/1/14 22:48:33
4楼: TUser=Class
  private
    fdata:TClientDataSet;
  public
    property data:TClientDataSet read fdata write fdata;
end;
----------------------------------------------
z@S7
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/14 23:49:44
5楼: 是这样吗

   TUser=Class
  private
    fdata:TClientDataSet;
  public
     property UserDataSet:TClientDataSet read GetUserDataSet;
end;

function TMedUser.GetUserDataSet: TClientDataSet;
var UserCDS:TClientDataSet;
begin
  try
   UserCDS:=TClientDataSet.Create(nil);
   if not  FAdoCOn.Connected then FAdoCOn.Open;
   with UserCDS do
   begin
     FieldDefs.Add('AutoNo',ftInteger);
     FieldDefs.Add('UserName',ftString,20);
     FieldDefs.Add('UserReMark',ftString,20);
     FieldDefs.Add('UserPass',ftString,20);
     Open;
   end;
    with FAdoUser do
    begin
      close;
      sql.Text:='Select * from UserName ';
      Open;
      First;
      while not eof  do
      begin
         UserCDS.Append;
         UserCDS.FieldByName('AUtoNo').AsInteger:=FieldByName('AutoNo').AsInteger;
         UserCDS.FieldByName('UserName').AsString:=FieldByName('UserName').AsString;
         UserCDS.FieldByName('UserReMark').AsString:=FieldByName('ReMark').AsString;
         UserCDS.FieldByName('UserPass').AsString:=FieldByName('UserPass').AsString;
         UserCDS.Post;

        Next;
      end;
    end;
    Result.Assign(UserCDS);
   finally
     UserCDS.Free;
  end;

end;

procedure Tfmtest.Button9Click(Sender: TObject);
var MedUser:TMedUser;
begin
      try
        MedUser:=TMedUser.Create;


        self.ClientDataSet1.Assign(MedUser.UserDataSet); //
        //self.ClientDataSet1.Data:=MedUser.UserDataSet.Data;//这两个方法都不行
          ClientDataSet1.Open;
      finally
        MedUser.Free;
      end;
end;
----------------------------------------------
-
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/15 0:01:57
6楼: 我现在是用   TUserRec=Record
    FAutoNo:integer;
    FName:string;
    FUserPass:string;
    FUserReMark:string;
  End;    //用户清单
  TUserList=TList<TUserRec>; 
property UserList:TUserList read GetUsertList; //用户列表

先把结果存到这个LIST里面 到用的时候再分解出来 感觉好蠢啊 对了我用的10.4
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2023/1/15 0:20:07
7楼: TUser=class
  private
     fData:TClientDataSet;
  public
    property  Data:TClientDataSet read fData;
    constructor create;
    destructor destroy;
    procedure load;
end;

construcotr TUser.Create;
begin
  {创建fdata}
  fData:=TClientDataSet.create(nil);
  {构建fData的Fields}
  ......
end;

destructor TUser.destroy;
begin
  {释放fdata}
  fdata.free;
end;

procedure TUser.Load;
begin
  {实现读取数据并写入fData};
  SQL:='';
  Query.Open;
  while not Query.eof do
  begin
    fdata.append;
    fdata.fieldbyname('???').AsXxxxx:=Query.fieldbyName('???').AsXxxxxx;
    ....
    fdata.post;
    Query.next;
  end;
end;


var
  User:TUser;
begin
  User:=TUser.create;
  User.load;
  while not user.data.eof do
  begin
    ???:=User.Data.FieldByName('').AsXXXXX;
    ......
    user.data.next;
  end;
end;


领会一下。
----------------------------------------------
z@S7
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2023/1/15 0:25:00
8楼: 基本上就是一个类的定义,包括创建方法,销毁方法,属性(Property)定义,一般方法(Load)。
----------------------------------------------
z@S7
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/15 0:50:20
9楼: 哦 ,就是不传数据到属性里,明天我试试.谢谢大佬啊
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2023/1/15 8:50:27
10楼: 推荐你看《OBJECT PASCAL HANDBOOK 》(marco cantu)
中关于类定义的部分(07.Objects)。

http://bbs.2ccc.com/topic.asp?topicid=621945

https://img.en25.com/Web/Embarcadero/%7B7f2cddb3-34f8-45fc-a6e4-22c6c2fe0387%7D_ObjectPascalHandbook_AlexandriaVersion.pdf

中文版

http://bbs.2ccc.com/topic.asp?topicid=632476

http://www.haichengxuan.com/ueditor/php/upload/file/20220808/1659951429324194.pdf
----------------------------------------------
z@S7
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2023/1/15 8:54:06
11楼: 类的一个属性,可以是通过类初始化时填充值,或是类的一个方法填充值,或是通过外部方法填充值。怎么用,主要看设计上你要怎么使用这个类。
----------------------------------------------
z@S7
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/15 20:26:06
12楼: 好的,我就是看了(刘艺)的Delphi面向对象编程思 想自己动手写一写. 
这个问题搞定了这几种方法都可以只是不能用clientdataset来传递数据,要用DataSetProvider过度一下 才可以
Result(variant):=DataSetProvider.data;

谢谢大佬 ,谢谢热心人
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2023/1/15 21:59:44
13楼: 楼上,用 Delphi 开发,对于数据的管理,有两种方式,一种是基于数据集,也就是 TDataSet,一种是面向对象,也就是把数据本身封装为对象。如果数据很多,就是一个对象列表。

这两种方式,作为新手,你不要搞混概念,更不能混用。老手当然就无所谓了。

从入门的角度来说,你要学数据库操作,还是先玩 TDataSet 的模式。这个是自从有 Delphi 以来就有的模式。
----------------------------------------------
-
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/15 22:48:34
14楼: 看了面对对像的书就想试试, 我就是想把一个对数据库的操作封装一下练练手 见笑了
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2023/1/18 14:45:03
15楼: 别搞复杂了:
select T1,T2 into # temp from tbM
select from # temp
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2023/1/19 21:41:42
16楼: 楼主如果是想把数据库封装成面向对象,再呈现到界面上,如果使用 Delphi FMX 框架,可以这样做:

1. 做一个类,它的每个 property 对应数据库表的一个字段。这样,一个对象,就是一条记录。

2. 从数据库获取的数据,依然是 DataSet,对 Dataset 做一个循环,把每条记录,都写入一个对象;

3. 做一个 TObjectList,把多个对象放进去。

4. 搞定 FMX 框架底下的 LiveBindings,把 TObjectList 和界面元素绑定。
----------------------------------------------
-
作者:
男 austinmajian (austinmajian) ▲△△△△ -
普通会员
2023/1/22 20:28:11
17楼: 真是大佬 啊 最近几天在看Fmx的书 正愁着这没有dbgrid怎么办呢
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS