2009-08-06 6 views
9

Ich schreibe eine Delphi 7-Anwendung, die gleichzeitig aus vielen verschiedenen Threads auf dieselbe SQL Server-Datenbank zugreifen muss.Ist TADOConnection von Delphi Thread-sicher?

Kann ich eine einzelne gemeinsame TADOConnection verwenden, oder muss jeder Thread eigene erstellen?

Antwort

18

Blorgbeard, Sie müssen eine separate TAdoconnection-Instanz für jeden Ihrer Threads erstellen, initialisieren und öffnen.

ADO ist eine COM-basierte Technologie. Es verwendet Apartment-Thread-Objekte, vergessen Sie nicht, CoInitialize (Nil) aufzurufen.

procedure TMyThread.Execute; 
begin 
    CoInitialize(nil); 
    try 
    try 
     // create a connection here 
    except 
    end; 
    finally 
    CoUnInitialize; 
    end; 
end; 
9

Nein, ist es nicht. ADO ist eine COM-basierte Technologie. Es verwendet Apartment-Thread-Objekte, daher können Sie keine ADO-Verbindungen über Threadgrenzen hinweg verwenden. Jeder Thread benötigt eine eigene Verbindung.