Delphi ADO连接Oracel之怪情况(三)

连接数据库,免不了要写很多的SQL指令给Database Server去执行,但是Delpi有个很不爽的地方在于:大多数sql语句使用单引号作为字符串的标识,但是Delpi也是用单引号作为字符串的标识(其他语言有些支持双引号,或者单引号和双引号同时支持)。于是问题就出来了。所以程序员就想了很多的办法,大概有以下几种:

  1. 用两个单引号来表示。例如 ADOQUery1.SQL.Text := 'select field1 from table1 where field2=''abc''';
  2. 直接用单引号的ASCII码。例如ADOQUery1.SQL.Text := 'select field1 from table1 where field2=' +#39 + 'abc' + #39;
  3. 使用QuotedStr函数。例如:ADOQUery1.SQL.Text := 'select field1 from table1 where field2='+QuotedStr('abc');
以上方法都可以实现,但是有个共同的毛病:就是程序在Debug的时候比较麻烦,同时,代码的可读性很差。通常情况下,程序员在写代码的时候,遇到要在程序中写入sql语句的时候,一般的步骤是这样的:
  1. 在DB Server的查询工具中先检查语句是否正确
  2. Copy到程序代码中
  3. 程序的一旦出错,会检查查询语句是否有问题,也就是debug的时候。
以上三种方法,在debug的时候,如果把sql语句直接复制到查询窗口中,需要加工后,才可以执行,无形中,就增加了时间(单步执行的时候会好一些)
基于以上考虑,可以把语句写成为下面的格式:
ADOQUery1.SQL.Text := ConvertSQL('select field1 from table1 where field2=“abc”),也就是直接在代码中把单引号改为双引号,这样就解决了上面的问题了。复制下来替换双引号为单引号就可以直接执行了。
ConvertSQL函数代码如下:
function ConvertSQL(strSQL: String): String;
begin
  Result := AnsiReplaceStr(strSQL,'"',#39);
end;

因为AnsiReplaceStr函数在StrUtils单元,记得要uses这个单元哟!

你可能感兴趣的:(SQL,Server,Delphi,Oracel)