【发布时间】:2014-02-04 00:43:35
【问题描述】:
当多次调用此代码时(在更改组合框时调用),我在第二次更改和第三次更改时收到错误“对象打开时不允许操作” “无效的指针操作”。
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;
而 refreshlist 只是更新数据库中数据的可视化列表。
我查看了一些类似的 stackoverflow 问题,但我无法看到答案如何帮助解决我的问题。
附带问题,何时使用 .Destroy 或 .Free? .Free 在这种情况下只会给出不同的错误。
谢谢。
【问题讨论】:
-
你为什么要给
create打两次电话? -
无论如何,使用
FreeAndNil- 既不要将destroy也不要free设置为nil。 -
这不是你创建对象的方式吗? NVM:我是个白痴,谢谢!
-
任何时候你在同一个表达式中看到两个点,这表明你的设计很弱。您不应该分配给 LoadFile.Database。 LoadFile 类中的一个方法应该分配给数据库。看起来数据库是读/写的。第 1 步是使其只读,甚至是私有的。更广泛地说,您的模型似乎与您的 GUI 混合在一起。真是一团糟。