大峽快救我,ADOADOQUERY 有沒有和BDE的QUERY的RevertRecord相似的功能,如果沒有怎樣實現?(100分)

  • 主题发起人 主题发起人 qinmingzsj
  • 开始时间 开始时间
to :子陵,
我也想這樣,但是在緩存中他已經保存啦!:)[8D]
 
to :okzjq
在BEFORPOST中怎么檢測他是重復的呢??????
 
赞同xeen的方法。
最后用TClientDataSet来处理了。
自己负责数据的取得,保存过程。
分发的时候,可以把midas.dll编译进应用中。
 
在beforepost时检测
 
procedure TMTCodeForm.ADOQueryBeforePost(DataSet: TDataSet);
var
s:String;
i:integer;
begin
inherited;

//判断新添加字段时否为空,为空则提示错误信息!
For i:=0 To Adoquery.FieldCount-1 Do
Begin
If trim(Adoquery.Fields.AsString)='' then
Begin
application.MessageBox(Pchar(Adoquery.Fields.Displaylabel+'沒有填写!'),
'提示',MB_OK+MB_ICONINFORMATION);
Adoquery.Fields.FocusControl;
Abort;
End;
End;

//用辅助adoQuery控件检查所添加记录关健字是否重复
if dataset.State in [dsInsert,dsEdit] then
begin

s:=ADOQuery.Fields[0].AsString;
assiQuery.Active:=false;
assiQuery.SQL.Clear;
case PageControl.TabIndex of
0:
AssiQuery.SQL.Add('select MZM from CMZ where MZM='''+s+'''');
1:
AssiQuery.SQL.Add('select JGM from CJG where JGM='''+s+'''');
end;
assiQuery.Active:=true;
if AssiQuery.RecordCount<> 0 then
begin
s:='关健字“'+ADOQuery.Fields[0].DisplayName+'”不能重复!';
Application.MessageBox(Pchar(s), '提示', MB_ICONWARNING+MB_OK);
Abort;
ADOQuery.Fields[0].FocusControl;
end;

s:=ADOQuery.Fields[1].AsString;
assiQuery.Active:=false;
assiQuery.SQL.Clear;
case PageControl.TabIndex of
0:
AssiQuery.SQL.Add('select MZ from CMZ where MZ='''+s+'''');
1:
AssiQuery.SQL.Add('select JG from CJG where JG='''+s+'''');AssiQuery.SQL.Add('select YDYY from CYDYY where YDYY='''+s+'''');
end;
assiQuery.Active:=true;
if AssiQuery.RecordCount<> 0 then
begin
s:='字段“'+ADOQuery.Fields[1].DisplayName+'”不能重复!';
Application.MessageBox(Pchar(s), '提示', MB_ICONWARNING+MB_OK);
Abort;
ADOQuery.Fields[1].FocusControl;
end;
end;
 
上面代码是我的程序里的一部分,能正常运行,你参考一下,但愿对你有帮助!
 
to:okzjq
谢谢你给我这么多代码!
但是我还是不明白你是怎样用其它的ADOQUERY来检测关键字重复!
AssiQuery.SQL.Add('select MZ from CMZ where MZ='''+s+'''');
你是重新从数据库里取得关键字是吗?
这样的话怎么在缓存里去检测呢?
我想在前台就检查,因为如果通过后台每增加一笔纪录就要返回去一次,会极大的影响速度的!
你看呢?





 
速度不会影响太大的..如果你的配置不错的话..应该对速度没有多大影响
 
RevertRecord 有什么用啊,没用过
 
如果你确信能生成一个不重复的编号,就不用检测啦,
有很多方法能作到这一点,
为什么要舍易求难?不好意思,没为你想办法,本人是低手。
 
多人接受答案了。
 
后退
顶部