当前位置:编程学习 > Delphi >>

下面这段delphi代码为什么不能按照我预期的执行。

我设计的目的就是判断如果query1指向的表中的值在query2指向的表中找不到值,就在q2中插入一条记录。代码变异没错误,但是达不到预期设计的目的。谁能帮帮我啊。 begin ADOQuery1.First ; ADOQuery2.First ; while not ADOQuery1.Eof do begin while not ADOQuery2.Eof do begin if not ADOQuery1.Locate('num',ADOQuery2.Fields.Fields[0].AsInteger,[loCaseInsensitive]) then //判断q1字段在q2中能否查询到 begin ADOQuery2.append; ADOQuery2.Edit ; ADOQuery2.FieldByName('num').AsInteger:=ADOQuery1.Fields.Fields[0].AsInteger ; ADOQuery2.FieldByName('score').AsInteger:=ADOQuery1.Fields.Fields[1].AsInteger ; ADOQuery2.Post; end; ADOQuery2.Next; end; ADOQuery1.Next; end; end;
答案:我来总结一下楼上二位的话吧:
首先你的代码中有错误,你是说在ADOQuery2中查找数值,但是你的代码中却是:
 if  not ADOQuery1.Locate('num',ADOQuery2.Fields.Fields[0].AsInteger,[loCaseInsensitive])  then
这是在ADOQuery1中查找数值
其次,你对Locate函数的认识有问题,而且Locate函数会自动从上外下查找RecordSet,所以你不需要遍历ADOQuery2,而是使用ADOQuery2.First。所以代码应该改成:
另外Append与Insert会自动打开当前RecordSet,所以没有必要使用Edit命令.
begin
  //遍历ADOQuery1
  ADOQuery1.First;
  while not ADOQuery1.Eof do
  begin
    //将ADOQuery2移动到第一条记录使ADOQuery2可以从头查找
    ADOQuery2.First;
    //判断q1字段在q2中能否查询到
    if not ADOQuery2.Locate('num',ADOQuery1.Fields.Fields[0].AsInteger,[loCaseInsensitive])  then
    begin
      //向ADOQuery2添加一条记录
      ADOQuery2.append;
      ADOQuery2.FieldByName('num').AsInteger:=ADOQuery1.Fields.Fields[0].AsInteger ;
      ADOQuery2.FieldByName('score').AsInteger:=ADOQuery1.Fields.Fields[1].AsInteger ;
      ADOQuery2.Post;
    end;
  end;

  ADOQuery1.Next;
end;
其他:你的if上有问题吧!没有达到你判断  判断如果query1指向的表中的值在query2指向的表中找不到值  放的效果 在IF NOT 前,加入: ADOQuery2.FIRST

上一个:适合Delphi 制作大按键的软件皮肤制作工具?
下一个:在delphi中,点一个按钮,就新建一个文本文件,并用现在的时间命名,并把memo的内容写入。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,