Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Query innerhalb ein Threads nutzen ? (https://www.delphipraxis.net/108517-query-innerhalb-ein-threads-nutzen.html)

pronny31 15. Feb 2008 09:49


Query innerhalb ein Threads nutzen ?
 
Wie kann man eine Query innerhalb eines Threads nutzen ?

folgendes habe ich verwendet nur kommt ständig eine Speicherzugriffsverletzung !


Delphi-Quellcode:

type
  Test = class(TThread)
  a1        : Integer;
  Query1      : TIBQuery;
  Datenbank  : TIBDatabase;
  Transaction : TIBTransaction;

  private
    { Private-Deklarationen }

  public
    constructor create(Art : Integer; Datenbankkomp : TIBDatabase); overload;

  protected
    procedure Execute; override;
 
end;

var
  Test1     : Test;
  U_Datum  : Tdate;
  U_Fach   : Integer;
implementation

{$R *.DFM}

constructor Test.create(Art : Integer; Datenbankkomp : TIBDatabase);
Begin
  a1 := Art;
  Datenbank := Datenbankkomp;
  inherited create(false);

End;

procedure Test.Execute;

begin
  Query1.text := 'Egal'; // Hier bekomme ich eine Speicherzugriffsverletzung !
  sleep(10000);
end;

end.
Das Hauptformular und den Button der den Thread erzeugt habe ich mal weggelassen !

sirius 15. Feb 2008 10:03

Re: Query innerhalb ein Threads nutzen ?
 
Hast du das Objekt irgendwo initialisiert?
(Wahrscheinlich brauchst du im Thread auch noch so etwas wie CoInitialize.)

pronny31 15. Feb 2008 10:05

Re: Query innerhalb ein Threads nutzen ?
 
Ich gebe dir mal mein ButtonClick procedure :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  U_Datum := MonthCalendar1.Date;
  Test1 := Test.Create(2,IBDatabase1);
end;
reicht des ?

sirius 15. Feb 2008 10:22

Re: Query innerhalb ein Threads nutzen ?
 
Du musst das Query Initialisieren/instanzieren:
Delphi-Quellcode:
Query1:=TIBQuery.create();
Und übergebe am besten keine Objekte über Threadgrenzen. Du solltest dir besser gleich angewöhnen alles, was die Datenbank betrifft an Objekten komplett und ausschließlich im Thread zu erledigen.
Zur Vereinfachung leg dir ein DataModul an, welches du nur im Thread benutzt.

pronny31 15. Feb 2008 10:27

Re: Query innerhalb ein Threads nutzen ?
 
Des wars schon danke hat funktioniert !!!!!

Bernhard Geyer 15. Feb 2008 10:28

Re: Query innerhalb ein Threads nutzen ?
 
Zitat:

Zitat von sirius
Und übergebe am besten keine Objekte über Threadgrenzen. Du solltest dir besser gleich angewöhnen alles, was die Datenbank betrifft an Objekten komplett und ausschließlich im Thread zu erledigen.
Zur Vereinfachung leg dir ein DataModul an, welches du nur im Thread benutzt.

Ergänzend wäre noch zu hinterfragen ob die eingesetzten Komponenten überhaupt Thread-Safe von sich aus sind oder ob es trotz aller sonstigen Fehlervermeidungen kracht da keine Verbindungen aus 2 verschiedenen Threads behandelt werden können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz