起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 197|回复: 5

【结贴】从数据中取多条记录然后循环写入另一个数据集**

[复制链接]
发表于 2009-7-9 10:56:36 | 显示全部楼层 |阅读模式
procedure TSGJLXX.DataSetSGZBBeforeApplyUpdates(Sender: TObject; var OwnerData: object);
var SGDJ,SGLB,SGBH,XZQXID,XZQXBID,StrSQL:string;

var lQuery: TQuery;

begin
  
  SGDJ:=DataSetSGZB.FieldByName('SGDJ').AsString;
  SGLB:=DataSetSGZB.FieldByName('SGLB').AsString;
  SGBH:=DataSetSGZB.FieldByName('SGBH').AsString;
  StrSQL:='select XZQXID  from XZQXB where SGDJ='+SGDJ+' and SGLB='+SGLB+'';
  DataSetXZQXB.Close;
  TSqlDataSet(DataSetXZQXB).SQL.Text:=StrSQL;
  DataSetXZQXB.Open;
  //这里要得到有多少条记录和这些记录的值备用。


  //插入多条记录数据到小组表
  lQuery := TQuery.Create(nil);
  try
    lQuery.ConnectionString :='DATABASEURL=Biz:\SGDCGLXT\rxc_zd.Database';
    for i:=0 to//循环写入?
    lQuery.CommandText :='Insert DCXZB (XZQXBID,SGZBID) values('''+从SQL语句获取到的值+''','''+SGBH+''')';
    lQuery.Execute;


  finally
    lQuery.Free;
    end;
end;
回复

使用道具 举报

发表于 2009-7-9 11:09:49 | 显示全部楼层
1、//这里要得到有多少条记录和这些记录的值备用。
   DataSetXZQXB.RecordCount

2、从SQL语句获取到的值
   DataSetXZQXB.FieldByName('字段名').AsString
回复 支持 反对

使用道具 举报

发表于 2009-7-9 11:11:58 | 显示全部楼层
另外,过滤数据使用SqlFilter就可以了,不需要重新为Sql.Text赋值:

  StrSQL:='select XZQXID  from XZQXB where SGDJ='+SGDJ+' and SGLB='+SGLB+'';
  DataSetXZQXB.Close;
  TSqlDataSet(DataSetXZQXB).SQL.Text:=StrSQL;
  DataSetXZQXB.Open;

可以写成:
TSqlDataSet(DataSetXZQXB).SqlFlilter := 'SGDJ='+SGDJ+' and SGLB='+SGLB+'; //注意单引号问题
TSqlDataSet(DataSetXZQXB).SqlFliltered := True;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-9 13:06:39 | 显示全部楼层
第二个问题是要取出多条记录,然后循环写入另一个表中,不是取单条记录
回复 支持 反对

使用道具 举报

发表于 2009-7-9 13:22:07 | 显示全部楼层
procedure TSGJLXX.DataSetSGZBBeforeApplyUpdates(Sender: TObject; var OwnerData: object);
var SGDJ,SGLB,SGBH,XZQXID,XZQXBID,StrSQL:string;

var lQuery: TQuery;

begin
  
  SGDJ:=DataSetSGZB.FieldByName('SGDJ').AsString;
  SGLB:=DataSetSGZB.FieldByName('SGLB').AsString;
  SGBH:=DataSetSGZB.FieldByName('SGBH').AsString;
  //StrSQL:='select XZQXID  from XZQXB where SGDJ='+SGDJ+' and SGLB='+SGLB+'';
  DataSetXZQXB.SQLFilter := ' SGDJ='''+SGDJ+''' and SGLB='''+SGLB+''' ';
  DataSetXZQXB.SQLFiltered := True;
  if not DataSetXZQXB.Active then
    DataSetXZQXB.Open;
  //这里要得到有多少条记录和这些记录的值备用。


  //插入多条记录数据到小组表
  lQuery := TQuery.Create(nil);
  try
    lQuery.ConnectionString :='DATABASEURL=Biz:\SGDCGLXT\rxc_zd.Database';
   
    DataSetXZQXB.DisableControls;  
    DataSetXZQXB.First;
    while not DataSetXZQXB.eof do
    begin
      lQuery.CommandText :='Insert DCXZB (XZQXBID,SGZBID) values('''+DataSetXZQXB.FieldByName('zd').AsString+''','''+SGBH+''')';
      lQuery.Execute;

      DataSetXZQXB.Next;
    end;
    DataSetXZQXB.EnableControls;
  finally
    lQuery.Free;
    end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-9 13:38:28 | 显示全部楼层
问题解决了,可以结贴了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 04:39 , Processed in 0.044092 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表