当多次调用此代码时(在组合框的更改时调用它),我在第二次更改时收到错误“对象打开时不允许操作”,并且在第三次更改时我得到错误“无效的指针操作”。
if loadfile.Database <> nil then
loadfile.Database.destroy;
Loadfile.Database := Tdatabase.create(CardSets.Text, false);
LoadFile.Database.create(CardSets.Text, false);
refreshlist;
创建代码只是
DataSource :=
'Provider=Microsoft.Jet.OLEDB.4.0' +
';Data Source=' + Path +
';Jet OLEDB:Engine Type=5';
with MainWindow do
begin
ADOConnection.ConnectionString := Datasource;
ADOConnection.LoginPrompt := False;
end;
刷新列表只是更新数据库中数据的可视列表。
我看过一些类似的stackoverflow问题,但我无法看到答案如何帮助解决我的问题。
附带问题,何时使用.Destroy或.Free?在这种情况下,只是给出了不同的错误。
感谢。
答案 0 :(得分:2)
首先,您要拨打Create
两次;第二个是不必要的:
if loadfile.Database <> nil then
loadfile.Database.destroy;
Loadfile.Database := Tdatabase.create(CardSets.Text, false); // First call
LoadFile.Database.create(CardSets.Text, false); // Second call
将您的代码更改为:
LoadFile.Database.Free;
LoadFile.Database := TDatabase.Create(CardSets.Text, False);
其次,永远不要直接致电Destroy
。请改为使用Free
,因为它首先检查未分配的指针,然后如果可以安全地调用Destroy
。 TObject.Free
基本上就是这段代码:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;