【发布时间】:2011-11-24 20:38:19
【问题描述】:
我正在使用 Delphi7,Devar 的 dbExpress 驱动程序 4.70。
我删除了两个 TSQLTables(称为 A 和 B),两个 TDataSetProviders(dspA 和 dspB),两个 TClientDataSets(cdsA 和 cdsB),两个 TDataSources(dsA 和dsB)和两个 DBGrid(gridA 和 gridB)。一切都很好。如果我将cdsA.Active 设置为true,我可以看到gridA 中的数据。每个cdsB 都一样。
现在我要实现关系
A JOIN B ON a = b.
字段a是B的字段b引用的真正的A的外键,b也是B的主键。我设置的东西如下(我使用图形工具):
cdsB.MasterSource := dsA;
cdsB.MasterFields := a;
cdsB.IndexFieldNames := b;
当我执行cdsB.Open 时,我得到了这个错误:
ORA-01036: 非法变量名/编号”。
表 A 中字段a 的值始终为null(没有数据)。 TSQLMonitor 报告以下查询:
Execute: select * from A
...
Execute: select * from ENTI where (b is NULL)
:1 (Number,IN) = <NULL>
我错过了什么,如何解决?
【问题讨论】:
-
编辑您的问题以包含您正在执行的完整 SQL 语句。
-
cdsA 在你打开 B 之前打开?
-
由于您使用的是设计器,双击 Object Inspector 中的 MasterFields 属性应该会启动 'Field Link Designer'。另请参阅:Making the Table a Detail of Another Dataset
-
@TonyHopkinson,是的。我先打开 cdsA,然后打开 cdsB。
-
我将
TSQLTable B替换为TSQLQuery B。我将B语句设置为select * from B where b=:b。B.IndexFieldNames、B.MasterFields和B.MasterSource保持不变。好吧,如果我使用TSQLQuery而不是TSQLTable一切正常。这很奇怪。
标签: oracle delphi delphi-7 ora-01036