在Delphi6中,用BDE,如何在一个SQL语句执行之前检测该语句是否正确?(50分)

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi6中,用BDE,如何在一个SQL语句执行之前检测该语句是否正确?
我不要求返回语句的执行结果,但是如果有错,要求返回其错误码。我该怎么办?
我是Delphi新手,请尽量说具体一点,先谢谢了。
 
try
Query1.ExecSQL;
except
on E:Exception do
showmessage("Error Messsage is "+E.Message);
end;
 
还有你可以 先在ACCESS或SQL SERVER中进行测试啊
测试SQL语句能通过,能得到你要的结果,再把他放到程序中去,不是很好吗?
 
在程序中捕捉sql语句执行时出现的异常就行了。
try
...
except
...
 
想捕捉并显示消息就按jgy_1980所说的做就可以
测试SQL语句是否正确,可直接用DELPHI自带的SQL Explorer工具就可以,如果你是采用BDE形式在SQL Explorer中可以看到你所设的数据库别名
 
我没说清楚。
SQL语句是由用户操作,程序自动生成的,在用户执行前,我想判断一下,用户操作得到的SQL
是否正确,如果正确,就执行,不正确就返回。
我用jgy_1980的方法试了一下,select a from table, table库中有,而a不存在,
返回的错误是:Table does not exists. 我认为应该返回Field does not exists.
 
供你参考
function TfmDefineFormula.TestSQL(SQLString: string): Boolean;
begin
//*************************** 测试SQL语法是否正确 ***********************//
try //
ExecSql(QryTest,SQLString + ' and 1=2' );
Result := True;
Except
on E : Exception do
begin
if Pos('Type',E.Message)<>0 then
MgBox('类型不匹配,请检查表达式!','系统提示','0','1')
else if pos('field',E.Message) <> 0 then
MgBox('非法字段名!','系统提示','0','1')
else if pos('keyword',E.Message) <> 0 then
MgBox('缺少操作符!','系统提示','0','1')
else
MgBox('表达式有错误,请检查表达式!','系统提示','0','1');
Exit;
end;
end;
//*************************** 测试完毕 ***********************//
end;
 
{生成SQL语句}
....
ShowMessage(Query1.SQL.Text)
Query1.Open;

 
一、用Query1.ExecSQL去判断的话,其实已经是执行后了,回答于问题不符!
二、我认为这个除了自己去理解SQL标准、写处理程序外,应该没有什么其它办法,因为BDE是对ODBC封装,而即使是ODBC,也不对SQL语句的正确性进行判断,它只是将SQL翻译后交给DBEngine,DBEngine才是真正判断其正确性的地方,所以……
 
只能这样了?没有办法了吗?
 
应该就只能这样了,举个例子:
select field1,field2 from table1
如果field2在table1中不存在,那么递交给DBEngine后肯定出错,应该属于是“不正确的SQL语句”之列,但是这条SQL语句从语法上来说,是完全没有错的,那么你到底该怎么判断它呢?不能,只有交给DBEngine判断了,根据DBEngine返回的消息来判断,那么,只能是DBEngine执行后的结果了,除非是你自己做的DBEngine!
 
既然这样,接受答案发分。
 
多人接受答案了。
 
顶部