我正在使用 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)
因此我通过“join”查询获得的结果数据集具有这样的字段
Name
Type
Longth
Type 是 Ship_types 表中的 Ship_type 字段,通过 Type_Id 外键查询从 Ships 表连接到该表。
数据显示正常。
然后我需要直接通过DBGrid编辑我的数据。为此,我使用 TIBUpdateSQL 组件。为了显示类型(查找)字段,我选择了 DBGrid.Columns.PickList 属性。
所以我的问题是如何让 TIBUpdateSQL 处理这种类型的字段?因为我知道如果它是没有外键的单表,我必须将更新语句写入更新组件的ModifySQL属性。但我对 fk 字段有什么用呢?我可以在 UpdateSQL 组件中编写 update join 语句吗?如果不能,我还可以通过什么方式来实现?
我不需要更新两个表,我只需要更新Ships表,但是在显示数据集和更新数据集时有varchar(单词表示)字段,它必须是整数(对应的id)以适应表结构.
TIBUpdateSQL 中的编辑器对我来说不是解决方案,因为我在运行时将查询分配给 TIBQuery。
最佳答案
您不能使用带有 JOIN 的 select 来更新表,只能使用子选择。
子选择示例:
SELECT TABLE_NAME.*
, (SELECT TABLE_NAME2.NAME FROM TABLE_NAME2 WHERE TABLE_NAME2.ID = TABLE_NAME.ID)
FROM TABLE_NAME
关于Delphi 7 更新连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359234/