AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FireDAC INSERT oder EDIT

Ein Thema von DaCoda · begonnen am 20. Mär 2023 · letzter Beitrag vom 23. Mär 2023
Antwort Antwort
DaCoda

Registriert seit: 21. Jul 2006
Ort: Hamburg
103 Beiträge
 
Delphi 12 Athens
 
#1

FireDAC INSERT oder EDIT

  Alt 20. Mär 2023, 15:43
Datenbank: MariaDB • Version: 11 • Zugriff über: FireDAC
Hallo,
ich habe eine Tabelle, die einmal pro Sekunde "geupdatet" werden soll (in einer TIdThreadComponent);

Ich versuche das derzeit so, was aber nicht richtig funktioniert (Erhängt sich meistens sehr schnell):

Code:
procedure TKommunikation.trdSqlDatenRun(Sender: TIdThreadComponent);
var
  Loop: Integer;
begin
  for Loop := 1 to MaxmaschinenIndex do begin
    if (MaschinenListe[Loop].FrameType = 'TYP1') OR (MaschinenListe[Loop].FrameType = 'TYP2') then begin
        LogMaschinendatenToTempSql(Loop);
    end;
  end;
  Sleep(1000); //SqlDatenSleepTime);
end;

procedure TKommunikation.LogMaschinendatenToTempSql(Index: Integer);
begin
  Daten.tblMaschinendaten_Temp.Open;
  Daten.tblMaschinendaten_Temp.Filtered := False;
  Daten.tblMaschinendaten_Temp.Filter := 'MaschinenIndex = ' + QuotedStr(Index.ToString);
  Daten.tblMaschinendaten_Temp.Filtered := True;
  DbgInfo('Index: ' + Index.ToString + ' - Recordcount: ' + Daten.tblMaschinendaten_Temp.RecordCount.ToString);
  if Daten.tblMaschinendaten_Temp.RecordCount = 0 then begin
      Daten.tblMaschinendaten_Temp.Insert;
  end else begin
      Daten.tblMaschinendaten_Temp.Edit;
  end;

  Daten.tblMaschinendaten_TempMaschinenIndex.AsInteger := Index;
  Daten.tblMaschinendaten_TempTemperatur.AsInteger := MaschinenDaten[Index].ActTemperature;
  Daten.tblMaschinendaten_TempPartial_Stueckzaehler.AsInteger := MaschinenDaten[Index].Partial_Pcs;
  Daten.tblMaschinendaten_TempTotal_Stueckzaehler.AsInteger := MaschinenDaten[Index].Total_Pcs;
  Daten.tblMaschinendaten_Temp.Post;
  Daten.tblMaschinendaten_Temp.Close;
end;
Debuggers don’t remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.126 Beiträge
 
Delphi 12 Athens
 
#2

AW: FireDAC INSERT oder EDIT

  Alt 20. Mär 2023, 15:49
Ist tblMaschinendaten_Temp ein TFDTable oder eine TFDQuery?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DaCoda

Registriert seit: 21. Jul 2006
Ort: Hamburg
103 Beiträge
 
Delphi 12 Athens
 
#3

AW: FireDAC INSERT oder EDIT

  Alt 20. Mär 2023, 15:56
tblMaschinendaten_Temp ist ein TFDTable.
Debuggers don’t remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.329 Beiträge
 
Delphi 12 Athens
 
#4

AW: FireDAC INSERT oder EDIT

  Alt 20. Mär 2023, 16:12
Und warum?

Das Ding läd sinnlos die komplette Tabelle,
wobei eine Query, mit WHERE anstatt Filter, nur den einen Datensatz behandelt.


Und MairaDB kann auch ein InsertOrUpdate
https://mariadb.com/kb/en/insert-on-...te-key-update/
womit garkein Datensatz runtergeladen werden muß, weil es reicht "ein" einfaches Execute abzuschicken.



PS: https://www.delphipraxis.net/10311-r...ed%3Dtrue.html

Eventuell hilft IsEmpty oder EoF, anstatt RecordCount.
Und was natürlich geht auch if Daten.tblMaschinendaten_TempMaschinenIndex.IsNull then oder if Daten.tblMaschinendaten_TempMaschinenIndex.AsInteger <> Index then ,
denn entweder ist kein Datensatz ausgewählt und hat somit NULL, oder es gibt Einen und er hat den entsprechenden Index.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Mär 2023 um 16:20 Uhr)
  Mit Zitat antworten Zitat
DaCoda

Registriert seit: 21. Jul 2006
Ort: Hamburg
103 Beiträge
 
Delphi 12 Athens
 
#5

AW: FireDAC INSERT oder EDIT

  Alt 20. Mär 2023, 16:43
@himitsu:

InsertOrUpdate im query habe ich schon probiert, aber ich bin irgendwie zu unwissend, es klappt einfach nicht,
von daher mein Cryptoconstruct mit der Table etc.

Ich möchte ja nur, wenn MaschinenIndex vorhanden, dann it neuen Daten updaten und wenn nicht da, dann anlegen mit den Daten...
Debuggers don’t remove bugs, they only show them in slow-motion.

Geändert von DaCoda (20. Mär 2023 um 17:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.126 Beiträge
 
Delphi 12 Athens
 
#6

AW: FireDAC INSERT oder EDIT

  Alt 20. Mär 2023, 17:57
InsertOrUpdate im query habe ich schon probiert, aber ich bin irgendwie zu unwissend, es klappt einfach nicht,
von daher mein Cryptoconstruct mit der Table etc.
Dann sollte man vielleicht besser das Grundproblem beheben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: FireDAC INSERT oder EDIT

  Alt 23. Mär 2023, 13:30
himitsu hat ja schon einen Link zu UpdateOrInsert für MariaDB zur Verfügung gestellt.

Das Beispiel auf der Seite:

SQL-Code:
INSERT INTO ins_duplicate VALUES (1,'Antelope')
  ON DUPLICATE KEY UPDATE animal='Antelope';
ist doch recht simple und sollte einfach umzusetzen sein.
Das wäre auch aus meiner Sicht die sinnvollste Lösung.

Alternativ könnte man erst mit einem Statement feststellen, ob ein Datensatz mit Bedingung x existiert und dann im Code entscheiden,
ob ein Update oder Insert - Statement danach kommt.
Ist auf jeden Fall schneller als mit TTable!

Frank
Frank Reim

Geändert von dataspider (23. Mär 2023 um 13:36 Uhr)
  Mit Zitat antworten Zitat
Alt 5. Apr 2023, 07:29     Erstellt von pilpot
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz