起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 102|回复: 2

【结贴】[请求]SQL取人员问题**

[复制链接]
发表于 2008-10-9 18:02:00 | 显示全部楼层 |阅读模式
写了一段程序,从人员表中根据部门ID取姓名,并将所取得姓名写入另一个数据表的XM字段下,现在有一问题相求:
如:取出三个人名:A,B,C
然后写入DSBM表中的XM字段,这时出现三个都是A,程序如下,请斑竹帮忙分析下,谢谢。
procedure TKQBD.ButSQLClick(Sender: TObject);
var
strsql,strfilter:string;
i:integer;
begin
    strfilter:= 'SELECT FDISPLAYNAME from Tperson where FDEPTID=''FYHRJZ_JSJZY'''   ;
    TSQLDataSet(ds2.DataSet).SQL.Text :=strfilter ;
    ds2.DataSet.close;
    ds2.DataSet.Open;
    for i:=0 to ds2.dataset.recordcount -1 do
     begin
     dsbm.DataSet.Append;
     dsbm.DataSet.FieldByName('xm').asstring:=ds2.DataSet.FieldByName('FDISPLAYNAME').AsString;
     dsbm.DataSet.ApplyUpdates;
     end;
end;
end.
回复

使用道具 举报

发表于 2008-10-9 18:49:18 | 显示全部楼层
1、说说你的代码,在给DataSet重新赋SQL语句时,应该先关闭数据集,赋值后再打开
应该是
  ds2.DataSet.close;
strfilter:= 'SELECT FDISPLAYNAME from Tperson where FDEPTID=''FYHRJZ_JSJZY'''   ;
    TSQLDataSet(ds2.DataSet).SQL.Text :=strfilter ;
    ds2.DataSet.Open;

2、至于你说的出现了三个A,那是在循环中ds2 这个数据集没有循环,应该修改为
    for i:=0 to ds2.dataset.recordcount -1 do
     begin
     dsbm.DataSet.Append;
     dsbm.DataSet.FieldByName('xm').asstring:=ds2.DataSet.FieldByName('FDISPLAYNAME').AsString;
     ds2.DataSet.next;  
     end;

3、另外,提交数据应该放到循环的最后,这样减少跟数据库的交互,即   dsbm.DataSet.ApplyUpdates; 应该放到循环的外面
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-9 19:18:48 | 显示全部楼层
谢谢版主。。结贴
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 21:00 , Processed in 0.040411 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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