实现一个程序,把文本中的数据读入listbox中,如果该项lotissue(主键)在数据库中没有,则读入,如果有,则跳过,数据库中两列:lotissue,lotcode.我的代码数据读不进去,求指点!
代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j: integer;
  str, temp, lotissues, lotcodes: string;
begin
  for i:= 0 to listbox1.Count-1 do
  begin
    str := listbox1.Items.Strings[i];
    temp := trim(str);
    lotissues := copy(temp,1,7);
    lotcodes := stuffstring(temp,1,7,'');
    if length(lotissues)=0 then
        exit;
    if adoquery1.Locate('lotissue',lotissues,[loCaseInsensitive]) then
    begin
     // if i=0 then
       // showmessage('期号是'+lotissue+#13+'开奖结果是'+lotcode);
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('insert into lot3D(lotissue,lotcode)');
      adoquery1.SQL.Add('values(' + quotedstr(lotissues) + ',' + quotedstr(lotcodes) + ')');
      adoquery1.ExecSQL;
    end
    else
    begin
      showmessage(lotissues+'  '+lotcodes);
      exit;
    end;
  end;
end;

解决方案 »

  1.   

      if adoquery1.Locate('lotissue',lotissues,[loCaseInsensitive]) then
      begin
      // if i=0 then
      // showmessage('期号是'+lotissue+#13+'开奖结果是'+lotcode);
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('insert into lot3D(lotissue,lotcode)');
      adoquery1.SQL.Add('values(' + quotedstr(lotissues) + ',' + quotedstr(lotcodes) + ')');
      adoquery1.ExecSQL;
      end
    循环中你已经改变了adoquery1的sql了,adoquery1中已经没有原始数据了,你在查找,还能查得到吗
      

  2.   

    adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('insert into lot3D(lotissue,lotcode)');
      adoquery1.SQL.Add('values(' + quotedstr(lotissues) + ',' + quotedstr(lotcodes) + ')');
      adoquery1.ExecSQL;
    同意,把adoquery1换个数据集来操作
      

  3.   

    这个我本意使用循环来读取listbox中的strings[i]的,现在的问题是我每次只能读入一条记录,读完了一条就显示“不能在对象中插入重复键”,修改后的数据操作语句如下:
     adoquery1.Open;
        if adoquery1.Locate('lotissue',lotissues,[loCaseInsensitive]) then
        begin
          showmessage('期号是'+lotissues+#13+'开奖结果是'+lotcodes);
        end
        else
        begin
          adoquery1.Close;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add('insert into lot3D(lotissue,lotcode)');
          adoquery1.SQL.Add('values(' + quotedstr(lotissues) + ',' + quotedstr(lotcodes) + ')');
          //adoquery1.open;
          adoquery1.ExecSQL;
        end;
      

  4.   

    老兄,我有点想不明白,你为什么一定要用那一个数据集操作呢?
    如果数据量比较大,你每次关闭,打开数据集都要用掉不少时间。if adoquery1.Locate('lotissue',lotissues,[loCaseInsensitive]) then
      begin
      showmessage('期号是'+lotissues+#13+'开奖结果是'+lotcodes);
      end
      else
      begin
      adoquery2.Close;  //换个数据集来操作,不行么?
      adoquery2.SQL.Clear;
      adoquery2.SQL.Add('insert into lot3D(lotissue,lotcode)');
      adoquery2.SQL.Add('values(' + quotedstr(lotissues) + ',' + quotedstr(lotcodes) + ')');
      //adoquery1.open;
      adoquery2.ExecSQL;
      end;
      

  5.   

    你能不能用个AdoQuery2来执行insert into操作