下面是原码:
procedure TForm3.N2Click(Sender: TObject);
var
a:integer;
sql,bianhao,current_time,state,beizhu:string;begin
  
  for a:=listbox2.items.count -1 downto 0  do  begin
    if listbox2.Selected[a]=true then
    
    begin
      name:=listbox2.Items[a];
      sqldataset1.Active:=false;
      sqldataset1.CommandText:='SELECT bianhao, name FROM jbhk WHERE name=''' +name + '''';
      sqldataset1.Active:=true;
      sqldataset1.DisableControls ;
  while not sqlDataSet1.Eof do
  begin
    {ID := ADODataSet1.FieldByName('ID').AsString;}    {Number := ADODataSet1.FieldByName('Number').AsString;}
    bianhao := sqldataSet1.FieldByName('bianhao').AsString ;
    current_time:=DateTimeToStr(Now);
    state:='0' ;
     beizhu:='' ;
      sql :=  'Insert Into hzk(name,bianhao,szsj,state,operator,beizhu) ';
      sql := sql +  'Values(''' + name + ''',''' + bianhao + ''', ''' + current_time + ''','''+ state + ''',''' + denglu.form2.p_name  + ''','''+ beizhu +''')' ;
      sqldataset1.Next;
      end;
  sqlQuery1.SQL .Add (SQL);
    sqlQuery1.ExecSQL;
     name:=listbox2.Items[a];
      listbox2.items.Delete(a);
      listbox1.Items.add(name);
     // listbox1.items.Delete(a);
    end
  end;
//执行到这里数据库中,仍只有添加一行数据
  clientdataset1.Active :=false;    clientdataset1.Active :=true;
//执行此两句后,数据库的数据跟循环次数增加了。
  showmessage('增加检查成功!');end;请高手帮我解决一下。

解决方案 »

  1.   

      sqlQuery1.SQL .Add (SQL);  这句放在循环里。
      

  2.   

      while not sqlDataSet1.Eof do 
      begin 
        {ID := ADODataSet1.FieldByName('ID').AsString;}     {Number := ADODataSet1.FieldByName('Number').AsString;} 
        bianhao := sqldataSet1.FieldByName('bianhao').AsString ; 
        current_time:=DateTimeToStr(Now); 
        state:='0' ; 
        beizhu:='' ; 
          sql :=  'Insert Into hzk(name,bianhao,szsj,state,operator,beizhu) '; 
          sql := sql +  'Values(''' + name + ''',''' + bianhao + ''', ''' + current_time + ''','''+ state + ''',''' + denglu.form2.p_name  + ''','''+ beizhu +''')' ; 
          sqlQuery1.SQL .Add (SQL);
          sqlQuery1.ExecSQL; 
          sqldataset1.Next; 
          end;
    一定是最后一行添加了吧 
          sqlQuery1.SQL .Add (SQL);
          sqlQuery1.ExecSQL;    
       这两个要放在Next 句子上面才行的哦
        
      

  3.   

    我的意思是说数据插入多了,本来只一条,执行后,有多条了。不是sqlQuery1.SQL .Add (SQL);  这句放在循环里。的问题。
      

  4.   

    问题在于clientdataset1.Active :=false;     clientdataset1.Active :=true; 
    执行后,数据本来是一条,但变成多条了。
      

  5.   

    sqlDataSet1你的这循环几次呀。
      

  6.   

    [img=
    在执行clientdataset1.Active :=false;     clientdataset1.Active :=true;

      

  7.   


    procedure TForm3.N2Click(Sender: TObject);
    var
      a:integer;
      sql,bianhao,current_time,state,beizhu:string;
    begin   for a:=listbox2.items.count -1 downto 0  do
      begin 
        if listbox2.Selected[a]=true then
        begin 
          name:=listbox2.Items[a];
          sqldataset1.Active:=false;
          sqldataset1.CommandText:='SELECT bianhao, name FROM jbhk WHERE name=''' +name + '''';
          sqldataset1.Active:=true;
          showmessage(inttostr(sqldataset1.recordcount)); // 如果> 1 then在后边的循环中多次插入
          sqldataset1.DisableControls ;
          while not sqlDataSet1.Eof do
          begin
            {ID := ADODataSet1.FieldByName('ID').AsString;}
            {Number := ADODataSet1.FieldByName('Number').AsString;}
            bianhao := sqldataSet1.FieldByName('bianhao').AsString ;
            current_time:=DateTimeToStr(Now);
            state:='0' ;
            beizhu:='' ;
            sql :=  'Insert Into hzk(name,bianhao,szsj,state,operator,beizhu) ';
            sql := sql +  'Values(''' + name + ''',''' + bianhao + ''', ''' + current_time + ''','''+ state + ''',''' + denglu.form2.p_name  + ''','''+ beizhu +''')' ;
            sqldataset1.Next;
          end;
          showmessage(sql); //看一下,肯定会有多个插入语句的情况
          sqlQuery1.SQL .Add (SQL);
          sqlQuery1.ExecSQL;            // 执行这句后并不会刷新客户端的数据显示
          name:=listbox2.Items[a];
          listbox2.items.Delete(a);
          listbox1.Items.add(name);
          // listbox1.items.Delete(a);
        end
      end;
    //执行到这里数据库中,仍只有添加一行数据
      clientdataset1.Active :=false;  clientdataset1.Active :=true;    // 执行这句后刷新客户端的数据显示
    //执行此两句后,数据库的数据跟循环次数增加了。
      showmessage('增加检查成功!');end;
      

  8.   

    我根据楼上的检查了。如果将clientdataset1.Active :=false;  clientdataset1.Active :=true;两行去掉后,数据就正常了。加上两条,就多数据出来,是否要加其它指令呢。
      

  9.   

    我将如何实现更新呢?dbgrid,数据在clientdataset1中.