请各位大哥帮一下,写一个函数判断数据库表的主键是否重复,并找出主键的字段名称提示给用户(在dataset的BeforePost事件实现)前台用DELPHI后台用SQL SERVER
解决方案 »
- 关于应付款问题,请各位大侠帮忙,谢谢!~
- 关于变量的问题
- 毕业设计!delphi 7 + sql 或delphi +Access
- 根据treeview显示的目录,如何画出组织结构图?
- borland socket server 的thread cacheing size 应该设为多大是10,还是。。timeout的值应该设成多大?
- 关于报表的问题,下午就要报!希望能有高人指点
- 关于with的问题,欢迎讨论,呵呵。
- MainMenu1+ToolBar 引起的Caption的问题 请帮忙。急 急急。。。。。
- Foxmail 是用Delphi做的:谈谈4.0各部分分别是用哪个控件实现的,希望大家畅所欲言
- 怎样做光盘的自动运行,软件不能从光盘拷贝?
- dll中有数据库组件就出错
- 老父无钱供儿上大学服毒自杀 高额学费逼死农民!
with CustTable do
begin
if Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), []) then SHowMessage('重复数据');
end;
with Aodquery1 do
bein
Close;
SQL.Clear;
SQL.Add(Select * from where 主键 := '''+Edit1.text+''');
Open;
if Adoquery1.RecordCount <> 0 then
begin
SHowMessage('产品编号已存在,请重新录入!');
Exit;
end;
end;
1、判断主键是否重复;
2、给用户明确、友好的提示。第一个,肯定要数据库系统自己来判断。设想由你自己来判断,则首先你要确定哪几个字段是主键,然后,你要人为判断是否存在一条记录,这条记录的几个主键字段和你要提交的记录是有冲突的。你可以用一个where去进行select count(*),如果为1则冲突,如果为0则不冲突。但是这样,则太过麻烦,而且你并不能保证你作完where判断之后到你提交数据之前的小段时间内,是否有别的人提交了同样的数据。所以,我建议还是在try except里面捕获数据库异常,来作为判断主键冲突的手段。假设你是用ADO控件访问SQL Server,则捕获EOleException,判断ErrorCode 是否为 -2147217873。第二个,关键问题在于找出关键字字段的名称。如果你的表结构已经固定下来不变了,你当然可以硬编码进去,告诉用户是这几个字段出错了。如果你想做的动态些,我现在也还没有找到很好的办法。回去研究一下,还有也许别的同志能有好的办法。
注意要对错误类型有一定的筛选.
用try except 捕获异常
select * from where
function isprimary(tablestr: string; dataset: trzdataset): boolean;
两个参数就可以了
用这个系统存储过程exec sp_pkeys @table_name
我还没有写好,正在写
//SQL 的插入语句
except
//插入不成功,给出提示
end;