F
fstao
Unregistered / Unconfirmed
GUEST, unregistred user!
数据库为Mssql7,假如有一表dbo.table1,其字段id,no,name。其数据如下:
id no name
1 a1 a
2 a2 b
假如我要字段name的数据不能重复,只要把name设置成“Unique”就行了。如
果我要把字段no和name不能同时重复又如何判断呢?例如:在dbo.table1再添
加一个数据:id=3,no=a2和name=b时,一更新马上提示:No和name不能同时
重复。我以前是用程序来判断,在table1的beforepost事件:
with query1 do
begin
close;
sql.clear;
sql.add('select count(*) from table1 where
no=:no,name=:name and id<>:id');
parambyname('no').Asstring:=table1no.value;
parambyname('name').AsString:=table1name.value;
Parambyname)'id').Asfloat:=table1id.value;
open;
end;
if query1.fields[0].asinteger>0 then
begin
messagedlg('No和name不能同时重复',mtinformation,[mbyes],0);
abort;
end;
我这样做有一个最大的问题就是:如果数据有几万条数据时,每次提交数据之前
都要查询一下有没有重复,这样就会降低速度。另一方面在多用户同时操作同一
个表时,也会出现查不出数据重复。有没有其它更好的方法呢?
id no name
1 a1 a
2 a2 b
假如我要字段name的数据不能重复,只要把name设置成“Unique”就行了。如
果我要把字段no和name不能同时重复又如何判断呢?例如:在dbo.table1再添
加一个数据:id=3,no=a2和name=b时,一更新马上提示:No和name不能同时
重复。我以前是用程序来判断,在table1的beforepost事件:
with query1 do
begin
close;
sql.clear;
sql.add('select count(*) from table1 where
no=:no,name=:name and id<>:id');
parambyname('no').Asstring:=table1no.value;
parambyname('name').AsString:=table1name.value;
Parambyname)'id').Asfloat:=table1id.value;
open;
end;
if query1.fields[0].asinteger>0 then
begin
messagedlg('No和name不能同时重复',mtinformation,[mbyes],0);
abort;
end;
我这样做有一个最大的问题就是:如果数据有几万条数据时,每次提交数据之前
都要查询一下有没有重复,这样就会降低速度。另一方面在多用户同时操作同一
个表时,也会出现查不出数据重复。有没有其它更好的方法呢?