16 个解决方案
#1
先对主键进行判断
有重复就退出呀
有重复就退出呀
#2
with tquery do
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
#3
with tquery do
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
#4
方法1:可在TQuery事件 ONBeforePost()写查询是否有输入主键列字符串是否重复;
方法2:在保存 Query1.Post 前作判断即可;
方法3:使用异常处理方法;
try
Query1.Post ;
Except
shwomessage('主键重复!');
Query1.cancel ; // 要放弃则使用该句 ;
end;
#5
在TQuery的beforePost事件里做判断:
begin
..... //业务规则
if 不允许保存 then
Abort;
end;
begin
..... //业务规则
if 不允许保存 then
Abort;
end;
#6
运行SQL语句出现错误,程序员如何扑捉该异常呢?很简单,看看下面的函数:
Const
ExecSQLMode = 0 ;
OpenSQLMode = 1 ;
ResultRight = ''SQL query result is right'' ;
...
function RunSql(RunQuery: TQuery; Sqls: TStringList; var ErrorMsg: string;
Mode: integer) : integer ;
begin
ErrorMsg := ResultRight ;
Result := 0 ;
try
RunQuery.DatabaseName := ''RecordDB'' ;
RunQuery.SQL.Clear() ;
RunQuery.SQL.AddStrings(Sqls) ;
if Mode = ExecSQLMode then
RunQuery.ExecSQL()
else
RunQuery.Open() ;
except
on e:exception do
ErrorMsg := e.Message + #13 + #10 +''--- 错误是俺发现的 ---'' ;
end;
end;
朋友看明白了吧,我的函数很简单,将SQL语句代码段作为参数传递给TQuery组件,通过设置查询方式(ExecSQLMode、OpenSQLMode)来处理有结果集返回的数据查询语句(select)或是没有结果集返回的数据操作语言(update、delete、insert、create等)。而异常的扑捉呢,我们扑捉所有异常的老祖宗Exception,因为Delphi的所有异常都是从Exception继承下来的,这样一个简单的SQL语句运行和异常处理函数就完成了,一旦返回的ErrorMsg的值不是ResultRight,ErrorMsg就会返回异常的信息,程序员就可以加以判断以处理不同
Const
ExecSQLMode = 0 ;
OpenSQLMode = 1 ;
ResultRight = ''SQL query result is right'' ;
...
function RunSql(RunQuery: TQuery; Sqls: TStringList; var ErrorMsg: string;
Mode: integer) : integer ;
begin
ErrorMsg := ResultRight ;
Result := 0 ;
try
RunQuery.DatabaseName := ''RecordDB'' ;
RunQuery.SQL.Clear() ;
RunQuery.SQL.AddStrings(Sqls) ;
if Mode = ExecSQLMode then
RunQuery.ExecSQL()
else
RunQuery.Open() ;
except
on e:exception do
ErrorMsg := e.Message + #13 + #10 +''--- 错误是俺发现的 ---'' ;
end;
end;
朋友看明白了吧,我的函数很简单,将SQL语句代码段作为参数传递给TQuery组件,通过设置查询方式(ExecSQLMode、OpenSQLMode)来处理有结果集返回的数据查询语句(select)或是没有结果集返回的数据操作语言(update、delete、insert、create等)。而异常的扑捉呢,我们扑捉所有异常的老祖宗Exception,因为Delphi的所有异常都是从Exception继承下来的,这样一个简单的SQL语句运行和异常处理函数就完成了,一旦返回的ErrorMsg的值不是ResultRight,ErrorMsg就会返回异常的信息,程序员就可以加以判断以处理不同
#7
try
except
end;
具体的主键约束可以用数据库来实现啊,存储数据的时候吧提交任务放在try里就可以了
except
end;
具体的主键约束可以用数据库来实现啊,存储数据的时候吧提交任务放在try里就可以了
#8
同意楼上意见~!
#9
????????????
#10
try
except
end;
except
end;
#11
try
except
end;
#12
完全同意以上几位的意见。
#13
你可以不捕捉异常,自己写程序的时候判断:(不过有点多事一举,因为SQL对主键重复都会异常处理的)
在QUERY1的对应主键的DBEDIT输入框的ONCHANGE事件中输入如下代码:
procedure dbedit1onchange(..........)
begin
if query1.state=dsinsert then
begin
with query2 do //在添加一个QUERY2组件
begin
close;
sql.clear;
sql.add('select * from 表名 where 主键字段=:number')//下面假设你操作的
params.parambyname('number').asstring:=query1.fieldbyname('主键字段名').asstring;//假设主键字段是char型的;
prepare;
open;
end;
if not query2.isempty then //主键重复
begin
showmessage('你输入的主键重复!,');
abort;
end;
end;
end;
在QUERY1的对应主键的DBEDIT输入框的ONCHANGE事件中输入如下代码:
procedure dbedit1onchange(..........)
begin
if query1.state=dsinsert then
begin
with query2 do //在添加一个QUERY2组件
begin
close;
sql.clear;
sql.add('select * from 表名 where 主键字段=:number')//下面假设你操作的
params.parambyname('number').asstring:=query1.fieldbyname('主键字段名').asstring;//假设主键字段是char型的;
prepare;
open;
end;
if not query2.isempty then //主键重复
begin
showmessage('你输入的主键重复!,');
abort;
end;
end;
end;
#14
try
except
end;
except
end;
#15
用Locate语句
或select count(*) into count from table where dh=:sdh
if count>0 then
showmessage('冲突!');
abort;
或select count(*) into count from table where dh=:sdh
if count>0 then
showmessage('冲突!');
abort;
#16
使用自动增减字段。
#1
先对主键进行判断
有重复就退出呀
有重复就退出呀
#2
with tquery do
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
#3
with tquery do
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
begin
sql.clear;
sql.add('select * from Tablename where 主键=:参数名');
parameters.parabyname('参数名').value:=已存在的值;
try
open;
if recordcount<>0 then exit;
否则进行操作
except
end
end;
#4
方法1:可在TQuery事件 ONBeforePost()写查询是否有输入主键列字符串是否重复;
方法2:在保存 Query1.Post 前作判断即可;
方法3:使用异常处理方法;
try
Query1.Post ;
Except
shwomessage('主键重复!');
Query1.cancel ; // 要放弃则使用该句 ;
end;
#5
在TQuery的beforePost事件里做判断:
begin
..... //业务规则
if 不允许保存 then
Abort;
end;
begin
..... //业务规则
if 不允许保存 then
Abort;
end;
#6
运行SQL语句出现错误,程序员如何扑捉该异常呢?很简单,看看下面的函数:
Const
ExecSQLMode = 0 ;
OpenSQLMode = 1 ;
ResultRight = ''SQL query result is right'' ;
...
function RunSql(RunQuery: TQuery; Sqls: TStringList; var ErrorMsg: string;
Mode: integer) : integer ;
begin
ErrorMsg := ResultRight ;
Result := 0 ;
try
RunQuery.DatabaseName := ''RecordDB'' ;
RunQuery.SQL.Clear() ;
RunQuery.SQL.AddStrings(Sqls) ;
if Mode = ExecSQLMode then
RunQuery.ExecSQL()
else
RunQuery.Open() ;
except
on e:exception do
ErrorMsg := e.Message + #13 + #10 +''--- 错误是俺发现的 ---'' ;
end;
end;
朋友看明白了吧,我的函数很简单,将SQL语句代码段作为参数传递给TQuery组件,通过设置查询方式(ExecSQLMode、OpenSQLMode)来处理有结果集返回的数据查询语句(select)或是没有结果集返回的数据操作语言(update、delete、insert、create等)。而异常的扑捉呢,我们扑捉所有异常的老祖宗Exception,因为Delphi的所有异常都是从Exception继承下来的,这样一个简单的SQL语句运行和异常处理函数就完成了,一旦返回的ErrorMsg的值不是ResultRight,ErrorMsg就会返回异常的信息,程序员就可以加以判断以处理不同
Const
ExecSQLMode = 0 ;
OpenSQLMode = 1 ;
ResultRight = ''SQL query result is right'' ;
...
function RunSql(RunQuery: TQuery; Sqls: TStringList; var ErrorMsg: string;
Mode: integer) : integer ;
begin
ErrorMsg := ResultRight ;
Result := 0 ;
try
RunQuery.DatabaseName := ''RecordDB'' ;
RunQuery.SQL.Clear() ;
RunQuery.SQL.AddStrings(Sqls) ;
if Mode = ExecSQLMode then
RunQuery.ExecSQL()
else
RunQuery.Open() ;
except
on e:exception do
ErrorMsg := e.Message + #13 + #10 +''--- 错误是俺发现的 ---'' ;
end;
end;
朋友看明白了吧,我的函数很简单,将SQL语句代码段作为参数传递给TQuery组件,通过设置查询方式(ExecSQLMode、OpenSQLMode)来处理有结果集返回的数据查询语句(select)或是没有结果集返回的数据操作语言(update、delete、insert、create等)。而异常的扑捉呢,我们扑捉所有异常的老祖宗Exception,因为Delphi的所有异常都是从Exception继承下来的,这样一个简单的SQL语句运行和异常处理函数就完成了,一旦返回的ErrorMsg的值不是ResultRight,ErrorMsg就会返回异常的信息,程序员就可以加以判断以处理不同
#7
try
except
end;
具体的主键约束可以用数据库来实现啊,存储数据的时候吧提交任务放在try里就可以了
except
end;
具体的主键约束可以用数据库来实现啊,存储数据的时候吧提交任务放在try里就可以了
#8
同意楼上意见~!
#9
????????????
#10
try
except
end;
except
end;
#11
try
except
end;
#12
完全同意以上几位的意见。
#13
你可以不捕捉异常,自己写程序的时候判断:(不过有点多事一举,因为SQL对主键重复都会异常处理的)
在QUERY1的对应主键的DBEDIT输入框的ONCHANGE事件中输入如下代码:
procedure dbedit1onchange(..........)
begin
if query1.state=dsinsert then
begin
with query2 do //在添加一个QUERY2组件
begin
close;
sql.clear;
sql.add('select * from 表名 where 主键字段=:number')//下面假设你操作的
params.parambyname('number').asstring:=query1.fieldbyname('主键字段名').asstring;//假设主键字段是char型的;
prepare;
open;
end;
if not query2.isempty then //主键重复
begin
showmessage('你输入的主键重复!,');
abort;
end;
end;
end;
在QUERY1的对应主键的DBEDIT输入框的ONCHANGE事件中输入如下代码:
procedure dbedit1onchange(..........)
begin
if query1.state=dsinsert then
begin
with query2 do //在添加一个QUERY2组件
begin
close;
sql.clear;
sql.add('select * from 表名 where 主键字段=:number')//下面假设你操作的
params.parambyname('number').asstring:=query1.fieldbyname('主键字段名').asstring;//假设主键字段是char型的;
prepare;
open;
end;
if not query2.isempty then //主键重复
begin
showmessage('你输入的主键重复!,');
abort;
end;
end;
end;
#14
try
except
end;
except
end;
#15
用Locate语句
或select count(*) into count from table where dh=:sdh
if count>0 then
showmessage('冲突!');
abort;
或select count(*) into count from table where dh=:sdh
if count>0 then
showmessage('冲突!');
abort;
#16
使用自动增减字段。