在formshow事件中想对adoquery1.sql.add进行'select * from 表名'的操作,由于表名是变量t,我是通过这样实现的
a:='select * from'+ t;//t为一赋值变量
adoquery1.sql.close;
adoquery1.sql.clear;
adoquery1.sql.add(a);
adoquery1.sql.open;
可是这样有错误,应该怎么操作呢,其实就是动态给adoquery连接表。

解决方案 »

  1.   

    var t:string;
    t:=表名;
    a:='select * from'+ quotedstr(t);//t为一赋值变量
      

  2.   

    with adoquery1 do
      begin
    close;
    sql.clear;
    sql.add('select * from '''+InfoTable+''' [order by  FieldsName ]');
    prepared;
    open;end;
      

  3.   

    我觉得你这样写是没错拉,你看看是不是因为from后面没加个空格导致from和你的表名连到一起了~
      

  4.   

    adoquery1.sql.open;?
    adoquery1.open;!
      

  5.   

    a:='select * from'+ t;//t为一赋值变量
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add(a);
    adoquery1.open;
      

  6.   

    var
      s: String;
      sql: String;
    begin
      s := 'LX1';
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM '+s);
      ADOQuery1.Open;
    end;
    我执行过了,没有错误的。
      

  7.   

    to  fivehun(菜鸟):谢谢,已经解决。奇怪的是如果直接ADOQuery1.SQL.Add('SELECT * FROM '+s)不是就成了ADOQuery1.SQL.Add(SELECT * FROM lxl )了么?
      

  8.   

    还是有问题啊,我的系统有个登陆界面,form name :login,主界面 form name:main,代码是再main的onshow中写的,就是根据登陆名来连接不同的数据表,登陆名是全局变量t,在用如下代码后:出现了如果在登陆界面输入密码登陆成功后,能正确的连接相应的数据表;可是一旦点取消就会出现“第一行:'from'附近有语法错误”的提示,这是怎么回事啊??
    procedure TForm1.FormShow(Sender: TObject);
    var
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM '+t);
      ADOQuery1.Open;
    end;
      

  9.   

    试试加'':
    procedure TForm1.FormShow(Sender: TObject);
    var
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM '''+t);
      ADOQuery1.Open;
    end;
      

  10.   

    a:='select * from'+ t;//t为一赋值变量
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add(a);
    adoquery1.sql.open;
      

  11.   

    select * From 后面加一个空格。
      

  12.   

    利用字符串生成的sQL语句,一般要注意空格
    比如:'select * from'+t 和'select * from '+t
    编译后分别为'select * fromt'和'select * from t'
      

  13.   

    1。点取消,可能t就为空值了,这样sql语句就成了“Select * from”了,而没有表名了。
    2。下次出现错误,要把错误信息贴出来,这样才便于大家来判断。
      

  14.   

    用一个DBEdit连接数据库表名吧!,然后用 t:=DBEdit.Text; 付值过去不就得了!顺便请教一下用:数据库控件(比如用ADO)怎么直接连接SQL的视图?或要下载第三方控件吗?哪里有(网站名)?谢谢了!
      

  15.   

    to  gg961681:有道理,怎么解决呢?
    我是在主界面main的onCreate事件中初始化登陆界面login的:
    procedure TForm1.FormCreate(Sender: TObject);
    var
    load:Tload;
    begin
    load:=Tload.Create(self);//建立登录窗口
    load.ShowModal; //显示登录窗口
    end;
    而t是在main的ONshow中赋值的:
    procedure TForm1.FormShow(Sender: TObject);
    var
      t:=xlz;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM '+t);
      ADOQuery1.Open;
    end;
    login界面中取消按钮的代码是:
    Application.Terminate;
    问题怎么解决呢?
      

  16.   

    在主界面main的onCreate事件中初始化登陆界面login的:
    procedure TForm1.FormCreate(Sender: TObject);
    var
      mr:=integer;
    begin
      t:='';
      with Tload.Create(self) do )   //建立登录窗口
      try 
        mr:=ShowModal;//显示登录窗口
      finally
        Release;
      end;
      if mr=MrOK then 
        t:=表名;
      else  Application.Terminate;
    end;login界面中取消按钮的代码是:
      ModalResult:=MrCancel;
    问题怎么解决呢?
      

  17.   

    写一个过程不就行了!这样话显得很灵活,何乐不为呢?
    procedure select(Fieldname:array of string;tablename:string);
    var s:string;
    begin
      s:='select'+Fieldname+'from '+ tablename;
      ADOQuery1.close;
      ADOQuery1.sql.clear;
      ADOQuery1.sql.add(s);
      ADOQuery1.open;
    end;
    当你调用进你就当按上面的参数对照套进行去就可了!
      

  18.   

    楼主的意思是还没有加载完就点取消,才出现这样的错误.
    我想应该加入到try...except...end里面吧
      

  19.   

    我给你个建议,你要动态连接表就用format函数
    s:="select * from %s"
    要用到具体表的时候就这样
    ADOQuery1.close;
      ADOQuery1.sql.clear;
      ADOQuery1.sql.add(format[s,表名]);
      ADOQuery1.open;
    你查一查delphi中format的使用方法应该可以解决你的问题!
      

  20.   

    最简单的方法就是在ADOQuery1.SQL.Add('SELECT * FROM '+t);
    之前加个判断了。
    if Trim(t) = '' then Exit;
      

  21.   

    procedure TForm1.FormShow(Sender: TObject);
    var
      ShowMessage(XLZ);   --估计是XLZ的值或者类型本来就有问题
      t:=xlz;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM '+t);
      ShowMessage(ADOQuery1.Sql.Text);
      ADOQuery1.Open;
    end;
      

  22.   

    procedure TForm1.FormShow(Sender: TObject);
    var
      t:string;
    begin
      t:=DBEdit.Text; 
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM '+''''+t+'''');
      ADOQuery1.Open;
    end;
      

  23.   

    SQL 里面的视图直接当成表来用,不用第三方控件的