我正在使用Delphi 7和Firebird数据库。我正在使用TIBDatabase,TIBTransaction,TIBQuery,TIBDataSet和DBGrid来建立连接并提供用于处理表的用户界面。在我的数据库中,我有两个表:
Ships
fields
Id integer
Name varchar(20)
Type_Id(Fk) integer
Longth integer
Ship_types
fields
Id(Pk) integer
Ship_type varchar(10)
因此,我通过“加入”查询获得的结果数据集具有此类字段
Name
Type
Longth
类型是Ship_types表中的Ship_type字段,该表通过从Ships表中通过Type_Id外键查询到此表而加入。
数据正常显示。
然后我需要直接通过DBGrid编辑我的数据。为此,我使用TIBUpdateSQL组件。为了显示Type(查找)字段,我选择了DBGrid.Columns.PickList属性。
所以我的问题是如何让TIBUpdateSQL与这种类型的字段一起工作?因为我知道如果它是没有外键的单表,我必须将update语句写入update组件的ModifySQL属性。但是我对fk字段做了什么?我可以在UpdateSQL组件中编写update join语句,如果没有,还可以用其他方式编写吗?
我不需要更新两个表,我只需更新Ships表,但在显示数据集时有varchar(字表示)字段,在更新数据集时,它必须是整数(对应的id)以适应表结构
TIBUpdateSQL中的编辑器不适合我,因为我在运行时将查询分配给TIBQuery。
答案 0 :(得分:3)
您不能使用带有JOIN的select来更新表,只能使用子选择。
子选择示例:
SELECT TABLE_NAME.*
, (SELECT TABLE_NAME2.NAME FROM TABLE_NAME2 WHERE TABLE_NAME2.ID = TABLE_NAME.ID)
FROM TABLE_NAME