Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Daten ohne Zeitverzögerung speichern

  Alt 4. Mär 2016, 11:46
Datenbank: MsSQL • Version: 2008R2 • Zugriff über: UniDac
Hallo zusammen,

ich habe eine Anwendung in der Timergesteuert (100ms) Messdaten erfasst und in eine DB gespeichert werden. Bei LAN-Zugriff ist das auch ausreichend schnell. Jetzt ist aber ein Rechner nur über WLan verbunden und da habe ich das Problem, dass es manchmal bis zu 2000ms dauert, bis die Daten gespeichert und damit der Timer für den nächsten Prozess freigegeben ist. (Timerereignis ist für Folge-Ereignisse gesperrt bis ein Prozess komplett abgeschlossen ist.)

Ich dachte, dass sich das über
Delphi-Quellcode:
         dmFCalib.dbquQuery.SQL.Text := 'BEGIN TRAN';
          dmFCalib.dbquQuery.SQL.Add('INSERT INTO [Cal_Force] ');
          dmFCalib.dbquQuery.SQL.Add('([CalReportID], [FAct], [FTarget], [Art], [Temperatur], [Humidity], [ServOrt], [ErstUserID], [ErstDat])');
          dmFCalib.dbquQuery.SQL.Add('VALUES');
          dmFCalib.dbquQuery.SQL.Add('(:pCalReportID, :pFAct, :pFTarget, :pArt, :pTemperatur, :pHumidity, :pServOrt, :pErstUserID, GETDATE())');
          dmFCalib.dbquQuery.SQL.Add('COMMIT TRAN');

          // set query parameters
          dmFCalib.dbquQuery.ParamByName('pCalReportID').Value := dmFCalib.dbquCalReport.FieldByName('ID').AsInteger;
          dmFCalib.dbquQuery.ParamByName('pFAct').Value := rForce;
          dmFCalib.dbquQuery.ParamByName('pFTarget').Value := rFtarget;
          dmFCalib.dbquQuery.ParamByName('pArt').Value := cArt;
          dmFCalib.dbquQuery.ParamByName('pTemperatur').Value := uHilfs1.Valreal(edTemperatur.Text);
          dmFCalib.dbquQuery.ParamByName('pHumidity').Value := uHilfs1.ValReal(edHumidity.Text);
          dmFCalib.dbquQuery.ParamByName('pServOrt').Value := cServOrt;
          dmFCalib.dbquQuery.ParamByName('pErstUserID').Value := intUser.User.ID;

          dmFCalib.dbquQuery.ExecSQL;
bessert. Die durchschnittliche Zeit für die Ausführung dieses Blocks sinkt auch von 12ms auf 5ms und die Aussetzer sind auch reduziert, aber es gibt sie immer noch.

Wie bekomme ich es hin, dass das Wegschreiben der Daten den Prozess gar nicht beeinflusst. Bei der Verwendung von Threads zusammen mit Datenbankverbindungen habe ich schon die tollsten Sachen gelesen und da ich mit Threading noch nicht vertiefend befasst habe, wäre ich froh, wenn ich hier ein Beispielthread bekommen würde.

Das direkte Wegschreiben der Daten hat den großen Vorteil, dass an einem anderen Arbeitsplatz die Daten mehr oder weniger online beobachtet werden könne

Vielen Dank
Gerd
  Mit Zitat antworten Zitat