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

  • 主题发起人 主题发起人 DreamTiger
  • 开始时间 开始时间
D

DreamTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
看了ID:94043的一样的问题,但还是没有搞懂。

我的主从表结构是这样的:
//主表
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;

//添加数据:
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO "SPInfo.db"');
Query1.SQL.Add('(SeqID, SeqName, SeqDate, SeqContent, Seqlength)');
Query1.SQL.Add('VALUES (:SeqID,:SeqName,:SeqDate,:SeqContent,:SeqLength)');
Query1.ParamByName('SeqID').AsString := sID;
Query1.ParamByName('SeqName').AsString := sName;
Query1.ParamByName('SeqDate').AsDate := dtDate;
Query1.ParamByName('SeqContent').AsString := sContent;
Query1.ParamByName('SeqLength').AsInteger := iLength;
Query1.ExecSQL;

Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO "SPSeq.db"');
Query1.SQL.Add('(SeqID, Sequence)');
Query1.SQL.Add('VALUES (:SeqID,:Sequence)');
Query1.ParamByName('SeqID').AsString := sID;
Query1.ParamByName('Sequence').AsMemo := sSequence;
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用的是同一个。

我现在搞不懂到底是怎么回事了,是不是还有什么需要设置的?
 
不能肯定问题出在哪.
试试加几句:
query1.sql.clear;
query1.sql.text := 'create index SeqID on "SPSeq.db" (SeqID)';
query1.execSQL;
 
不行,说index已经存在。
 
1. spseq.db的seqid应该不是primary key才对吧, 否则只能有一个detail与master
对应.
2. 要确定spinfo.db里的seqid确实在spseq里有.
 
cytown:我的确只有一个detail与master对应
spinfo.db中的seqid跟spseq.db中完全一样的,
从添加数据那段程序可以看到。
 
去掉indexfieldnames试试.
 
出了怪事了,不知怎么的,现在怎么用都是好的,有没有indexfieldnames
一样。算了,把分分了。
 
后退
顶部