Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Daten ohne Zeitverzögerung speichern

  Alt 4. Mär 2016, 17:01
Hallo,
du erzeugst die Query ja jedes mal neu auf dem Server.
Probiere doch mal eine prepared Query aus.

Beim Start ds Programmes machst du dein

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');
zusätzlich kommt dahinter ein
dmFCalib.dbquQuery.Prepared; Und beim Schreiben der Daten dann nur noch die Parameter füllen

Delphi-Quellcode:
// 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;
Das reduziert die Netzlast.

Schneller wäre dann noch eine stored procedure oder bulk insert.

Die Query dient damit ausschließlich diesem Insert.
Hast du mehr davon -> mehrere Queries benutzen.


Soweit ich nicht erinnere, cacht der sql-server aber parametrisierte Queries selbst,
aber einen Versuch ist es Wert.


Heiko
Heiko
  Mit Zitat antworten Zitat