在数据库中,Null被定义为“未知的、没有处理的”,而DELPHI和C++中,Null被定义为零,怎样将Delphi/C++中的Nil转化为数据库中的Nil呢?
    假定设定某个数据字段可为NULL,并为该字段设定一个外键,在Delphi中设定一TDBComboBox控件与之相连,如果在程序录入界面中未对该字段进行处理,则可将数据(此时为Null)更新至数据库;如对DBComboBox进行了处理后又清空(此时在Delphi中, DBComboBox.Text为’’),更新至数据库时,由于0或’’不是外键关键字段的一个值,数据库提示无法更新。
    于是在Tfield中的GetText中或TDBComboBox的Change事件中设定DBComboBox.Text为Nil,由于Delphi中的Nil不是数据库中的NULL,仍然无法将空值更新至数据库。
    最后想在数据库中建一个触发器,对输入‘’值直接改写为NULL,由于本人SQL功力有限,无法解决
    问题的关键在于DELPHI中没有真正的NULL值。

解决方案 »

  1.   

    TField.Clear();试过,不行,Clear()后TField内容仍然是nil
      

  2.   

    你的是那一组数据库存取控件?bde?ado?ibx?dbx?这些都可以啊
      

  3.   

    设定DBComboBox.Text为NULL,其内容为仍然为nil而非真正的NULL,甚至你马上会看到出现“0”这一结果。
      

  4.   

    多谢alphax,还是用TField.Clear弄好了。