Detail表中的数据为何不跟着主表变?(20分)

  • 主题发起人 主题发起人 wtiebo
  • 开始时间 开始时间
W

wtiebo

Unregistered / Unconfirmed
GUEST, unregistred user!
在Paradox中,我用Master-Detail关联两个表,但细表记录总是不跟
着主表变.为什么?
 
你用TTable还是TQuery?
 
让您见笑了,我用的是Table。因为我要随时修改子表中的数据。要使用Query,
我想会很麻烦。
 
那里,我只是想问清楚你的实现方式,
因为不同实现方式的问题和解决办法不同。

不过既然是TTable,我就帮不上什么忙了,
因为从来不用,没办法 :(
 
我知道您善于用Query,不知您是否有更好的解决方法(用Query的)?
 
用Query实现Master-Detail很容易,可以看看
Delphi的例子,大致概念是:
Detail的query的DataSource属性指向Master Query,
然后在SQL中通过参数来指定连接字段。

关键是修改,既然你能用TTable,显然不是复杂查询,
因此将TQuery的RequestLive置为True就可以了。
但如果修改主表,就要同时刷新子表,以确保数据显示的正确。
 
先谢谢了,要是成功的话,分马上就到。不过,我怀疑问题还是会出在
Query处。到时候还请多多指教。
 
现在连这个简单的SQL都不能执行了:
with MyDataModule.Query1 do
begin
SQL.Clear;
SQL.Add('Select * From d:/publish/database/sale1.db ');
Open;
end;
错误为:
Token not found.
Token: d
Line Number: 1.
为什么老是这种错?
 
虽然帖子贴错了地方,还是能发现 :)
可错误就不那么容易发现了 :(

是不是你的Query构件及BDE设置有什么问题?
我看最好是在BDE中定义Alias指向d:/publish/database/
而后TQuery的DatabaseName指向这个Alias,
直接写'Select * From sale1'好一点,更容易调试。

可以看看DBDEMOS这个Alias及Delphi中的相应例子。
 
Detail表的属性你是怎么设的?
我用的就是Table,一点问题都没有!!
 
我已近定义了Alias,但是也有点小问题.时间来不及了,明天我在试试,
然后再向您请教.谢谢您!
 
Detail表的属性很简单,就是把它的MasteSource指向主表所连接的
DataSource.
 
在使用Local SQL时,对表名有如下的约定:

Local SQL supports full file and path specifications for table names.
Table names with path or file-name exections must be enclosed in
single or double quotation marks. For example:

SELECT * FROM 'PARTS.DBF'
SELECT * FROM "C://SAMPLE//PARTS.DBF"
 
不知道你是如何关联的,子表的次索引设定了吗?
 
接受答案了.
 
看了这些答案,我还是没有弄清楚:
我的主从表结构是这样的:
//主表
Query1.SQL.Clear;
Query1.SQL.Add('CREATE TABLE "SPInfo.db"');
Query1.SQL.Add('(');
Query1.SQL.Add(' SeqID CHAR(8),');
Query1.SQL.Add(' SeqName CHAR(20),');
Query1.SQL.Add(' SeqDate DATE,');
Query1.SQL.Add(' SeqContent CHAR(100),');
Query1.SQL.Add(' SeqLength INTEGER,');
Query1.SQL.Add(' PRIMARY KEY (SeqID)');
Query1.SQL.Add(')');
Query1.ExecSQL;

//从表
Query1.SQL.Clear;
Query1.SQL.Add('CREATE TABLE "SPSeq.db"');
Query1.SQL.Add('(');
Query1.SQL.Add(' SeqID CHAR(8),');
Query1.SQL.Add(' Sequence BLOB(240,1),');
Query1.SQL.Add(' PRIMARY KEY (SeqID)');
Query1.SQL.Add(')');
Query1.ExecSQL;

我连接了Table1到SPInfo.db,DataSource1到Table1,
Table2到SPSeq.db,DataSource2到Table2,
Table2的MasterSource是DataSource1,MasterField是SeqID,
IndexFieldName也是SeqID。
我用DBEdit显示了SpInfo.db中的所有字段,用DBMemo显示SPSeq.db的
Sequence字段。如果我不把Table2连接到DataSource1上,DBMemo能正常
显示第一条纪录的Sequence字段值,但一旦设定了MasterSource和MasterField,
IndexFieldName,DBMemo就不显示了,为空,换成DBGrid的话,连接后SeqID也
为空。但是SeqID是肯定一样的,我是通过转换一个文件,将不同部分转到不同
数据库中的,SeqID用的是同一个。

我现在搞不懂到底是怎么回事了。如果谁能回答的话,我会另外加50分。
 
后退
顶部