怎样将TABLE名作为一个变量应用于SQL语句中(100分)

  • 主题发起人 主题发起人 xinyt
  • 开始时间 开始时间
X

xinyt

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样将TABLE名作为一个变量应用于SQL语句中,例如:
1、with query1do

begin
sql.clear;
sql.add(select * from vartable);
open;
end;
其中vartable是一个string变量。
2、已知vartable,怎样取得相对应表的所有字段
通常是这样:vartable.Fields
但vartable是一个string.
请赐教,多谢
 
1.
var
vartable : String;
....
sql.add('select * from ' + ''' + vartable + ''')
 
做法如下:
1、
var
vartable:string;
......
with query1do

begin
sql.clear;
sql.add('select * from'+ vartable);
open;
end;
其中vartable是一个string变量。
2、
已知vartable,要取得相对应表的所有字段
通常是这样:query1.Fields
因为vartable只是一个表名,而sql语句返回的数据集是query1而不是vartable。

 
2. vartable到底是SQL的表(table)还是Delphi的表控件(TTable)?
如果是SQL的表, 那么可以用个query做一个所有字段的select, 然后读fielddefs
如果是TTable控件, 基本上是没有办法的, 但反过来说, 应该有个TTable类型的变量
来和控件对应的, 只要做一个vartable名字和ttable对应结构就可以了.
比如:
const MAX_TABLE=1024;
type
TTableNameItem=record
tableControl:ttable;
tablename:string;
end;

var TableNameList:array [0..MAX_TABLE-1] of ttablenameitem;
然后用while循环来比较:
i:=0;
while (tablenamelist.tablename<>vartable) and (i<MAX_TABLE)do
inc(i);
if i<MAX_TABLE then
begin
showmessage(tablenamelist.tablecontrol.fielddefs.items[0].displayname);
end;

还有一种办法, 就是在form上找TTable控件, 然后判断tablename属性
 
第1个问题 ,我同意defox的意见;
2:用一个Query;
with query1do

begin
sql.clear;
sql.add('select * from "'+ vartable+'"');
open;
end;
而后用Query1.Fields.value即可取得所有字段的值
 
分数少了点,不好意思,多谢各位。
不过steve的最准确,而defox的多了单引号。
 
多人接受答案了。
 
后退
顶部