DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lisz2024
今日帖子: 0
在线用户: 8
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 yong (yong) ★☆☆☆☆ -
普通会员
2004/1/15 15:41:22
标题:
DBGRID问题。。。。再线等。。。。 浏览:1875
加入我的收藏
楼主: 我想在DBGRID显示的记录中任意选种若干条记录,通过报表浏览写了以下代码,但现在提示丢失数据提供者,怎么回事呀我是新手好不容易写到这里,可。。。。我快崩溃了。。。。。。
VAR aclient:Tclientdataset;
var k,j,i:integer;
begin
aclient:=Tclientdataset.Create(nil);
aclient.Open;
aclient.Edit;
for k:=0 to adoquery1.FieldCount-1 do
aclient.Fields.Add(adoquery1.Fields.Fields[k]);

aclient.CreateDataSet;
 try
   if dbgrid1.SelectedRows.Count>0 then
with dbgrid1.DataSource.DataSet do
   for i:=0 to dbgrid1.SelectedRows.Count-1 do
     begin
     gotobookmark(pointer(dbgrid1.SelectedRows.ClassInfo));
     for j:=0 to dbgrid1.DataSource.DataSet.FieldCount-1 do
     aclient.Fields[j].Value:=adoquery1.Fields[j].Value;
     end;
finally
aclient.Free;
end;
----------------------------------------------
-
作者:
男 liberson ( ) ★☆☆☆☆ -
盒子活跃会员
2004/1/15 15:54:12
1楼: 这样拷贝字段比较麻烦,不如加一个datasetprovider,使其指向adoquery1,然后
aclient:=Tclientdataset.Create(nil);
aclient.data := datasetprovider.data;
aclient.emptydataset;
就可获取正确的结构。
添加记录时不要忘了append和post。

另外,最好在此段代码运行一开始检查dbgrid1.SelectedRows.Count,如果没有选择就退出。

供参考。
----------------------------------------------
-
作者:
男 liberson ( ) ★☆☆☆☆ -
盒子活跃会员
2004/1/15 15:59:23
2楼: adoquery1.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[I]))
----------------------------------------------
-
作者:
男 bryan (bao) ★☆☆☆☆ -
盒子活跃会员
2004/1/16 9:21:49
3楼: 用clientdataset创建内存表时,CreateDataset方法会自动打开表,而且不需要给定 datasetprovider,不能用open方法,下面是例子:

Var Client1:TClientDataset;
    i:integer;
begin
   Client1 := TClientdataset.Create(Self);
   For I := 0 to Adoquery1.FieldDefs.Count-1 do Begin
      with Client1.FieldDefs.AddFieldDef do  begin
        DataType    := Adoquery1.FieldDefs.Items[I].DataType;
        Name        := Adoquery1.FieldDefs.Items[I].Name;
        Size        := Adoquery1.FieldDefs.Items[I].Size;
        Precision   := Adoquery1.FieldDefs.Items[I].Precision;
      end;
   End;
   Client1.CreateDataSet;
   .....
End;
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行59.81445毫秒 RSS