我现在由于程序增加了一些功能,所以数据库表结构改变了,增加了一些字段,需要导入以前的老数据,导入数据我已经解决了,但如果新数据库表里面关键字有重复的话就会出错,怎么判断关键字的重复,还有这个字段是否存在?
如表InvData 结构是Inv_ID,Inv_Type,........
程序里Table8是关联的老数据库,Query8是关联的新数据库导入数据程序
//---------------------InvData-------------------------//
   Table8.Active;
   Table8.Open;
   Table8.Append;
   Query8.Active;
   Query8.Open;
   totalnum := Query8.RecordCount;
   for i:=0 to totalnum-1 do
   begin
     Table8.Insert;
     if (Query8.FieldValues['Inv_ID'] <> null) then
     Table8.FieldByName('Inv_ID').AsString:=Query8.FieldValues['Inv_ID'];
     if (Query8.FieldValues['Inv_Type'] <> null) then
     Table8.FieldByName('Inv_Type').AsFloat:=Query8.FieldValues['Inv_Type'];
     if (Query8.FieldValues['Inv_State'] <> null) then
     Table8.FieldByName('Inv_State').AsFloat:=Query8.FieldValues['Inv_State'];
     if (Query8.FieldValues['Inv_TaxID'] <> null) then
     Table8.FieldByName('Inv_TaxID').AsString:=Query8.FieldValues['Inv_TaxID'];
     if (Query8.FieldValues['Inv_Date'] <> null) then
     Table8.FieldByName('Inv_Date').AsString:=Query8.FieldValues['Inv_Date'];
     if (Query8.FieldValues['Inv_Currency'] <> null) then
     Table8.FieldByName('Inv_Currency').AsCurrency:=Query8.FieldValues['Inv_Currency'];
     if (Query8.FieldValues['Inv_Owner'] <> null) then
     Table8.FieldByName('Inv_Owner').AsString:=Query8.FieldValues['Inv_Owner'];
     if (Query8.FieldValues['Inv_Operator'] <> null) then
     Table8.FieldByName('Inv_Operator').AsString:=Query8.FieldValues['Inv_Operator'];
     if (Query8.FieldValues['Inv_Memo'] <> null) then
     Table8.FieldByName('Inv_Memo').AsString:=Query8.FieldValues['Inv_Memo'];
     Table8.UpdateRecord;
     Table8.Next;
     Query8.Next;
   end;各位帮帮忙,如果能更稳定的导入数据。

解决方案 »

  1.   

    判断字段是否存在用Table1.FindField(sFieldName),你那样判断只能判断一个存在的字段的值是不是为空
      

  2.   

    用locate根据关键字查找数据是否已存在
      

  3.   

    if not Table8.Locate('Inv_ID',Query8.FieldValues['Inv_ID'],[loCaseInsensitive]) then
         begin
         Table8.Insert;
         if (Query8.FieldValues['Inv_ID'] <> null) and (Query8.Fields.Fields[0].FieldName = 'Inv_ID') then
         Table8.FieldByName('Inv_ID').AsString:=Query8.FieldValues['Inv_ID'];谢谢,已解决!