Bei mir sieht das seit Jahren immer so aus:
Delphi-Quellcode:
TServerDataModule =
class(TDataModule)
private
FMsConnection: TMSConnection;
procedure Init;
var
ServerDataModule: TServerDataModule;
implementation
procedure TServerDataModule.Init;
begin
FMsConnection:= TMSConnection.Create(
Nil);
FMsConnection.Server:= IniFile.ReadString('
DataBase','
Server','
localhost');
FMsConnection.Database:= IniFile.ReadString('
DataBase','
Database','
DatabaseName');
FMsConnection.Username:= IniFile.ReadString('
DataBase','
UserName','
UserName');
FMsConnection.Password:= Decrypt(IniFile.ReadString('
DataBase','
Password','
Password'),READ_KEY);
ConnectDatabase;
// da wird in einem Thread versucht zu verbinden.
end;
procedure TServerDataModule.IrgendeineDatebankfunktion;
var
Qry: TMSQuery;
Conn: TMSConnection;
begin
Conn:= TMSConnection.Create(
Nil);
Conn.Assign(self.FMsConnection);
Qry:= TMSQuery.Create(
Nil);
Qry.Connection:= Conn;
Try
Qry.SQL.Text:= '
SELECT * FROM whatever WHERE id =:id';
Qry.ParamByName('
id').AsInteger:= 12;
Qry.Open;
while not Qry.Eof
do
begin
Qry.Next;
end;
end;
Finally
Conn.Free;
Qry.Free;
End;
end;
Das Assign der "globalen" Connection erlaubt problemloses Multithreading.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.