Autor |
Beitrag |
Andi1982
      
Beiträge: 497
WinXP HE
D6 Enterprise
|
Verfasst: 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:
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
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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 
      
Beiträge: 497
WinXP HE
D6 Enterprise
|
Verfasst: 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
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Mi 14.05.03 20:58
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: 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:
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
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: 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 
      
Beiträge: 497
WinXP HE
D6 Enterprise
|
Verfasst: Do 15.05.03 07:07
Ok, also das ist mir jetzt soweit klar!
Aber nochmal angenommen ich hab folgenden Select:
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
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Do 15.05.03 08:35
Du kannst in Deinem SQL-Code auch die Spalten benennen, dann ist ein Zugriff à la
Delphi-Quelltext 1:
| variable:=Query1.FieldByName('MeinFeld').AsString; |
Dazu musst Du nur Folgendes schreiben:
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
Gruß
|
|
Andi1982 
      
Beiträge: 497
WinXP HE
D6 Enterprise
|
Verfasst: 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
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: 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 
      
Beiträge: 497
WinXP HE
D6 Enterprise
|
Verfasst: 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...
|
|