DMMain.cdsSQL.Active:=True;
DMMain.cdsSQL.SQL.Text:=' update Tbl_warehouse set WareHouseName='+#39+fWareHouseName.Text+#39+' , '
                         +' WareHouseAddr=    '+#39+fWareHouseAddr.Text+#39+' ,     WareHouseMan='+#39+fWareHouseMan.Text+#39+''
                         +' WareHouseTel=     '+#39+fWareHouseTel.Text+#39+'  ,     WareHouseFax='+#39+fWareHouseFax.Text+#39+''
                         +' WarehouseBank=    '+#39+fWarehouseBank.Text+#39+' ,  WarehouseBankNo='+#39+fWarehouseBankNo.Text+#39+''
                         +' WarehouseTaxNo=   '+#39+fWarehouseTaxNo.Text+#39+''
                         +' where WareHouseID='+#39+fWareHouseID.Text+#39+'';
  ShowMessage(DMMain.cdsSQL.SQL.Text);
  DMMain.cdsSQL.ExecSQL;界面上有9个DBedit, 用户可能修改部分字段,对于空字段,Update 失败,怎么解决

解决方案 »

  1.   

    用条件判断一下呗,case when什么的
      

  2.   

    #39 + fXXX.Text + #39
    换成
    QuotedStr(fXXX.Text)
      

  3.   

    数值型字段则要判断一下,比如为空赋NULL,或不赋值
      

  4.   


    可以用Delphi自带的函数QuotedStr(),代替你的#39单引号。
    修改后的代码为:
    With DMMain.cdsSQL Do
      SQL.Clear;
      SQL.Text:=' update Tbl_warehouse set WareHouseName='+QuotedStr(fWareHouseName.Text)+' , '
                             +' WareHouseAddr=    '+QuotedStr(fWareHouseAddr.Text)+' ,     WareHouseMan='+QuotedStr(fWareHouseMan.Text)+''
                             +' WareHouseTel=     '+QuotedStr(fWareHouseTel.Text)+'  ,     WareHouseFax='+QuotedStr(fWareHouseFax.Text)+''
                             +' WarehouseBank=    '+QuotedStr(fWarehouseBank.Text)+' ,  WarehouseBankNo='+QuotedStr(fWarehouseBankNo.Text)+''
                             +' WarehouseTaxNo=   '+QuotedStr(fWarehouseTaxNo.Text)+''
                             +' where WareHouseID='+QuotedStr(fWareHouseID.Text)+'';
      ShowMessage(SQL.Text);
      ExecSQL;
    end;
      

  5.   

    确实要不同类型不同处理,建议用format函数生成SQL语句