AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Letzten oder bestimmten Datensatz finden

Letzten oder bestimmten Datensatz finden

Ein Thema von Gambit · begonnen am 16. Jun 2003 · letzter Beitrag vom 17. Jun 2003
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
6.015 Beiträge
 
Delphi 2010 Professional
 
#11
  Alt 17. Jun 2003, 10:48
Hallo Gambit,

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

Query2.Open;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#12
  Alt 17. Jun 2003, 10: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.
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#13
  Alt 17. Jun 2003, 10: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
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#14
  Alt 17. Jun 2003, 10:58
ExecSQL... Alles klar... und weiter so...

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

Paul Jr.
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#15
  Alt 17. Jun 2003, 11: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
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#16
  Alt 17. Jun 2003, 11:15
Zitat von Gambit:
Asche auf mein Haupt, hatte sonst immer mit Open gearbeitet, ich fauler Sack...
Selbstkritik ist der erste Schritt zur Besserung
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#17
  Alt 17. Jun 2003, 11:21
Das Dumme ist nur, dass jetzt 9E als höchstes gefunden wird und nicht 10E, ich krieg die Krätze...


Gambit
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#18
  Alt 17. Jun 2003, 11: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.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
6.015 Beiträge
 
Delphi 2010 Professional
 
#19
  Alt 17. Jun 2003, 11: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:

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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#20
  Alt 17. Jun 2003, 11: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
  Mit Zitat antworten Zitat
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 17:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf