Autor Beitrag
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 14.05.03 20:13 
Ok, ich weiss das ist eine absolute Anfängerfrage, aber irgendwie finde ich kein Tutorial in dem die Querys richtig erklärt sind.

Und zwar führe ich folgenden Qery aus:
ausblenden Delphi-Quelltext
1:
2:
3:
Query1.SQL.Clear;
Query1.SQL.Text := 'Select max(Lied_ID) From lieder.db';
Query1.ExecSQL;

Jetzt würde ich gerne die Lied_ID um eins erhöhen und die neue ID dann beim nächsten insert verwenden, aber wie komme ich da ran??

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Mi 14.05.03 20:39 
Mach aus dem Feld ID einfach ein Primären Index mitsamt Auto_INC, dann brauchst du das bei einem Insert nicht per Hand zu erhöhen, sondern er zählt automatisch weiter.
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 14.05.03 20:44 
ja ok, das ist auch eine Möglichkeit. Aber trotzdem wüßte ich gerne wie ich an die selektierte ID herankomme.

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Mi 14.05.03 20:58 
ausblenden Delphi-Quelltext
1:
showmessage(Query1.Fields[0].AsString);					

Oder, wenn mehr als ein Ergebnis im Query ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
while not Query1.EOF do begin
  ShowMessage(Query1.FieldByName('MeinFeld').AsString);
  Query1.Next;
end;
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mi 14.05.03 22:18 
erstens fällt mir auf, du führst deinen SQL-Text mit

Query.ExecSQL

aus. Ob's funktioniert, kann ich nicht beurteilen, weil ich es nie so mache. Warum? Weil doch dafür

Query.Open

gedacht ist, oder?

und ob das:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
while not Query1.EOF do begin 
  ShowMessage(Query1.FieldByName('MeinFeld').AsString); 
  Query1.Next; 
end;


so praktisch ist.... :?
Was ist wenn die Ergebnis-Menge an die 100 Datensätze hat? Öffnen sich dann nicht 100 Messages?

mfg[/delphi]
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Mi 14.05.03 22:24 
Die 4 Zeilen sollten nicht praktisch sein, sondern nur das Prinzip verdeutlichen.
Und richtig, es muss Query1.Open heißen.
Bei Select immer .Open und wenn was geändert wird (Update, Insert, Delete usw), dann ExecSQL.
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 15.05.03 00:42 
;)

aber reicht nicht auch schon ein DBEdit-Feld, bzw. ein DBGrid? Dann brauch er sich darum keine Gedanken machen....

aber wurscht.. wollt mich nich groß einmischen....
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Do 15.05.03 07:07 
Ok, also das ist mir jetzt soweit klar!

Aber nochmal angenommen ich hab folgenden Select:
ausblenden Delphi-Quelltext
1:
2:
3:
Query1.SQL.Clear; 
Query1.SQL.Text := 'Select max(Lied_ID) From lieder.db'
Query1.Open;

Dann habe ich ja nicht direkt ein Feld meiner Tabelle sondern nur eine Ergebnistabelle mit nur einer zeile und einer spalte. wo meinetwegen 15 oder so drinsteht.

Dann kann ich ja nicht Query1.FieldByName('MeinFeld') verwenden weil ich MeinFeld ja keinen Namen zugewiesen habe.

Hat vielleicht irgendjemand was wo die ganze SQL-Syntax beschrieben ist? Hab eigentlich gedacht man mach in Delphi auch einfach einen "Select into" in ein Programmvariable und kann dann damit machen was man will. So läufts bei uns im Gechäft jedenfalls (DB2).

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 15.05.03 08:35 
Du kannst in Deinem SQL-Code auch die Spalten benennen, dann ist ein Zugriff à la
ausblenden Delphi-Quelltext
1:
variable:=Query1.FieldByName('MeinFeld').AsString;					


Dazu musst Du nur Folgendes schreiben:
ausblenden Delphi-Quelltext
1:
Query1.SQL.Text := 'Select max(Lied_ID) as MeinFeld From lieder.db';					


Und wenn Du ein Buch brauchst, dann hol Dir "Interbase -Dantebank entwicklung mit Delphi" vom Software & Support - Verlag. Das is ziemlich gut, hab ich auch hier rumstehen :wink:

Gruß
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Do 15.05.03 08:40 
Ja ok,
ich glaub jetzt kann ich das nötigste. Was SQL-Syntax betrifft bin ich eigentlich fast schon Profi, aber auch nur im DB2-System. Dachte eigentlich dass SQL in den verschiedenen Datenbanken trotzdem immer die gleiche Syntax hat.

Also seid schonmal auf meine nächsten Probleme gespannt!

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 15.05.03 09:21 
Hallo,

Du musst nicht unbedingt die Eigenschaft FieldbyName verwenden.

Bei deinem Select statement steht der wert auch in

LQuery.Fields[0].AsInteger;

und das buch, das Ugrohne ist echt sehr gut. Habe ich auch.

Gruß
ken
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Do 15.05.03 09:27 
Ja, danke, ich glaub jetzt ist mirs wirklich klar.

@Alibi: Ein AUTO_inc will ich nicht benutzen da es vorkommen kann dass der letzte satz wieder gelöscht wird und ich aber eine durchgehende nummerierung will.

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...