Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Letzten oder bestimmten Datensatz finden (https://www.delphipraxis.net/5708-letzten-oder-bestimmten-datensatz-finden.html)

MrSpock 17. Jun 2003 09:48

Hallo Gambit,

du musst die Query erst ausführen, bevor du auf sie zugreifen kannst, dazu benutzt du bei einem SELECT Statement:

Delphi-Quellcode:
Query2.Open;

Gast 17. Jun 2003 09:49

Ach so jetzt sehe ich...

Query2.SQL.Add('Select Max(Regalnummer) as letzterMitE FROM DVDBank WHERE Regalnummer LIKE ''%E''');


und später so:


IF NOT Query2.EOF THEN
letzter := Query2.FieldByName('letzterMitE').AsString;

... dann es kann sein, dass Du kein Ergebnis mit Deiner Such-Bedingungen
bekommst...

Gruß

Paul Jr.

Gambit 17. Jun 2003 09:55

Hmm, ich hatte es so gemacht:
Delphi-Quellcode:
  Query2.Close;
  Query2.SQL.Clear;
  Query2.SQL.Add('Select Max(Regalnummer) as letzterMitE FROM DVDBank  WHERE Regalnummer LIKE ''%E''');
  Query2.ExecSQL;
ich versuchs mal mit open und der Idee von Rainer.

Die Abfrage sollte schon was finden, ich glaube nicht, dass das das Problem ist. Das Feld wird ja nicht gefunden...

Gambit

Gast 17. Jun 2003 09:58

ExecSQL... Alles klar... und weiter so... :mrgreen:

Mach Dir keine Sorgen... jeder mußt irgendwan anfangen...

Nun... ich würde Dir aber empfehlen nächstes Mall die Komplete Source-Code hier zu zeigen... bevor ich mir meine Finger verletze...

Gruß und viel Erfolg wünscht Dir :D

Paul Jr.

Gambit 17. Jun 2003 10:02

Ja, das kommt, wenn man einfach aus Beispielen abkupfert, sorry.

Jetzt funzt es. Aber die Idee von Rainer hab ich auch übernommen.

Asche auf mein Haupt, hatte sonst immer mit Open gearbeitet, ich fauler Sack...

Gambit

r_kerber 17. Jun 2003 10:15

Zitat:

Zitat von Gambit
Asche auf mein Haupt, hatte sonst immer mit Open gearbeitet, ich fauler Sack...

Selbstkritik ist der erste Schritt zur Besserung :lol: :spin: :chat:

Gambit 17. Jun 2003 10:21

Das Dumme ist nur, dass jetzt 9E als höchstes gefunden wird und nicht 10E, ich krieg die Krätze...


Gambit

r_kerber 17. Jun 2003 10:42

Ist ja auch logisch, 9 ist größer als 1. Du hast es hier mit Zeichenketten zu tun. Da wird beim Vergleich mit dem ersten Zeichen begonnen. Versuche es doch mal mit 09E.

MrSpock 17. Jun 2003 10:43

Hallo Gambit,

das habe ich befürchtet.
Das liegt daran, dass deine Einträge nicht alle gleich lang sind und die kürzeren Einträge nicht mit führenden Nullen oder Blanks aufgefüllt sind.

In diesem Fall, solltest du in der Query die MAX Funktion weglassen:

Delphi-Quellcode:
Select Regalnummer FROM DVDBank WHERE Regalnummer LIKE '%E'
Du erhälst dann eine Datenmenge aller auf E endenden Regalnummern. Diese durchläufst du in einer Schleife:

Delphi-Quellcode:
while Not Query2.Eof do
begin
  { Wert ermitteln }
  Query2.Next
end;
Beim "Wert ermitteln" schneidest du das E ab:

Delphi-Quellcode:
try
  regNr := Query2.FieldByName('RegalNummer').AsString;
  Delete(regNr, length(regNr-1, 1);
  wert := StrToInt(regNr);
except
   { Fehler: RegalNr ist keine Nummer! }
end;
Wenn der so entdeckte Wert größer ist, als der soweit gefundene, dann ist es das (temporäre) Maximum.

Gambit 17. Jun 2003 10:46

Jaja, das war mir schon klar, 09 würde ja auch funzen, nur bei 99 und 100 ginge das Spielchen wieder los. Ich müsste also im Voraus festlegen, wieviel Datensätze die DB maximal verwalten darf und entsprechend Nullen voranstellen, falls mir nichts anderes einfällt. Vielleicht hätte ich besser mit 2 getrennten Felden arbeiten sollen und eins davon als Integer oder sowas deklarieren sollen...

Gambit


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.
Seite 2 von 3     12 3      

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