post后,在另一窗口却找不到?(50分)

  • 主题发起人 主题发起人 powersun
  • 开始时间 开始时间
P

powersun

Unregistered / Unconfirmed
GUEST, unregistred user!
简单问题:在Form1中,ADOConnection1、adodateset1,当在adodataset1中找不到某一条记录时,showmodal添加窗口form2,
form2中
with adotable1 do
begin
append;
fieldbyname('zi').asstring:=trim(label1.Caption);
fieldbyname('shu').asinteger:=strtoint(edit1.text);
post;
end;
从form2中返回form1时,再次查找却找不到,而我在form2中添加代码后查找却OK!
Why?
 
你用事务提交一下吧.
if conn.InTransaction then
conn.CommitTrans;
try
conn.BeginTrans;
...
conn.CommitTrans;
except
conn.RollbackTrans;
end;
 
to zhangkan:
针对我的问题,事务提交放在form1、还是form2??
 
你看看你的ADODataset的LockType是不是ltBatchOptimistic,如果是说是缓存更新,并没
真正提交
 
是ltOptimistic
 
可能与你的ADODataSet的CommandType属性设置为cmText有关,重新打开ADODataSet后就可以看到了
 
事务提交,不能解决!
 
to YNTW:
重新打开ADODataSet也不行!
 
老兄,再贴点与之相关的代码出来,就前面那一点看不出别的问题了
 
是没有写进去,还是没有刷新啊
 
是没有刷新
tmp:=ADOdataset1.locate('zi',xing,[loCaseInsensitive]);
If tmp then
begin
n:=ADOdataset1.FieldByName('shu').Asinteger;
end
else
//如果找不到该字,添加新字
begin
form2:=Tform2.Create(Application);
form2.Label1.Caption:=xing;
form2.SHOWMODAL;//调出form2窗口,添加新找不到的记录
ADOdataset1.locate('zi',xing,[loCaseInsensitive]);//从form2返回后继续再次查找
n:=ADOdataset1.FieldByName('shu').Asinteger;

在form2中,添加新记录
with adotable1 do
begin
append;
fieldbyname('zi').asstring:=trim(label1.Caption);
fieldbyname('shu').asinteger:=strtoint(edit1.text);
post;
end;
从form2中返回form1时,再次查找却找不到,而我在form2中添加代码后查找却OK!
Why?
 
看你这样子,应该是没有刷新.你是建立FORM1表单在前,然后在FORM2中增加数据,再回到FORM1
中,但FORM1并没有重建,数据当然是以前的.你用adoquery.refresh试试,或者用
adoquery1.active:=False;
adoquery1.active:=True;
修改如下:
begin
form2:=Tform2.Create(Application);
form2.Label1.Caption:=xing;
form2.SHOWMODAL;//调出form2窗口,添加新找不到的记录
adodataset1.refresh;//或者是
{adodataset1.active:=False;
adodataset1.active:=True;
}
ADOdataset1.locate('zi',xing,[loCaseInsensitive]);//从form2返回后继续再次查找
n:=ADOdataset1.FieldByName('shu').Asinteger;

若你还要加上定位,就加上BOOKMARK,或者自己记下在哪一笔,再用MOVEBY到那一笔.
 
to zhangkan:
终于遇到懂得了,但是我以前
adodataset1.refresh;//时,总是执行错误!好象是死机!
 
to zhangkan:
并且以前
adodataset1.active:=False;
adodataset1.active:=True;
执行的结果仍然是n值总是14(不管实际上是几),而将form1关闭再打开,以前添加的记录值查找的结果就正确了!
邪乎!
 
后退
顶部