我用要把一个Oracle表中的数据导入到一个SQL Server表中, 组件连接如下:SQL Server数据库<-->ADOConnection1<-->ADOQuery1<-->DataSetProvider1<-->ClientDataSet1Oracle数据库<-->ADOConnection2<-->ADOQuery2ClientDataSet1.CommandText := 'update ShipComp set ShipName=:SN, Power=:Pw';
ClientDataSet1.Params.ParamByName('SN').Value := ADOQuery2.FieldByName('ShipName').Value;
ClientDataSet1.Params.ParamByName('Pw').Value := ADOQuery2.FieldByName('Power').Value;
ClientDataSet1.Execute; 其中ShipName字段为字符串型, Power字段为整形, 当ADOQuery2里的字段内容为NULL时,无法执行更新. 但我的程序里又不能用AsString或AsInteger这样的方法来硬性转换, 请问还有什么好办法吗?

解决方案 »

  1.   

    ClientDataSet1.CommandText := 'update ShipComp set ShipName=:SN, Power=:Pw';
    if ADOQuery2.FieldByName('ShipName').value<>null then
    ClientDataSet1.Params.ParamValues['SN']:= ADOQuery2.FieldByName('ShipName').Value;
    if ADOQuery2.FieldByName('ShipName').value<>null then
    ClientDataSet1.Params.ParamValues['Pw']:= ADOQuery2.FieldByName('Power').Value;
    ClientDataSet1.Execute; 
      

  2.   

    ClientDataSet1.CommandText := 'update ShipComp set isnull(ShipName,1)=isnull(:SN,1), isnull(Power,1)=isnull(:Pw,1)';
    if ADOQuery2.FieldByName('ShipName').value<>null then
    ClientDataSet1.Params.ParamValues['SN']:= ADOQuery2.FieldByName('ShipName').Value;
    if ADOQuery2.FieldByName('ShipName').value<>null then
    ClientDataSet1.Params.ParamValues['Pw']:= ADOQuery2.FieldByName('Power').Value;
    ClientDataSet1.Execute;
      

  3.   

    ClientDataSet1.CommandText := 'update ShipComp set ShipName=nullif(isnull(:SN,0),0), Power=nullif(isnull(:Pw,0),0)';
    if ADOQuery2.FieldByName('ShipName').value<>null then
    ClientDataSet1.Params.ParamValues['SN']:= ADOQuery2.FieldByName('ShipName').Value;
    if ADOQuery2.FieldByName('ShipName').value<>null then
    ClientDataSet1.Params.ParamValues['Pw']:= ADOQuery2.FieldByName('Power').Value;
    ClientDataSet1.Execute;