【问题标题】:Delphi7 master detail relations query results in ORA-01036Delphi7 主明细关系查询结果 ORA-01036
【发布时间】:2011-11-24 20:38:19
【问题描述】:

我正在使用 Delphi7,Devar 的 dbExpress 驱动程序 4.70。

我删除了两个 TSQLTables(称为 AB),两个 TDataSetProviders(dspAdspB),两个 TClientDataSets(cdsAcdsB),两个 TDataSources(dsAdsB)和两个 DBGrid(gridAgridB)。一切都很好。如果我将cdsA.Active 设置为true,我可以看到gridA 中的数据。每个cdsB 都一样。

现在我要实现关系

A JOIN B ON a = b.

字段aB的字段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=:bB.IndexFieldNamesB.MasterFieldsB.MasterSource 保持不变。好吧,如果我使用 TSQLQuery 而不是 TSQLTable 一切正常。这很奇怪。

标签: oracle delphi delphi-7 ora-01036


【解决方案1】:

使用 Datasnap 时,您应该在源数据集上设置 M/D 关系,而不是在客户端数据集上。它将在主客户端数据集中创建一个“数据集字段”。然后将此字段分配给子客户端数据集。这种方法也更高效。

无论如何它应该也能正常工作,它看起来你的 SQL 有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多