L
Lidong
Unregistered / Unconfirmed
GUEST, unregistred user!
主从表更新不好控制。所以不设置主从关系,而是在主表的AFTERSCROLL事件中,将参数传给从表,并关闭和打开从表。
1、用两tquery,两个Tupdatesql来处理数据,querymaster(主表)和querydetail(从表)的cachedupdate均设为true
2、在从表中,写一个带参数的SQL,但不指定DATASOURCE。
SELECT * FROM DETAILTABLE WHERE MASTERID=:MASTERID
3、在主表的AFTERSCROLL中,给从表单指定参数
QUERYDETAIL.PARAMBYNAME('MASTERID').VALUE:=QUERYMASTER.FIELDBYNAME('MASTERID').VALUE;
QUERYDETAIL.ACTIVE:=FALSE;
QUERYDETAIL.ACTIVE:=TRUE;
4、在从表的ONNEWRECORD中,
QUERYDETAIL.FIELDBYNAME('MASTERID').VALUE:=QUERYMASTER.FIELDBYNAME('MASTERID').VALUE;
这是为新增记录考虑的。
5、以后,您就可以正常对主、从表中运用APPLYUPDATES。
6、运行时,先querymaster.insert,然后在主表和从表写入数据,然后:
Database1->StartTransaction();
try
{ Query1->ApplyUpdates();
Query2->ApplyUpdates(); // try to write the updates to the database
Database1->Commit(); // on success, commit the changes;
}
catch (...)
{
Database1->Rollback(); // on failure, undo the changes
throw; // throw the exception to prevent a call to CommitUpdates!
}
Query1->CommitUpdates();
Query2->CommitUpdates(); // on success, clear the cache
--------------------------------------------------------------------------------
可是,执行到"Database1->Commit()"时死掉,如果使用两个事物分别对主从表提交时则正确,
但是我想用一个事物完成两个表的提交,该怎样做?
我用的是Pwin98SE+CB5+SQL6.5
1、用两tquery,两个Tupdatesql来处理数据,querymaster(主表)和querydetail(从表)的cachedupdate均设为true
2、在从表中,写一个带参数的SQL,但不指定DATASOURCE。
SELECT * FROM DETAILTABLE WHERE MASTERID=:MASTERID
3、在主表的AFTERSCROLL中,给从表单指定参数
QUERYDETAIL.PARAMBYNAME('MASTERID').VALUE:=QUERYMASTER.FIELDBYNAME('MASTERID').VALUE;
QUERYDETAIL.ACTIVE:=FALSE;
QUERYDETAIL.ACTIVE:=TRUE;
4、在从表的ONNEWRECORD中,
QUERYDETAIL.FIELDBYNAME('MASTERID').VALUE:=QUERYMASTER.FIELDBYNAME('MASTERID').VALUE;
这是为新增记录考虑的。
5、以后,您就可以正常对主、从表中运用APPLYUPDATES。
6、运行时,先querymaster.insert,然后在主表和从表写入数据,然后:
Database1->StartTransaction();
try
{ Query1->ApplyUpdates();
Query2->ApplyUpdates(); // try to write the updates to the database
Database1->Commit(); // on success, commit the changes;
}
catch (...)
{
Database1->Rollback(); // on failure, undo the changes
throw; // throw the exception to prevent a call to CommitUpdates!
}
Query1->CommitUpdates();
Query2->CommitUpdates(); // on success, clear the cache
--------------------------------------------------------------------------------
可是,执行到"Database1->Commit()"时死掉,如果使用两个事物分别对主从表提交时则正确,
但是我想用一个事物完成两个表的提交,该怎样做?
我用的是Pwin98SE+CB5+SQL6.5