try.....except的小问题(50分)

  • 主题发起人 主题发起人 Bruce Yu
  • 开始时间 开始时间
B

Bruce Yu

Unregistered / Unconfirmed
GUEST, unregistred user!
当我在操作数据库的时候,比如往数据库的一个表中插入记录时,
[red]try
execsql;
except
....
end;[/[/red]b]由于该表给我设置了唯一性约束,所以当我插入相同的记录时,就会报错。
现在的情况是我想不管报错的情形,直接执行end后的语句。
我用的是ORACLE 7。0数据库,采用2层架构。请各位大富翁指点小弟一下。在下不胜感激。
 
try
try
execsql;
except
end;

finally
your code;
end;
 
楼上的谢谢。我是从一个数据库的表中选取记录,然后插入到另一个数据库的表中,用
的是while not eof do
....
try ...
excesql;
except ...
end;
next;
继续下一条记录的插入,该如何用上面的方法阿?
 
用一个表更新另一个表用insert语句不就可以了吗?还用DbaseIII的一套。
 
[8D]当然要写INSERT语句了。
while not eof do //记录不为0,执行插入
sql.add('insert(....)');
try
excesql; //执行
except
showmessage('该记录已经存在');//我在表中定义了几个字段的唯一性约束
end; [green]//报错信息如下
//unique constraint (SFC_USER.EXE_ERPINVOICEDETAIL_PK)
//violated'[/green]
next;
 
照我的理解,按你上面的语句,在delphi的集成环境中运行会报错,但是在操作系统下直接
运行应用程序,应该只会显示你所写的message。
不要用sql.add,这样在第二条数据时sql.text就乱了,用sql.text := 的方式。
 
try
begin
while not eof do //记录不为0,执行插入
sql.add('insert(....)');
try
excesql; //执行
except
showmessage('该记录已经存在');//我在表中定义了几个字段的唯一性约束
end; [green]//报错信息如下
//unique constraint (SFC_USER.EXE_ERPINVOICEDETAIL_PK)
//violated'[/green]
next;
end;
finally
your code;
end;
在IDE环境中可能会报错,脱离delphi就不会报错了。
 
十分感谢回答。
我用sql.add之前我已经用了
代码:
with query1.do
   close;
   sql.clear;
   sql.add(...);
   ....
所以sql.add应该没有什么问题。
的确在运行环境下面不会报key violated的错误。
我想知道DELPHI错误机制和oracle错误机制是如何处理这种情形的。
 
delphi的错误机制触发和你的设计期和运行期有关的。
 
十分感谢各位大富翁们。我刚刚学习进行数据库应用系统的编写。
我想问,那么ORACLE 数据库对这种类型错误如何处理?会影响到程序显示的结果吗?
问题:
try
except
end

try
finally
end
到底有什么区别?两个用在什么样的环境下?
还有IDE环境和系统运行环境有什么区别?在哪里可以了解的到?

 
//这样应该满足你的要求:
while not eof do //记录不为0,执行插入
sql.add('insert(....)');
try
try
excesql; //执行
except
end;
finally
next;
end;
end;
 
try
code1
except
code2
end
上面语句,如果code1有错误则执行code2,否则不执行code2
try
code1
finally
code2
end
上面语句,不管code1执行如何,必然执行code2
---------------
两者有一个共同点:处理了异常。如果没有上面代码来处理异常,那么异常出现时将使用
默认的处理——这个处理将终止当前过程,回到该过程的调用处。
 
谢谢帮助,问题已经解决了。
 
后退
顶部