3

我正在使用 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(lookup) 字段,我选择了 DBGrid.Columns.PickList 属性。

所以我的问题是如何让 TIBUpdateSQL 使用这种类型的字段?因为我知道如果它是没有外键的单个表,我必须将更新语句写入更新组件的 ModifySQL 属性。但是我对 fk 字段做了什么?我可以在 UpdateSQL 组件中编写更新连接语句吗?如果没有,我还能用什么方法呢?

我不需要更新两个表,我只需要更新 Ships 表,但是在显示数据集时有 varchar(word representation) 字段,在更新数据集时它必须是整数(对应的 id)以适应表结构。

TIBUpdateSQL 中的编辑器不是我的解决方案,因为我在运行时将查询分配给 TIBQuery。

4

1 回答 1

3

您不能使用带有 JOIN 的选择来更新表,只能使用子选择。

子选择示例:

SELECT TABLE_NAME.*
     , (SELECT TABLE_NAME2.NAME FROM TABLE_NAME2 WHERE TABLE_NAME2.ID = TABLE_NAME.ID)
FROM TABLE_NAME
于 2015-06-05T12:57:18.933 回答