AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Daten ohne Zeitverzögerung speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Daten ohne Zeitverzögerung speichern

Ein Thema von norwegen60 · begonnen am 4. Mär 2016 · letzter Beitrag vom 4. Mär 2016
 
norwegen60

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

Daten ohne Zeitverzögerung speichern

  Alt 4. Mär 2016, 12: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz