老是有朋友在开发一些开放的数据库接口(比如Delphi的SQL Explorer工具)时发愁,既然是开放的,当然需要允许用户使用SQL语句访问数据库,这些还好办,一旦用户的运行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就会返回异常的信息,程序员就可以加以判断以处理不同的情况。
|