procedure TForm5.onselect(Sender: TObject);
begin
if adoquery3.active then adoquery3.active :=true;
with adoquery3 do
begin
adoquery3.close;
adoquery3.sql.Clear;
adoquery3.Sql.Add('select *from :value');
ADOQUERY3.Parameters.ParamByName('value').Value:=combobox8.Text;
ADOQUERY3.ExecSQL;
ADOquery3.Prepared;
end;
我的SQL语句错了么 为什么执行的时候会提示 必须声明变量@P1??

解决方案 »

  1.   

    SQL语句*号必须有空格,再说你是更换表明,个人认为不要用参数。再就是你是查询就不要用ExecSQL。更改如下:
    procedure TForm5.onselect(Sender: TObject);
    begin
    //if not adoquery3.active then adoquery3.active :=true; 如没打开才要打开吧。从你这段程
    //序看这句是多余的。
    with adoquery3 do
    begin
    close;
    sql.Clear;
    Sql.Add(Format('select * from %s',[ComboBox8.Text]));
    Open;
    end;
      

  2.   

    ADOQuery3没有,打开代码应改成
    .
    .
    with adoquery3 do
    begin
    adoquery3.close;
    adoquery3.sql.Clear;
    adoquery3.Sql.Add('select *from :value');
    ADOQuery3.open;
    ADOQUERY3.Parameters.ParamByName('value').Value:=combobox8.Text;
    ADOQUERY3.ExecSQL;
    ADOquery3.Prepared
      

  3.   

    procedure TForm5.onselect(Sender: TObject);
    begin
    with adoquery3 do
    begin
      close;
      sql.Clear;
      Sql.Add('select * from value := value');
      Parameters.ParamByName('value').Value := trim(combobox8.Text);
      open;
    end;就这么样简单 ,没问题了吧,结贴,接分。哈哈
      

  4.   

    不好意思 前两天有点事被耽搁了,谢谢各位 用orcler的方法能解决了, 各位兄弟给的代码页分别试过了,错误还是存在。。结贴啦。