Announcement

Collapse
No announcement yet.

Thread und Query macht beim 2. Aufruf Probleme

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Thread und Query macht beim 2. Aufruf Probleme

    Hallo,

    ich habe einen Thread, der eine Query öffnet, Daten ausliest und wieder schliesst, dies kann mehrfach vorkommen.

    Habe bereits mehrere Versionen versucht (auch mit Session), immer beim 2 Aufruf meines Thread, geht der Thread bei MyQuery.active := true
    in das OnTerminate Ereignis und ist beendet.

    Ich weiss einfach nicht warum.

    // StartAufruf des Thread
    MyThread := TMyThread.Create ProgressBar1,Session1,Database1,Query1,tpIdle );
    MyThread.OnTerminate := Form1.ThreadDone;

    // Thread Unit mit Query
    procedure TMyThread.Execute;
    begin

    myDatabase := TDatabase.Create(Nil);
    myQuery := Tquery.Create(nil);

    myDatabase.AliasName := 'AliasNewTreeVersion';
    myDatabase.DataBaseName := 'abc';
    myDatabase.Connected := false;
    myDatabase.KeepConnection := false;
    myDatabase.LoginPrompt := false;

    myQuery.DatabaseName := 'abc';
    myQuery.SQL.Clear;
    myQuery.SQL.Add('Select * from tblcontent');

    myQuery.Active := true;

    while (not Terminated) do
    begin

    While not myQuery.Eof do
    begin

    ....
    usw.

  • #2
    Hallo Jürgen,

    da Dein DB-Zugriff über mehrere Threads erfolgen soll, muß jeder Thread seine eigene Verbindung zur Datenbank haben.

    D.h. der Thread muß auch eine eigene TSession verwenden. Ich würde Sie deshalb dynamisch erzeugen und mit den Daten aus SESSION1 füllen. Dem dynamisch erzeugten TDatabase-Objekt muß dann natürlich diese Session auch zugewiesen werden (sonst wird die Standard-Session verwendet -> mehrere Threads könnten paralell auf die Standard-Session zugreifen = Chaos).

    Tschau

    Torste

    Comment


    • #3
      Hallo Torsten,

      ich glaube ich habe etwas wichtiges in meiner obigen Frage vergessen. Zunächst habe ich mich auch erkundigt und es taucht immer wieder in gefundenen Informationen auf, dass ein DB Thread immer seine einge Session und Database benötigt.
      Das entscheidende was ich evtl vergessen habe zu erwähnen ist :

      Ich möchte erreichen, dass der Anwender meines Programmes, während des Programmlaufes die pysikalische Datenbank wechseln kann. Dies erreiche ich durch ein dynamische ändern des Aliases, dh. der Alias bleibt gleich, zeigt aber auf eine andere phys. DB. Dies klappt .

      So hier beginn mein Problem, mein Thread mit Session ist ja noch unter der "alten" DB initialisiert, wenn ich Ihn nun starte (Er liest den Inhalt einer Tabelle in ein dyn. Record ein), liest er die Daten aus der "alten" DB ein obwohl bereits phys. eine andere DB da ist. Selbst mit programmtechn. dynamischen Erzeugen konnte ich bisher keine Erfolge erzielen.

      Mittlerweile glaube ich, dass es nicht möglich ist, dennoch kann ich mir das nicht vorstellen.

      Bin also für jeden Tipp dankbar, da ich zur Zeit definitiv "hänge".

      Jürge

      Comment


      • #4
        Habe mein Problem gelöst, ich erzeuge alles dynamisch und nun kommts, ich öffne die Query bereits vor dem Thread Aufruf, das Einlesen besorgt dann mein Thread. Was soll ich sagen nun geht es. Wenn ich allerdings im Thread die Query öffne, beendet sich der Thread sofort selbst.

        Jürge

        Comment

        Working...
        X