关于两个数据表的问题(60分,倾家荡产了)(60分)

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

daidaiworm

Unregistered / Unconfirmed
GUEST, unregistred user!
两个dbf表都有一个唯一的,一一对应的如id字段,我想让无论哪一个表所指向的
记录变化了,另一个表都同时指向有相同id的记录。
 
设表1为TableA,表2为TableB
在两表的AfterScroll事件中加入LOCATE就可以了
if not Locate('ID',TableB.ID,[]) then //如果是在TableB中,就改为TableA.ID
showmessage('No this ID in TableB!');
 
设置成明细表算啦!
 
我有想过明细表的方式,但明细表的方式可要处理的事情更多。请daidaiworm权衡考虑
 
编程实现!?
 
我试过在两个表的afterscroll事件中添加locate,但是这样不能通过编译。还有如果用明
细表好像如果tableb是detailtable的话,那它只能显示id和tablea相同的那一条记录,这
不是我所要的
 
不能通过编译应该不是LOCATE的问题,而可能是你写的代码有问题,贴出来看看:)
 
通过SQL 语句中的游标,在TABLEA相连的DATASOURECR的SOURCECHANGE时间中写,
移动游标(TABLEB)的值和TABLEA的一致;
 
没错游标也不错,不过数据库应该是SQL SERVER什么的,本地库就不好实现了。
 
tablea的afterscroll中:locate('id',tableb.fieldbyname('id').asstring,[]);
单是以上这句可以让tableb跟着tablea动,编译可以通过
但当我在tableb的afterscroll中添加locate('id',tablea.fieldbyname('id').asstring,[]);
时编译就不能通过了!
zhengzhijia说的方法对dbf有效吗?可以举个例子吗?
 
不好意思,没想到这点,按上面代码的话,会造成死循环——只要一触发其中一个表的事
件,另一个表也会相应触发该事件。有一个麻烦一点的做法,就是先定义一个变量iID
AfterScroll的事件改动如下
iID:=tableAID.value;
if tableBID.value<>iID then //如果表B的当前ID与iID相同,就不再动了
if not Locate('ID',TableB.ID,[]) then //如果是在TableB中,就改为TableA.ID
showmessage('No this ID in TableB!');
我的回答仅做本地库的参考,如果是SQL SERVER可以参考游标,但也要考虑是否会造成死
循环的问题。
 
多人接受答案了。
 
后退
顶部