最近在编写代码时遇到一个编译错误:Constant object cannot be passed as var parameter,但是IDE环境自动定位光标的时候不够准确,总是定位到后面一个参数的位置上,所以来来回回看了好几遍都解决不了问题。最后才发现原来是前面将TADOQuery类型的属性作为可变参数传递给了可变参数,因此才造成了编译错误。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB, DB;
type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
FADOCon: TADOConnection;
FADOQuery: TADOQuery;
FMsg: string;
public
{ Public declarations }
property ADOCon: TADOConnection read FADOCon write FADOCon;
property ADOQuery: TADOQuery read FADOQuery write FADOQuery;
property Msg: string read FMsg write FMsg;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ExecADOQuery(ADOConnection: TADOConnection; sSQL: String;
var ADOQuery: TADOQuery; var sErrorMsg: String; bQuery: Boolean = True): Boolean;
begin
Result := False;
try
ADOQuery.Close;
ADOQuery.Connection := ADOConnection;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(sSQL);
if bQuery then
ADOQuery.Open
else
ADOQuery.ExecSQL;
Result := True;
except
on e: Exception do
begin
sErrorMsg := '执行数据库操作出错。';
end;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
sSQL: string;
begin
ExecADOQuery(ADOCon, sSQL, FADOQuery, FMsg); //编译通过
ExecADOQuery(ADOCon, sSQL, ADOQuery, FMsg); //编译错误
ExecADOQuery(ADOCon, sSQL, FADOQuery, Msg); //编译错误
end;
end.