大家看下面的代码
为什么老是只是插入前二个数据而后面的数据全都是空
这是怎么回事
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;var m : integer;
var kk :array[0..8] of variant;
var insersql:string;
beginadodataset1.First;
   while not adodataset1.eof do
   begin
      for i:=0 to adodataset1.recordcount-1 do
      begin            for j:=0 to adodataset1.fieldcount-1 do
            begin
            kk[j]:=adodataset1.fields[j].AsVariant ;
            end;
   //插入数据到ACCESS中
     
     adoquery1.close;
     adoquery1.sql.clear;
     insersql:='insert into try (au_lname,au_fname) values('''+kk[1]+''','''+kk[2]+''')';
     adoquery1.SQL.Add(insersql);
     adoquery1.ExecSQL ;      for m:=0  to adodataset1.fieldcount-1 do
      begin
      kk[m]:='';
      end;
      adodataset1.next;     end;   end;
end;
谢谢海龙大哥刚才告诉我数据集的问题可是这又是怎么一回呢??

解决方案 »

  1.   

    for j:=0 to adodataset1.fieldcount-1 do
                begin
                kk[j]:=adodataset1.fields[j].AsVariant ;
                end;
    // 注意你的 var kk :array[0..8] of variant; 只有9的长度 小心越界..你的代码很乱....根本也不用弄的这么复杂
      

  2.   

    数组完全没必要,丢了,直接用adodataset1.fields[0].value和adodataset1.fields[1].value就行了,此外用了while就别用for了procedure TForm1.Button1Click(Sender: TObject);
    var
       i,j:integer;
       str1,str2:String;
       insersql:string;
    begin
       if not adodataset1.active then showmessage('closeddataset');
       if adodataset1.recordcount =0 then showmessage('nullresultset');
       adodataset1.First;
       while not adodataset1.eof do
       begin
       //插入数据到ACCESS中
         adoquery1.close;
         adoquery1.sql.clear;
         insersql:='insert into try (au_lname,au_fname) values(adodataset1.fields[1].value,adodataset1.fields[2].value)';
         adoquery1.SQL.Add(insersql);
         adoquery1.ExecSQL ;     adodataset1.next;
       end;
    end;这段代码没有测试过,SQL有可能不对,但是大致应该是这个意思。