Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Abfrage letzter Datensatz (https://www.delphipraxis.net/21471-abfrage-letzter-datensatz.html)

PES 3. Mai 2004 15:06


Abfrage letzter Datensatz
 
Hallo,

habe unter Delphi eine Datenbank erstellt die ein FELD ID hat, das wird mit jedem Datensatz automatisch erhöht. Nun möchte ich einfach auf meiner Form mir die letzte ID angucken. Wie geh ich da am besten vor.

MFG PES

kiar 3. Mai 2004 15:08

Re: Abfrage letzter Datensatz
 
hall pes,

willkommen in der dp ,

recordcount sollte dein freund in der OH sein

raik

MrSpock 3. Mai 2004 15:19

Re: Abfrage letzter Datensatz
 
Hallo PES,

zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum.

Recordcout funktioniert leider nicht immer, weil ja auch Datensätze gelöscht werden können. Es gibt zwei Möglichkeiten:#

Entweder du schreibst ein einfachen SQL Statement:

SQL-Code:
SELECT MAX(ID) FROM myTable
oder, falls ID der Primärschlüssel ist (und aufsteigend sortiert ist), kannst du mit:

Delphi-Quellcode:
myTable.Last;
maxID := myTableID.Value;
die höchste ID feststellen.

PES 3. Mai 2004 15:20

Re: Abfrage letzter Datensatz
 
Erstmal danke
Da ich noch nicht ganz verstehe was mit record count gemeint ist habe ich folgenden weg gedacht
form2.show;
form2.table1.insert;
form2.table2.insert;
form2.table3.insert;

form2.query1.active:=false;
form2.query1.sql.clear;
form2.query1.sql.add ('SELECT id FROM Kunde');

form2.query1.active:=true;
form2.show;

dieses gebe ich in einen dbgrind aus. Leider verstehe ich nicht wie ich hier auf auf den letzten Datensatz zugreife um diesen dan auszugeben
MFG PES

@Mr Spock
Was meinst den genau mit mytable? Ist das der Name der DB(Kunde) oder die komponente ttable?

MrSpock 3. Mai 2004 15:37

Re: Abfrage letzter Datensatz
 
Hallo PES,

RecordCount ist eine Methode, die dir die Anzahl der Datensätze in einer Datenmenge zurückgibt.

Zitat:

form2.show;
form2.table1.insert;
form2.table2.insert;
form2.table3.insert;
Fügst du tatsächlich gleichzeitig Daten in 3 Tabellen ein?

Zitat:

form2.query1.active:=false;
form2.query1.sql.clear;
form2.query1.sql.add ('SELECT id FROM Kunde');
Es muss heißen:
Delphi-Quellcode:
form2.query1.sql.add ('SELECT Max(id) as maxid FROM Kunde');
Zitat:

form2.query1.active:=true;
form2.show;
Mit:
Delphi-Quellcode:
maxid := form2.query1.FieldByName('maxid').Value;
kannst du auf die höchste ID zugreifen.

PES 3. Mai 2004 16:00

Re: Abfrage letzter Datensatz
 
@ Spock
Jo danke, problem gelöst. Ja wir schreiben in drei tabellen, sind aber noch am überlegen ob wir das umschmeißen!
MFG Pes

PES 7. Mai 2004 16:04

Re: Abfrage letzter Datensatz
 
Hallo, wir haben jetzt folgendes Problem:
Wir erstellen eine neue Kundendb. Haben nur das Problem das wenn wir die MAxid ermitteln jedoch noch nichts in der db steht er abstürzt, da er maxid ja nicht belegen kann. Ist ja auch logisch.
Delphi-Quellcode:
begin
NeuerKunde.show;
NeuerKunde.TTableKunde.insert;

NeuerKunde.querySQL.active:=false;
NeuerKunde.querySQL.sql.clear;
NeuerKunde.querySQL.sql.add('SELECT Max(Kundennummer) as maxid FROM Kunde');
NeuerKunde.querySQL.active:=true;
maxID:=NeuerKunde.querySQL.FieldbyName('maxid').Value;
NeuerKunde.DBKundennummer.text:=IntToStr(maxID+1);
Wie können wir diesen Fehler umgehen?
Danke PES

[edit=Sharky]Deplhi-Tags gesetzt. Mfg, Sharky[/edit]

Sharky 8. Mai 2004 07:38

Re: Abfrage letzter Datensatz
 
Hai PES,

um welche Datenbank handelt es sich denn?

MrSpock 8. Mai 2004 14:14

Re: Abfrage letzter Datensatz
 
Hallo PES,

nach dem Öffnen der Query kannst du mit RecordCount prüfen, ob ein Ergebnis erzeugt wurde:

Delphi-Quellcode:
maxID := -1;
try
  NeuerKunde.querySQL.active:=false;
  NeuerKunde.querySQL.sql.clear;
  NeuerKunde.querySQL.sql.add('SELECT Max(Kundennummer) as maxid FROM Kunde');
  NeuerKunde.querySQL.active:=true;
  if NeuerKunde.RecorCount > 0 then
    maxID:=NeuerKunde.querySQL.FieldbyName('maxid').Value
except
  on E:exception do
     MessageDlg('Fehler bei der Abfrage'#13
              +E.Message, mtError, [mbOK], 0);
end;

kiar 8. Mai 2004 15:39

Re: Abfrage letzter Datensatz
 
Zitat:

nach dem Öffnen der Query kannst du mit RecordCount prüfen, ob ein Ergebnis erzeugt wurde:

wie ich schon oben sagte :mrgreen:

raik

Sharky 8. Mai 2004 15:43

Re: Abfrage letzter Datensatz
 
Zitat:

Zitat von kiar
...wie ich schon oben sagte :mrgreen: ....

Und trotzdem bleibt die Frage nach der DB!
Ihr kennt euch ja alle mit DB Systemen aus. Also weiss auch jeder das es,je nach System, die möglichkeit gibt die letzte "ID" vom Server abzufragen.

kiar 8. Mai 2004 15:48

Re: Abfrage letzter Datensatz
 
hallo fischlein

ich glaube er arbeitet mit einer paradoxen datei :mrgreen:

ein blick auf seien anderen threads, würde daa vielleicht helfen.

mi dem blick auf die db heb ich schonmal den ausserirdischen angesprochen,

man müsste in diesem forum erst ein feld ausfüllen, wo man DB , zugriff und ausgabe definiert,
erst dann kann man seine frage stellen, würde auf jeden fall zeit sparen

raik

PES 10. Mai 2004 15:00

Re: Abfrage letzter Datensatz
 
Hallo, Mr Spock wir haben deinen Lösungsansatz getested. Leider bekommen wir immer noch folgende Fehlermeldung. Ungültige Variant-Typ Umwandlung. Da ja wie gesagt kein Datensatz in der DB steht.
MFG PES

MrSpock 10. Mai 2004 20:58

Re: Abfrage letzter Datensatz
 
Hallo PES,

darum habe ich die Anweisungen ja in einen try ... except Block geschrieben. maxID ist mit -1 vorbesetzt und ändert dann seinen Wert nicht. Nur in der IDE siehst du die exception, wenn du "bei Delphi exception anhalten" angewählt hast. Wenn du das Programm ohne IDE laufen lässt oder die Option ausschaltest, läuft das Programm ohne Probleme. Prüfe nach dem try ... except ... end Block einfach den Wert von maxID, ist er -1, so ist kein Datensatz vorhanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.

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