求助:复制表结构时显示错误信息(10分)

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

xuehua_ljy

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现以下功能,下面代码可能会被多次执行,并且临时表中的字段内容也可能每次执行都不太相同,随Q_Res中的内容发生变化,执行程序时第一次调用成功,第二次在运行却显示Table is open错误,这是为什么?
//将临时表所占空间释放
TempTable:=nil;
//创建临时表TempTable
TempTable:=TTable.Create(self);
with TempTable do
begin
DataBaseName:=F_dl.Database1.DatabaseName;
TableName:='temp';
FieldDefs.Assign(Q_Res.FieldDefs);
CreateTable;
end;
----------------------------------------------
 
第一次使用Table已经打开,但没有关闭.第二次在运行显示Table is open,正确.
问题在 CreateTable;
 
请问如何修改?
试着在前面加上了TempTable.close;
但是还是有问题
 
正如chaofan201所说
问题在CreateTable
一个已经建立了的表不能再次建立,除非用Free将它先释放,CLOSE只是关闭,多次执行放在过程里面

function tempCreate(aDataBasename:string;aDefs:TFieldDefs):TTable;
begin
//创建临时表TempTable
Result:=TTable.Create(self);
with Result do
begin
DataBaseName:=aDataBaseName;
TableName:='temp';
FieldDefs.Assign(aDefs);
CreateTable;
end;
end;

使用时只要
var
TempTable:TTable;
begin
TempTable:=tempCreate(F_dl.Database1.DatabaseName,Q_Res.FieldDefs);
...
end;
临时表要在使用前定义,
用这个过程在需要的时后定义成一个需要的结构,
不知你是不是这个意思
----------------------------------------------
 
我的意思就是TempTable这个表可能要多次建立并且多次释放,我试了一下在前面加上
TempTable.free
程序仍然有错误
 
简单呀,你可以用暂存表格呀.每次使用之前把里面的内容删了就可以了嘛,何必那么麻烦
 
可是我每次要建立的临时表的字段都不相同,所以只是删除内容是不可以的
我觉得还是得先释放,然后重新建表
 
TempTable:=TTable.Create(self);
try
//
finally
TempTable.Free;
无论怎么样最后都要释放TempTable
 
接受答案了.
 
后退
顶部