注册 登录
编程论坛 Delphi论坛

第一行‘:’附近有语法错误。

wss841103 发布于 2011-07-06 21:34, 2577 次点击
function Tfrmlogin.VerifyAccount: Boolean;
var
  str:string;
begin
  Result:= False;
  with ADOQuery1 do
  begin

            close;
            sql.Clear;
            str:='select * from userinfo where (username=:a and userpassword=:b and usertype=:c)';
            sql.Add(str);
            adoquery1.Parameters.ParseSQL(ADOQuery1 .SQL.Text, true);
            Parameters.ParamByName('a').Value:=Trim(RzEdit1.Text);
            
            Parameters.ParamByName('b').Value:=Trim(RzEdit2.Text);

            Parameters.ParamByName('c').Value:=Trim(RzComboBox1.Text);

            open;
            first;
           end;

  if ADOQuery1.RecordCount > 0 then ModalResult := mrOk;


  Result := ModalResult = mrOk;
end;

运行提示:第一行‘:’附近有语法错误。到底在哪里呀,大家帮忙给看看
8 回复
#2
yuutian2011-07-07 10:16
编译通过,没错误:
function tform1.VerifyAccount: Boolean;
var
  str:string;
begin
  Result:= False;
  with ADOQuery1 do
  begin
            close;
            sql.Clear;
            str:='select * from userinfo where (username=:a and userpassword=:b and usertype=:c)';
            sql.Add(str);
            adoquery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);
            Parameters.ParamByName('a').Value:=Trim(Edit1.Text);
            Parameters.ParamByName('b').Value:=Trim(Edit2.Text);
            Parameters.ParamByName('c').Value:=Trim(ComboBox1.Text);
            open;
            first;
           end;
  if ADOQuery1.RecordCount > 0 then ModalResult := mrOk;
  Result:= ModalResult = mrOk;
end;

end.
#3
yeye552011-07-07 12:18
在Tfrmlogin中的函数声明是否正确?
#4
wss8411032011-07-07 21:39
回复 2楼 yuutian
编译时没有问题,运行时有问题的,单步运行到open时就有问题。
代码本来是这样的
function Tfrmlogin.VerifyAccount: Boolean;
var
  str:string;
begin
  Result:= False;
  with ADOQuery1 do
  begin

            close;
            sql.Clear;
            str:='select * from userinfo where (username=:a and userpassword=:b and usertype=:c)';
            sql.Add(str);
            Parameters.ParamByName('a').Value:=Trim(RzEdit1.Text);
            Parameters.ParamByName('b').Value:=Trim(RzEdit2.Text);
            Parameters.ParamByName('c').Value:=Trim(RzComboBox1.Text);
            open;
            first;
           end;
  if ADOQuery1.RecordCount > 0 then ModalResult := mrOk;
  Result := ModalResult = mrOk;
end;
 运行错误提示为:‘adoquery1:parameter 'a' not found’
后来查资料料说是因为参数读到的是中文,就加上了adoquery1.Parameters.ParseSQL(ADOQuery1 .SQL.Text, true);
问题就变成上面那个了,麻烦给指点一下
#5
wss8411032011-07-07 21:40
回复 3楼 yeye55
这样声明function VerifyAccount: Boolean; 对吗?
#6
yeye552011-07-08 13:15
这样声明没有错。
#7
yuutian2011-07-10 13:37
可以不要加adoquery1.Parameters.ParseSQL(ADOQuery1 .SQL.Text, true);
参数a ,b ,c 改成相应的类型,你试下看看。
   如:a 是字符串型的,Parameters.ParamByName('a').asstring:=Trim(RzEdit1.Text);
       b 是整形的话   Parameters.ParamByName('b').asinteger:=strtoint(Trim(RzEdit1.Text));
#8
yuutian2011-07-10 13:42
str:='select * from userinfo where ((username=:a) and (userpassword=:b) and (usertype=:c))';
  这个语句,是否还要加三个括号呢
#9
wss8411032011-07-10 19:07
回复 8楼 yuutian
真是非常感谢您这么热心,可是还是不行的,我试试别的方法吧!
1