在对SQLServer一条条插入记录时,如何编程避免记录重复,谢谢(30分)

  • 主题发起人 主题发起人 sunny01
  • 开始时间 开始时间
假如你对某个表dbo.table1的某个字段field1避免记录重复,只要在sql server 上把field1
设置成唯一索引就行了。
 
表建立关键字,或查询时先判断以下
 
象大富翁一样对表单编号以避免重复的表单输入也是一个不错的解决方案。
在数据库方面进行处理很麻烦。
 
g:Kill Night
 
插入前查询一下。
 
an example:


procedure TForm1.Table1
BeforePost(DataSet: TDataSet);
begin
with table2 do
begin
databasename:='c:/';
tablename:='renshi.dbf';
indexfieldnames:='bianhao';
if not active then open; {判断数据库是否打开}
Refresh; {刷新数据库}
setkey; {设置数据库为搜索状态}
fieldbyname('bianhao').asstring:=dbedit1.text;
{设置输入的编号 字段内容为搜索的标准}
gotokey;
{移动到搜寻的记录上,完成搜索}
if gotokey then
{如果找到搜索的记录,则gotokey返回true}
begin
showmessage('输入的编号已存在!请重新输入');
abort; {终止该操作}
end;
end;
end;

 
an example:


procedure TForm1.Table1
BeforePost(DataSet: TDataSet);
begin
with table2 do
begin
databasename:='c:/';
tablename:='renshi.dbf';
indexfieldnames:='bianhao';
if not active then open; {判断数据库是否打开}
Refresh; {刷新数据库}
setkey; {设置数据库为搜索状态}
fieldbyname('bianhao').asstring:=dbedit1.text;
{设置输入的编号 字段内容为搜索的标准}
gotokey;
{移动到搜寻的记录上,完成搜索}
if gotokey then
{如果找到搜索的记录,则gotokey返回true}
begin
showmessage('输入的编号已存在!请重新输入');
abort; {终止该操作}
end;
end;
end;

 
先查询一下,若存在,则改为UPDATE
 
首先设置编号为关键字段
try
with query do begin

sql.clear;
sql.add(' insert.........
execsql;
end;
except
with query do begin

sql.clear;
sql.add(' update.........
execsql;
end;
end;
 
朋友,请参考
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=271552
 
同意fstao、jqw,其余的监测错误码即可。尽量用数据库本身的功能。
 
倾向于监测错误码即可。尽量用数据库本身的功能。
 
用PK很方便的,不知道你为何不用,如果一个主键不够用,就设制联合主键,即选中多个
字段将其设为主键。
实在要在程序中判断的话,用SQL语句,将要插入记录的某个字段作为条件查询,如:
select Field from TableName where Field=要插入的值
如果返回数据集为空的话,就执行插入。
 
设置唯一索引,选中“ignore duplicate key”
就可以自动删除重复值。而不会终止插入。
 
输入时,不需要将记录锁住吗?
 
接受答案了.
 
后退
顶部