Entwickler-Ecke
Datenbanken - Datenbank befüllt immer den ersten Eintrag
Rupert - Fr 19.03.21 13:13
Titel: Datenbank befüllt immer den ersten Eintrag
Ich versuche mit der u.a. Pascal-function in die Datenbank Fronius den aktuellen Wert als letzten Eintrag zu schreiben und danach den ersten zu löschen, wenn mehr als 4 Datensätze geschrieben wurden. (Last in first out)
Solange die Datenbank unter 5 Einträge hat, werden die Werte stets angehängt.
Sobald ich die erste Zeile einmal gelöscht habe, wird diese immer wieder beschrieben.
ich verstehe nicht weshalb, da ich stets zuvor zum letzten Datensatz gehe und ein append bzw. insert anweise.
Weder append, noch insert funktioniert richtig.
Es handelt sich um eine componentACE Datenbank, programmieren tue ich unter Delphi 5
lg
Rupert
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
|
with Datentabellen.Fronius do Begin Label1.caption:= inttostr(recordcount); Label1.refresh;
last; Insert; FieldByName('E_Day').AsFloat:=FRONIUS_Daten[1]; FieldByName('E_Total').AsFloat:=FRONIUS_Daten[2]; FieldByName('E_Year').AsFloat:=FRONIUS_Daten[3]; FieldByName('P_Grid').AsFloat:=FRONIUS_Daten[4]; FieldByName('P_Load').AsFloat:=FRONIUS_Daten[5]; FieldByName('P_PV').AsFloat:=FRONIUS_Daten[6]; FieldByName('P_AC_Total').AsFloat:=FRONIUS_Daten[7]; FieldByName('Temperature').AsFloat:=FRONIUS_Daten[8];
post; if recordcount >= 5 then begin first; delete; end; end; |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
Moderiert von Th69: Rechtschreibfehler im Titel geändert.
jaenicke - Fr 19.03.21 20:51
Genau der Quelltext funktioniert mit einer aktuellen Delphiversion (und einer aktuellen Datenbank). :nixweiss:
Muss es wirklich Delphi 5 aus dem letzten Jahrtausend sein? :shock:
mandras - Fr 19.03.21 22:34
Rupert, ich nehme an, Du meint nicht, daß append oder insert eine Fehlermeldung produzieren.
Sondern daß der neue Datensatz nicht an der Stelle erscheint, die Du erwartest.
Habe ich das soweit richtig verstanden?
Falls ja:
Die, die Datenbanken die ich kenne, können Datensätze nicht gezielt an einer bestimmten Stelle einer Tabelle ablegen
(Ausnahme war glaube ich Paradox).
Es wird hier wahrscheinlich nicht anders sein.
Meine Lösungsidee wäre:
Ein zusätzliches Int-Feld, zB lfdNr, definieren. Abfragen der Tabelle immer mit Sortierung nach lfdNr.
Beim Anhängen eines Datensatzes dieses Feld mit Max(lfdnr aller bestehender Sätze)+1 belegen.
Damit wird der neue Satz immer der letzte bei Abfragen.
Wenn mehr als 5 Sätze in der Tabelle: Dann noch den Satz löschen, dessen lfdNr = min (lfdnr aller Sätze). Das löscht dann immer den ersten Satz der Tabelle.
jaenicke - Sa 20.03.21 00:36
Ach so, stimmt, dann habe ich das falsch verstanden.
Die Zeilen in einer Tabelle können per Definition in beliebiger Reihenfolge erscheinen, wenn keine Sortierung vorgegeben ist. Wann ein Datensatz hinzugefügt wird, hat damit nicht unbedingt etwas zu tun.
Eine Lösung hat ja mandras schon genannt. Dafür verwendet man z.B. Autoinkrement Felder, vorausgesetzt die Tabelle unterstützt das. Ansonsten geht es nur wie von mandras beschrieben manuell.
Sinspin - So 21.03.21 09:09
jaenicke hat folgendes geschrieben : |
Muss es wirklich Delphi 5 aus dem letzten Jahrtausend sein? :shock: |
Du schonwieder, Du bist auch aus dem letzten Jahrtausend. Ich zeige mich deswegen trotzdem nicht :shock: :rofl:
Das passiert bei mir erst wenn ich
with im Quelltext finde :
Rupert hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3:
| with Datentabellen.Fronius do Begin ... | |
Rupert - Mi 24.03.21 11:53
mandras hat folgendes geschrieben : |
Meine Lösungsidee wäre:
Ein zusätzliches Int-Feld, zB lfdNr, definieren. Abfragen der Tabelle immer mit Sortierung nach lfdNr.
Beim Anhängen eines Datensatzes dieses Feld mit Max(lfdnr aller bestehender Sätze)+1 belegen.
Damit wird der neue Satz immer der letzte bei Abfragen.
Wenn mehr als 5 Sätze in der Tabelle: Dann noch den Satz löschen, dessen lfdNr = min (lfdnr aller Sätze). Das löscht dann immer den ersten Satz der Tabelle. |
Danke - funktioniert
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!