![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: SQLite3Connection
Die letzte Zeile aus der DB schnell auslesen?
Hallo,
kann man die letzte Datenzeile aus der DB ohne einer Schleife auslesen? Zur Zeit mache ich es so, würde aber die Abfrage etwas verkürzen, Falls machbar ist, da bei vielen Datensätzen kann man Code sehr langsam sein.
Delphi-Quellcode:
Danke!
// Die letzte Kundennummer des Teilnehmers auslesen
SQLQueryLastKNr.Close; SQLQueryLastKNr.SQL.Text := 'SELECT knr FROM tbteilnehmer'; SQLQueryLastKNr.Open; while not SQLQueryLastKNr.Eof do begin LastKNr := SQLQueryLastKNr.FieldByName('knr').AsInteger; SQLQueryLastKNr.Next; end; // Ende SQLQuery1.ParamByName('knr').AsInteger := LastKNr + 1; |
AW: Die letzte Zeile aus der DB auslesen?
Und was kennzeichnet eine letzte Datenzeile aus?
DBs sind mengenorientiert. Solange du nicht definierst was "letzte Datenzeile" ausmachst geht das nicht. Deine Abfrage wird nur zufälligerweise das gewünschte Ergebnis liefern. Mein Goldkugel sagt mir das du eine Autoinc-ID mitführst und der größte Wert dem letzten eingefügten Datensatz entspricht den du haben willst. Also ein
Code:
SELECT Max(knr) FROM tbteilnehmer group by knr
|
AW: Die letzte Zeile aus der DB schnell auslesen?
AUTOINCREMENT ist bei mir nur die ID, die Kundennummer nicht, da SQLite AUTOINCREMENT nur ein Mal erlaubt. Ich muss also die Kundennummer selber hoch zählen, daher
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
![]() |
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
Je nach Datenbank ist ein absteigend sortierter Index erforderlich wenn es möglichst schnell funktionieren soll. (InterBase in den mir bekannten Versionen klappert bei MAX und nur aufsteigendem Index noch durch alle Sätze) |
AW: Die letzte Zeile aus der DB schnell auslesen?
Laut Beschreibung/Überschrift woller er ja nicht die größte Nummer, sondern die Letzte, also
SQL-Code:
:stupid:
SELECT knr FROM tbteilnehmer ORDER BY xxx DESC LIMIT 1
xxx = akn oder nach was auch immer die Daten sortiert sein sollen (z.B. insert_date oder so) Ansonsten wäre sein Code auch irgendwie falsch.
Delphi-Quellcode:
LastKNr := -1; // warum hast du die Variable nicht initialisiert? Was soll denn rauskommen, wenn es keine Datensätze gibt!
while not SQLQueryLastKNr.Eof do begin if LastKNr < SQLQueryLastKNr.FieldByName('knr').AsInteger then LastKNr := SQLQueryLastKNr.FieldByName('knr').AsInteger; SQLQueryLastKNr.Next; end; |
AW: Die letzte Zeile aus der DB schnell auslesen?
Habe diese Selektion gefunden, die gut funktioniert. :thumb:
Delphi-Quellcode:
SELECT knr FROM tbteilnehmer WHERE id_teilnehmer=(SELECT MAX(id_teilnehmer) FROM tbteilnehmer)
Die id_teilnehmer hat wohl den Index, die knr nicht wie es scheint. |
AW: Die letzte Zeile aus der DB schnell auslesen?
SQL-Code:
:stupid: (Beschreibung siehe Nachtrag meine letzter Antwort)
SELECT knr FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 1
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
Zitat:
SQL-Code:
gar nicht so falsch.
select max(knr) from tbteilnehmer Group by teilnehmer-id
Gruß K-H |
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Absteigend sortieren und nur den 1. Datensatz zurückgeben.
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Wenn absteigend sortiert ist, ist der erste der größte!
Gruß K-H P.S. nochmal den "letzten" gibt es in einer Datenbank nicht! |
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Wenn es zu dem Kunden bereits abhängige Daten gibt, wird das mit dem Löschen eh schwierig (bei entsprechender Datenstruktur).
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Obwohl die Idee mit dem 'ORDER BY DESC LIMIT' meistens echt brauchbar ist, würde ich mir bei großen Datenmengen 2x überlegen, ob ich diesen Weg gehen soll. Denn wider dem gesunden Menschenverstand (ist das grammatikalisch überhaupt korrekt :gruebel:?) scheinen einige RDBMS bei der Sortierung etwaige Indexe zu ignorieren (sofern es sich nicht um den Primär/Clustered Index handelt) und rödeln ewig und drei Tage rum, bis sie das letzte Element ausspucken. Andere verwenden einen Index, aber auch nur dann, wenn er auch absteigend sortiert ist.
Ein Aggregat, wie 'SELECT MAX(ID)' ist dagegen -mit Index- schnell genug. Im Zweifelsfall würde ich die Kandidaten durchprobieren. Bei kleinen Datenmengen ist das aber wurscht. Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Um das einfach nochmal genauer aufzuzeigen
SQL-Code:
bzw.
SELECT knr
FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 1
SQL-Code:
Da wird dann verständlicher was zusammengehört.
SELECT
knr FROM tbteilnehmer ORDER BY id_teilnehmer DESC LIMIT 1
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Gelöschte Kunden kann aber kein Buchprüfer mehr kontrollieren :mrgreen:. Langsam wird es aber OT, oder?
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
Aber ich denke es ist alles relevante gesagt. Oder gibt’s noch Fragen Hauser - äh - AlexII? |
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
Delphi-Quellcode:
SELECT knr FROM tbteilnehmer WHERE id_teilnehmer=(SELECT MAX(id_teilnehmer) FROM tbteilnehmer)
Aber wie vermeide ich, dass ein neuer Kunde die letzte gelöschte KNr bekommt? |
AW: Die letzte Zeile aus der DB schnell auslesen?
Willst Du wirklich Kunden löschen können? Lies doch #24 noch einmal durch, das erscheint mir persönlich die vernünftigere Lösung zu sein.
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Oder andersweitig die schon vergebenen Nummern merken.
Auch wenns hier nicht mehr geht. Für solche Unique-IDs verwenden wir bei uns GUIDs. Immer eindeutig und wenn es eh nur einer DB-System interne Nummer darstellt stört es nicht das sie nicht sprechend lesbar sind |
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
![]() |
AW: Die letzte Zeile aus der DB schnell auslesen?
@AlexII
keine Ahnung, ob dich schon mal einer darauf verwiesen hat, dass du das mit SQLite gar nicht brauchst. Schau mal hier: ![]() |
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Na dann hoffe ich mal, dass die Anwendung nie als Multi-User-Anwendung zum Einsatz kommt.
Bei der vorgesehenen Lösung dürfte es zu Problemen kommen, falls mindestens 2 Anwender zur selben Zeit einen neuen Datensatz erfassen. Ein AutoInc-Feld funktioniert doch sehr gut. Man muss sich bei der Programmierung in solchen Fällen nur die Mühe machen, keine datenbanksensitiven Komponenten zu verwenden. Erst wenn der Anwender speichern will, wird der Datensatz eingetragen. Dann gibt es auch keine Lücken und doppelte Nutzung gelöschter Nummern ist damit auch verhindert. |
AW: Die letzte Zeile aus der DB schnell auslesen?
SQLite hört sich eher nicht nach MultiUser an.
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
|
AW: Die letzte Zeile aus der DB schnell auslesen?
Zitat:
Gruß K-H |
AW: Die letzte Zeile aus der DB schnell auslesen?
Bei einem richtigen DBMS wird man dies dann auch ganz anders lösen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 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-2025 by Thomas Breitkreuz