Tquery的Param替代问题(50分)

  • 主题发起人 主题发起人 assassin
  • 开始时间 开始时间
A

assassin

Unregistered / Unconfirmed
GUEST, unregistred user!
我有这样一个Query:

CREATE TABLE :TableName
(
SERIAL INTEGER NOT NULL,
CHAPTER SMALLINT,
SECTION SMALLINT,
EXTYPE SMALLINT,
DIFFICULTY SMALLINT,
EXTIME FLOAT,
TIMES INTEGER,
LASTTIME DATE,
QUESTION BLOB SUB_TYPE 0 SEGMENT SIZE 512,
ANSWER BLOB SUB_TYPE TEXT SEGMENT SIZE 16,

PRIMARY KEY (SERIAL)
)

我是这样使用TQuery:Query_all的:

//先设定Query_all.sql为上面的SQL语句

Query_all.ParamByName('TableName').asstring:=tablename;
Query_all.ExecSQL; //这个时候出现了错误

//报告SQl语句有误:说是第一行第18个字符 ? 无法识别
//我用SQL Monitor跟踪,形成的SQL居然是:

SQL Execute: INTERSOLV InterBase ODBC Driver - CREATE TABLE ?
(
SERIAL INTEGER NOT NULL,
...
...
//真搞不懂这个 ? 那里来的!
//是系统的BUG吗?
 
tablename 不能让你在sql里用
你在delphi的帮助里输入:talbename 就可以看到了
是delphi本身用的
Indicates the name of the database table that this component encapsulates.
 
老兄,为何要用PARAM呢,行不通的。
Q1.sql.add('CREATE TABLE '+tablename);
q1,sql.add('(
SERIAL INTEGER NOT NULL,
CHAPTER SMALLINT,
SECTION SMALLINT,
EXTYPE SMALLINT,
DIFFICULTY SMALLINT,
EXTIME FLOAT,
TIMES INTEGER,
LASTTIME DATE,
QUESTION BLOB SUB_TYPE 0 SEGMENT SIZE 512,
ANSWER BLOB SUB_TYPE TEXT SEGMENT SIZE 16,

PRIMARY KEY (SERIAL)
)');


 
看看这里
http://go18.163.com/~xuguohua/skill/59.htm
 
RE:
千中元的解释不正确,我换成 TBName 还是一样!

RE:
TSQFZY,能否讲的清楚些?这是TQUERY的缺陷吗?
我要将SQL写在一个文本文件中,所以很需要用PARAM
 
较好的解决方法:

用字符串函数StringReplace将PARAM替代为想要的值即可!
 
使用存储过程

create or replace procedure mycreatetable(in tablename varchar2(8))
as
begin
...
使用动态sql

end;
 
assassin: 你的方法不是不错吗?这个问题很久前讨论过,也收录在DELPHI RICH 2000书中。
我可以还你分……
 
DELPHI RICH 2000?不好意思,我太孤陋寡闻了....
我到大富翁也没几天....
多谢各位的提醒,一人十分吧!
 
多人接受答案了。
 
后退
顶部