procedure TForm1.BTN_UPDATEClick(Sender: TObject);
begin
  if not ADOQuery1.Active then
  begin
    showmessage('请先打开文件');
    exit;
  end;
 try
    ADOQuery1.First ;
    while not ADOQuery1.Eof do
    begin
      ADOQuery1.Edit;
      ADOQuery2.Close;
      ADOQuery2.SQL.Clear;
      ADOQuery2.SQL.Add('select * from [BBB$] where b='+floattostr(ADOQuery1.fieldbyname('b').asfloat)+'');
      ADOQuery2.Open ;
      ADOQuery1.FieldByName('d').AsString := ADOQuery2.fieldbyname('d').AsString ;
      ADOQuery1.Post ;
      ADOQuery1.Next;
    end;
   showmessage('更新成功');
 except
   form2.Close;
   showmessage('更新失败');
   exit;
 end;
 Btn_Open.Click;
end;
以上是我的代码,每次运行几分钟后就提示“数值溢出”不知为何,请大家帮帮,谢谢~~

解决方案 »

  1.   

    我用的是SQL库,里面没有小数位,就是在判断两个表是否有相同字段,如果有就在后面标记出来,如果没有就什么也不做。
      

  2.   

    int
    还是numeric
    还是real?
      

  3.   

    procedure TForm1.BTN_UPDATEClick(Sender: TObject);
    begin
      if not ADOQuery1.Active then
      begin
        showmessage('请先打开文件');
        exit;
      end;
    try
        ADOQuery1.First ;
        while not ADOQuery1.Eof do
        begin
          ADOQuery2.Close;
          ADOQuery2.SQL.Clear;
          ADOQuery2.SQL.Add('select * from [BBB$] where b='+ADOQuery1.fieldbyname('b').asString);
          ADOQuery2.Open ;      if not ADOQuery2.IsEmpty then
          begin
            ADOQuery1.Edit;
            ADOQuery1.FieldByName('d').Value:= ADOQuery2.fieldbyname('d').AsFloat;
          end;
          
          ADOQuery1.Next;
          
        end;
      ADOQuery1.Post ;
      showmessage('更新成功');
    except
      form2.Close;
      showmessage('更新失败');
      exit;
    end;
    Btn_Open.Click;
    end; 
      

  4.   

    你的这个功能应该是可以用一个sql语句直接实现的
      

  5.   

    用一个SQL语句就能实现?如何写?
      

  6.   


    update AAA inner join BBB on AAA.b=BBB.b set AAA.d=BBB.d
      

  7.   

    UPDATE table1 set d=table2.d from table1,table2 where table1.b=table2.b
    这样也行
      

  8.   

    错误是MSSQL提示的还是ADO提示的
      

  9.   

    如果是在DELPHI程序里F9运行的话会提示“project project1.exe raised exception class E0leexception with message'数值字段溢出。'.Proecss stopped.Use Step or run to contiune.”如果是生EXE文件后运行会提示“Aeecss violation at address 00461841 in module 'project1.exe'.read of address 000002f4.”
      

  10.   

    ADOQuery2.SQL.Add('select * from [BBB$] where b='+floattostr(ADOQuery1.fieldbyname('b').asfloat)+''); 
    这个改为
    ADOQuery2.SQL.Add('select * from [BBB$] where b='''+floattostr(ADOQuery1.fieldbyname('b').asfloat)+''''); 
    试试
      

  11.   

    你数据库里面float的数据有什么特殊的嘛?小数位数很多??数值很大??
      

  12.   

    ADOQuery1.FieldByName('d').Value:= ADOQuery2.fieldbyname('d').AsFloat;
    修改为ADOQuery1.FieldByName('d').AsFloat:= ADOQuery2.fieldbyname('d').AsFloat;