rt
thx
thx
解决方案 »
- 怎么在窗体上动态显示图片?
- SQL中参数问题:如果值为汉字则无结果,英文字则正常
- 紧急求救一sql语句。
- 钩子和服务应用程序问题
- 在线程里怎样增加事件?急!
- BDE exception edbehgineerror in module bdeadmin.exe at 00054F92.could not fined
- 关于下拉列表框的问题——菜鸟级
- DBGrid是否有这样的属性?
- 。。激活报表的Preview窗口?
- 如何用DELPHI编写的程序运行时用CTRL+ALT+DEL发现不了?
- 字段名称和类型放在类似数组的地方,一个简单的方法马上就可以得到它的类型
- 想写一个即时通讯的小软件用Tcp还是Udp?
dm.aqadd1.close;
dm.aqadd1.SQL.clear;
dm.aqadd1.SQL.add(' insert into bmcl values(:a,:b) ');
dm.aqadd1.Parameters.ParamByName('a').Value:=Trim(edtscxid.Text);
dm.aqadd1.Parameters.ParamByName('b').Value:=Trim(edtscxname.Text);dm.aqadd1.ExecSQL;
except
on e: exception do
begin
Application.ShowException(e);//显示是什么具体的错误,比如关键字重复等等
exit;
end;
end;用try except ,可以显示是什么具体的错误,比如关键字重复等等
begin
with adoquery2 do
begin
close;
sql.Clear;
sql.Add('select * from xm where csbm='''+code+''' and xmbm='''+sp+'''') ;
open;
end;
if adoquery2.RecordCount <= 0 then
begin
adoquery1.Append;
adoquery1.Fields[0].Asinteger:=pri;
adoquery1.Fields[1].AsString:= code;
adoquery1.Fields[2].AsString:= sp;
adoquery1.Fields[3].AsString:=ExcelID.Cells[k+1,2].Value;
adoquery1.Post;
pri:=pri+1;
end;
end;
可以用专门的机制来捕获
不同数据库不一样
譬如主键错误在SQLSERVER中是2601在ACCESS中是-105121349,具体察看数据库相关说明譬如ACCESS
var
I: Integer;
begin
for I:=0 to MainData.adcConn.Errors.Count-1 do
begin
case MainData.adcConn.Errors.Item[I].NativeError of
-105121349:
begin
Application.MessageBox(CODE Must be one and only!',PChar(Application.Title),MB_OK+MB_ICONWARNING);
Action:=daAbort;
end;
end;
end;如果是SQLSEEVER那么把-105121349改为2601即可
用try except不是很好
可以用专门的机制来捕获 -------------------------------------------为什么?
Try
if state in [dsEdit,dsInsert] then Post;
Except
On E:Exception do Begin
if e is EAbort....... //处理错误类型,具体什么类型忘了。
ShowMessage('嘿嘿,出错了!'+#13+E.message);
End;
End;
用try except不是很好
可以用专门的机制来捕获 -------------------------------------------为什么?
因为这种错误本质上是数据库的,应用程序从数据库引擎(ADO、ODBC、BDE等)捕获的,所以通过try except不仅不好,而且很多情况下人工根本就捕获不到。