![]() |
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;
|
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. |
Hmm, ich hatte es so gemacht:
Delphi-Quellcode:
ich versuchs mal mit open und der Idee von Rainer.
Query2.Close;
Query2.SQL.Clear; Query2.SQL.Add('Select Max(Regalnummer) as letzterMitE FROM DVDBank WHERE Regalnummer LIKE ''%E'''); Query2.ExecSQL; Die Abfrage sollte schon was finden, ich glaube nicht, dass das das Problem ist. Das Feld wird ja nicht gefunden... Gambit |
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. |
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 |
Zitat:
|
Das Dumme ist nur, dass jetzt 9E als höchstes gefunden wird und nicht 10E, ich krieg die Krätze...
Gambit |
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.
|
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:
Du erhälst dann eine Datenmenge aller auf E endenden Regalnummern. Diese durchläufst du in einer Schleife:
Select Regalnummer FROM DVDBank WHERE Regalnummer LIKE '%E'
Delphi-Quellcode:
Beim "Wert ermitteln" schneidest du das E ab:
while Not Query2.Eof do
begin { Wert ermitteln } Query2.Next end;
Delphi-Quellcode:
Wenn der so entdeckte Wert größer ist, als der soweit gefundene, dann ist es das (temporäre) Maximum.
try
regNr := Query2.FieldByName('RegalNummer').AsString; Delete(regNr, length(regNr-1, 1); wert := StrToInt(regNr); except { Fehler: RegalNr ist keine Nummer! } end; |
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 19:58 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