如何避免数据记录的自动提交?(100分)

H

hfhwm

Unregistered / Unconfirmed
GUEST, unregistred user!
在输入数据时,为了避免姓名重复,输入姓名后用locate查找一下,
但在发现重复姓名后,adoquery已经post了,我不想把姓名设为主
键,请教高手如何解决?我用ado连接的access数据库。
 
adoquery的locktype设置为ltBatchOptimistic
 
使用缓存机制:
1.CursorType := KeySet or Static
2.LOckType := BatchOptimistic
3.执行的sql必须是Select (也就是激活一个记录集,准备添加数据)
post之后,数据存于缓存

在没有UpdateApply的时候,是不会向数据库提交的。
 
多谢,但adoquery的locktype已经设置为ltBatchOptimistic。
 
完颜康的方法试了,但仍然不行。
 
在ADOQuery的OnBeforePost事件中先判断一下.
 
楼上说的是一个好办法,举各例子说说判断什么,如何判断?
 
//GetRecordSet是个函数,根据SQL取得记录集
if GetRecordSet('select count(*) from tabname where 姓名='''+sname+'''').recordcount>0 then
begin
showmessage('姓名重复');
abort;
end;
 
我是delphi新手,可否请ysai详细说明一下,因我按照上述方法做时,delphi报错
GetRecordSet没有声明
 
你得自己写这个函数!
我的程序中是这样写的:
function GetRecordSet(SQLString:String):TADODataSet;
//根据SQL语句取得记录集
begin
try
result:=TADODataSet.Create(nil);
CNMain.Errors.Clear;//CNMain是ADO连接
CMMain.CommandText:=SQLString;//CMMain是TADOCommand
result.Recordset:=CMMain.Execute;
except
result:=nil;
end;
end;
 
谢谢ysai如此快答复,但我在程序中只用了一个adoquery,一个datasource,
没用adodataset也没用adocommand,该如何呢?
 
在数据模块中加不就行了?
我的DataModule中有一个连接,一个TADOCommand,一个TADOQuery,
所有数据库的访问都通过这个模块,所有访问数据库的共享函数也放在里面
如上面的GetRecordSet,还有ExecuteSQL什么的
 
问题已经基本解决,我认为yasi的方法可行,但只是为了验证一下有无重复记录
又是写函数,又是建数据模块,感觉像牛刀杀鸡。最后添了一个adoquery,一个
datasource,输入姓名后在里面locate,找到便在第一个adoquery里cancel。
thanks for all!
 
顶部