Delphi 7 更新连接表

标签 delphi join delphi-7 firebird firebird1.5

我正在使用 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/

相关文章:

php - MySQL查询: how to join and count duplicates and order by that count

delphi - 将 WSDL 导入 Delphi 7 时出现堆栈溢出错误

delphi - 为什么如果通过变量向数据库添加值,则会添加 “ADOQuery1”,如果直接添加,则会添加正确的值?

java - 使用@ManyToMany 自引用对称 Hibernate 映射表

mysql - SQL 联合或其他表连接

Delphi ADO 与 MS Access - 运行特定查询后查询时间减少

德尔福。反转光标颜色

delphi - 如何通过 TADODataset 创建和使用聚合字段?

class - 为什么这段代码有效,Delphi 在这种情况下如何实例化一个类?

delphi - 在 Delphi Mdi 应用程序的父窗口中使用 KeyDown 事件