Einzelnen Beitrag anzeigen

Barthiboy

Registriert seit: 4. Nov 2011
36 Beiträge
 
#1

TSQLDataSet, TSQLConnection Multithread Exception

  Alt 4. Dez 2015, 08:58
Datenbank: MSSQL • Version: 2014 • Zugriff über: DB Express TSQLConnection
Hallo zusammen.
ich habe eine Anwendung geschrieben in der in einem Thread Daten via TCPIP von einem Server gelesen werden und in eine MSSQL Datenbank eingegraten werden.
Hierfür verwende ich TSQLDataSet, TSQLConnection
Beispiel:
Delphi-Quellcode:
  FSQLDataset.Close;
  FSQLDataset.CommandText := SQLCommand;
  FSQLDataset.ExecSQL(true);
funktioniert auch wunderbar.
Allerdings möchte ich jetzt im Main Thread (VCL) jetzt eine Anzahl der Datensätze aus der Tabelle ermitteln.
Hierfür habe ich wieder eine TSQLDataSet, TSQLConnection Komponente verwendet.
Somit eigentlich schön Threadsafe
Beispiel der abfrage
Delphi-Quellcode:
      SQLDS_Work.Close;
      SQLDS_Work.CommandText := 'SELECT COUNT(WareneingangsNr) from WEP02.dbo.WareneingangsNr WHERE Aktiv = 1';
      SQLDS_Work.Open;
      if SQLDS_Work.FieldCount > 0 then begin
        if SQLDS_Work.Fields[0].AsInteger > 1 then begin // Fehler weil mehrere Wareneingänge aktiv
          if Assigned(Logger) then begin
            Logger.LogErrorMessage('Es sind ' + IntToStr(SQLDS_Work.RecordCount) + ' Wareneingänge aktiv. Fehler bei Timer_Chart aufgetreten');
          end;
          Exit;
        end
und so weiter

wenn jeweils nur ein Thread läuft funktioniert es ohne Probleme.
Laufen beide knallts.
Aber warum?
Ich baue für jeden Thread eine extra Verbindung auf.
Eigentlich sollte eine MSSQL Datenbank doch so etwas können.
Es werden auch keine Objekte aus dem jeweils anderen Thread verwendet.

Danke für eure Hilfe

Geändert von mkinzler ( 4. Dez 2015 um 09:01 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat