我的问题:
   stuinfo表里有stunumber, stuname,classname三个字段,
   debtinfo表里有 stunumber, stuname, owetuition, owebookfee, state这五个字段。
   我导入的数据表charge里有 classname,term,tuition,bookfee这四个字段。   我开始导入数据那就要更新,并取得到了导入charge表里的四个数据:
   1、 那么现在只要在debt.classname=charge.classname的数据都在更新。就是在debt表的owe两个字段上加上 tuition,bookfee的值。 
   2、问题是要是这个classname在 stuinfo里有但是在debt里没有时,怎么得到要插入的数据? 下面有代码我自己写的,帮看一下对不对,谢谢!   procedure TFchageitemcheck.updateoldstu;
var
  tnumber,tname,a:string;
begin
  with FDM.qry3updatecharge do
  begin
    close;
    sql.clear;
    SQL.Add('select debtinfo.stunumber,debtinfo.stuname,debtinfo.owetuition,debtinfo.owebookfee,debtinfo.state,stuinfo.classname from stuinfo,debtinfo');
    SQL.Add('where stuinfo.stunumber=debtinfo.stunumber and stuinfo.classname=:'''+addclass+'''');    //SQL.Add('stuinfo.stunumber=:debtinfo.stunumber and stuinfo.classname=:'''+addclass+'''');
    open;
    
    if RecordCount>0 then
    begin
      First;
      while not Eof do
      begin
        a :=FDM.qry3updatecharge.fieldbyname('stunumber').asstring;
        with FDM.qry3 do
        begin
          close;
          sql.clear;
          SQL.add('update debtinfo set owetuition=owetuition+convert(money,'''+inttostr(addtuition)+'''),owebookfee=owebookfee+convert(money,'''+ IntToStr(addbookfee) +''') where stunumber=:stunumber');
          Parameters.ParamByName('stunumber').Value := a;
          ExecSQL;
        end;
        Next;
      end    end
   else if recordcount=0 then
   begin
     with FDM.qry3addcharge do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select * from stuinfo where classname=:'''+addclass+'''');
       Open;
     end;     First;
     while not Eof do
     begin
       tnumber:= fieldbyname('stunumber').asstring;
       tname := fieldbyname('stuname').asstring;
       with FDM.qry3 do
       begin
         Close;
         SQL.Clear;
         SQL.Add('insert into debtinfo(stunumber, stuname,owetuition,owebookfee,state)');
         Parameters.ParamByName('stunumber').Value := tnumber;
         Parameters.ParamByName('stuname').Value :=  tname;
         Parameters.ParamByName('owetuition').Value := addtuition;
         Parameters.ParamByName('owebookfee').Value := addbookfee;  //两个是导入得到的数据
         Parameters.ParamByName('state').Value := 0;
         ExecSQL;
       end;
       Next;
     end;
   end;
 end;
end;   这个的数据导入时,没有说提示错,就是插入和更新了数据?与之相关的数据,表里都有

解决方案 »

  1.   

      就是在表 debtinfo里的数据没更新,也没有新的插入
      

  2.   

      建议你在数据更新和插入成功后面加一个showmessage('ok');这样更好看出错误来。
      还有tryexcept 之类的。
      

  3.   

    很久没有用mssql了,基本的代码与下面的差不多,仅供参考:更新:update debtinfo set owetuition = a.owetuition + b.tuition, owebookfee = a.owebookfee + b.bookfee from debtinfo a, charge b, stuinfo c where a.stunumber = c.stunumber and a.stuname = c.stuname and b.classname = c.classname新增:insert into debtinfo (stunumber, stuname, owetuition, owebookfee, state) select b.stunumber, b.stuname, a.tuition as owetuition, a.bookfee as owebookfee, 0 as state from charge a, stuinfo b where a.classname = b.classname and Not Exists(select 1 from debtinfo where stunumber = b.stunumber and stuname = b.stuname)
      

  4.   

             SQL.Clear;
             SQL.Add('insert into debtinfo(stunumber, stuname,owetuition,owebookfee,state)');
             Parameters.ParamByName('stunumber').Value := tnumber;
             Parameters.ParamByName('stuname').Value :=  tname;
             Parameters.ParamByName('owetuition').Value := addtuition;
             Parameters.ParamByName('owebookfee').Value := addbookfee;  //两个是导入得到的数据
             Parameters.ParamByName('state').Value := 0;
             ExecSQL;Parameters.ParamByName('stunumber').Value := tnumber这些Param没有定义,需要在SQL中定义。