2011-11-24 89 views
1

我正在使用Delphi7,Devart的dbExpress驱动程序4.70。Delphi7 master详细信息关系查询结果ORA-01036

我滴2个TSQLTables(称他们为AB),两个TDataSetProviders(dspAdspB),两个TClientDataSets(cdsAcdsB),两个TDataSources(dsAdsB)和两个DBGrids(gridAgridB)。一切都很好。如果我将cdsA.Active设置为true,则可以看到gridA中的数据。每cdsB相同。

现在我想要实现的关系

A JOIN B ON a = b. 

领域a是S场bbB的主键太真实A '由B称为小号foreing关键'。我设置的东西如下(我用的图形工具):

cdsB.MasterSource := dsA; 
cdsB.MasterFields := a; 
cdsB.IndexFieldNames := b; 

当我做cdsB.Open,我得到这个错误:

ORA-01036: illegal variable name/number".

领域a值始终null在表A(有没有数据)。 TSQLMonitor报告以下疑问: Execute: select * from A

...

Execute: select * from ENTI where (b is NULL)

:1 (Number,IN) = <NULL>

我错过了什么,以及如何这个问题能解决?

+4

编辑您的问题以包含您正在执行的完整SQL语句。 –

+0

在打开B之前,cdsA已打开? –

+0

由于您使用的是设计器,因此双击Object Inspector中的MasterFields属性应启动['Field Link Designer]“(http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/) HTML/devcommon/fieldlinkdesigner_xml.html)。另请参阅:[使表格成为另一个数据集的细节](http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/5datasetmakingthetableadetailofanotherdataset_xml.html) –

回答

0

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

无论如何它应该工作得很好,它看起来有你的SQL有问题。