我用了这个函数之后就总是报‘数据已在集合中,无法添加...’谁帮我看看? (20分)

  • 主题发起人 主题发起人 del530
  • 开始时间 开始时间
D

del530

Unregistered / Unconfirmed
GUEST, unregistred user!
这是DFW一个朋友写的检测SQL表是否存在的函数!
function TDM.MyTableExists(ATableName: String): Boolean; //判断给定表是否存在
var
SL: TStrings;
I: Integer;
S: String;
begin
Result := False;
S := UpperCase(ATableName);
SL := TStringList.Create;
try
DM.ADOConnection.GetTableNames(SL, False); //取得表名
for I := 0 to (SL.Count - 1) do
begin
if UpperCase(SL)= S then
begin
Result := True;
Break;
end;{if}
end;{for}
finally
SL.Free;
end;{try}
end;

调用:
if MyTableExists('ATableName') then ShowMessage('已存在');

---------------------------------
我使用此函数,检测某个表是否存在,然后打开此表,没有就建立此表。第一次没问题,
可是用连续运行第二次时就报:数据已在集合中,无法添加等信息。。但如果将应用程序
关闭,再打开又可运行第一次,再点也是同样的错误。

但我如果只是纯检测表是否存在,则没有问题。
例:
if existsTAble('temptab') then
showmessage('is ok')
else
showmessage('is error');
则是正常的。
如果我不使用existsTable而直接使用打开表则也没问题。

何解?



 
太复杂,直截取SL.Indexof['ATableName']>=0即可确定
 
同意楼上的
 
上面的代码应该没问题,你跟踪一下,看错误是什么地方报出来的
 
to:del530
我测试了你的函数,运行若干次,均没有问题。你能把你的调用代码贴出来吗?
以下是我测试的代码。
var
i:Integer;
begin
if MyTableExists(Edit1.Text) then
begin
AdoDataSet1.Close;
AdoDataSet1.CommandText:='select * From '+Edit1.Text;
AdoDataSet1.Open;
end
else
begin
ADOConnection1.Execute('Create Table '+Edit1.Text+'(iid int)',i,[eoExecuteNoRecords]);
showmessage('Create Table!');
end;
end;
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
705
import
I
后退
顶部