大家是用什么办法的,我用的方法很麻烦的
以ADO为例,在新建或是修改记录时,如何在记录存入之前或存入的时候来检查这个主键的数据是否已在数据库内存在,避免重复出错,请讲的详细点,谢谢
以ADO为例,在新建或是修改记录时,如何在记录存入之前或存入的时候来检查这个主键的数据是否已在数据库内存在,避免重复出错,请讲的详细点,谢谢
解决方案 »
- 如何遍历Application下的所有Forms呢?
- edit数据关联问题,急救~
- 20000、xp下屏蔽系统按键Alt-TAB, Ctl-Esc, Alt-Esc Win+组合 Alt-TAB-del 大家有的发我谢谢
- 一件让人困惑的关于DBchart的问题
- 问一个分布式事务的问题(同时对SQL Server和Oracle操作)
- 用过INFOPOWER的大侠帮我
- 有難度,說出思路也給分---delphi 調用外部程序執行登陸 下載
- 请问那有Delphi网络通信协议分析与应用实现或类似书籍的下载?(在线)
- 请试用我的【网友管理软件】
- winxp下文件夹监视无法检测到内存流输出的文件新建事件
- 如何加载动画光标
- 关于用ADO登陆数据库的问题!?
没有,就post
ado1.open;
ado1.first;
whit not ado1.eof do
if ado1.fieldbynem('').value= i //i是一个变量,表示要加入的记录的主键的值
then
改变要加入的记录的主键的值
else
next;
大体思路是这样的
AdoQuery1.Close;
AdoQuery1.Sql.Clear;
AdoQuery1.SQl.Add('Select 主键字段 From 表 Where 主键字段='''+Str+'''');
AdoQuery1.Open;
IF AdoQuery1.IsEmpty Then //表示不存在
Begin
添加记录到表中;
End
Else Begin
修改主键;
End;
aqury.SQL.Clear;
aqury.SQL.add('select 主键 from table where 主键='+要加入的记录的主键的值);
aqury.open;
if aqury.recordcount>0 then 改变要加入的记录的主键的值
eKeyViol=9729;//主键重复时的错误值
procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if (E is EDBEngineError) then
if(E as EDBEngineError).errors[0].Errorcode=eKeyViol then
begin
action:=daAbort;//挂起,中止程序继续执行
dataset.Cancel;
showmessage('不能重复'); end;end;
const eKeyViol=9729;//主键重复时的错误值
B。 就是在你的SQL 语句运行时用try 处理如果出错那就认为是重了。我觉的你呀最好是用第一种呀。
例:
procedure TForm1.ADOQueryBeforePost(...);
begin
if ADOQuery1.locate('id',value,[]) then //id为主键字段名,value为要插入的主键值
begin
showmessage('主键重复,请更改');
abort
end;
end;