Delphi使用ADO无效指针操作

时间:2014-02-04 00:43:36

标签: delphi ado

当多次调用此代码时(在组合框的更改时调用它),我在第二次更改时收到错误“对象打开时不允许操作”,并且在第三次更改时我得到错误“无效的指针操作”。

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?在这种情况下,只是给出了不同的错误。

感谢。

1 个答案:

答案 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,因为它首先检查未分配的指针,然后如果可以安全地调用DestroyTObject.Free基本上就是这段代码:

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;