Entwickler-Ecke
Datenbanken - Mit Schleife Datenbanktebelle füllen
gamoes - Mo 29.12.08 16:47
Titel: Mit Schleife Datenbanktebelle füllen
Hallo,
ich möchte eine Tabelle mit Nummern füllen, beginnend mit der Nummer, die der Anwender ein ein edit-Feld einträgt und endend mit der die der Anwender in ein anderes Edit-Feld einträgt.
Dafür habe ich folgenden Quelltext geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure Tfrm_Garderobe.bt_DruckClick(Sender: TObject); var i: Integer; sqlstring: String; begin while ds_Garderobe.DataSet.Eof do begin for i:= StrToInt(ed_ErsteNr.Text) to StrToInt(Ed_LetzteNr.Text) DO ds_Garderobe.DataSet.Next; end; qry_GardNr.Active:=True; qry_GardNr.SQL.Clear; sqlstring:=('INSERT INTO gardnr(gnr, vdate) VALUES(:i,:dt)'); qry_GardNr.SQL.Add(sqlstring); qry_GardNr.ParamByName('i').AsInteger:=i; qry_GardNr.ParamByName('dt').AsDate:=dt_Datum.Date; ShowMessage(sqlstring); qry_GardNr.ExecSQL; qry_GardNr.Active:=False; end; |
Doch leider wird nur eine einzige Nummer in die Datenbank geschrieben.
Was hab ich da falsch gemacht.
Vielen Dank für Eure Hilfe
Gruß
Gabi
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Hidden - Mo 29.12.08 17:13
Hi :)
Zuerstmal delphi-tags verwenden und den Source noch etwas formatieren :zwinker:
Und dann.. ich glaube da höre ich schon auf: fehlt bei der while-Schleife nicht ein
not? Die soll wohl
bis zum Dateiende laufen? :gruebel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure Tfrm_Garderobe.bt_DruckClick(Sender: TObject); var i: Integer; sqlString: String; begin while ds_Garderobe.DataSet.Eof do begin for i:= StrToInt(ed_ErsteNr.Text) to StrToInt(Ed_LetzteNr.Text) do ds_Garderobe.DataSet.Next; end; qry_GardNr.Active := true; qry_GardNr.SQL.Clear;
sqlString:=('INSERT INTO gardnr(gnr, vdate) VALUES(:i,:dt)'); qry_GardNr.SQL.Add(sqlstring); qry_GardNr.ParamByName('i').AsInteger := i; qry_GardNr.ParamByName('dt').AsDate := dt_Datum.Date; ShowMessage(sqlString); qry_GardNr.ExecSQL; qry_GardNr.Active := false; end; |
mfG,
jaenicke - Mo 29.12.08 17:14
Du hast ja schon ein paar Beiträge hier geschrieben, es wäre schön, wenn du dann auch mal die Delphi-Tags benutzt, das macht deinen Quelltext leichter lesbar ;-).
Zum Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| while ds_Garderobe.DataSet.Eof do begin for i:= StrToInt(ed_ErsteNr.Text) to StrToInt(Ed_LetzteNr.Text) DO ds_Garderobe.DataSet.Next; end; qry_GardNr.Active:=True; qry_GardNr.SQL.Clear; sqlstring:=('INSERT INTO gardnr(gnr, vdate) VALUES(:i,:dt)'); qry_GardNr.SQL.Add(sqlstring); qry_GardNr.ParamByName('i').AsInteger:=i; qry_GardNr.ParamByName('dt').AsDate:=dt_Datum.Date; ShowMessage(sqlstring); qry_GardNr.ExecSQL; |
Du führst den Befehl INSERT nur einmal aus. Die Einrückung wie ich sie jetzt habe verdeutlicht das vielleicht. Deine for-Schleife enthält nur eine Zeile. ;-)
Und deine While-Schleife? Was möchtest du damit erreichen? :gruebel:
Du müsstest deine for-Schleife um alles herum setzen, damit der INSERT-Befehl mit den verschiedenen Zahlen nacheinander mehrfach ausgeführt wird.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for i:= StrToInt(ed_ErsteNr.Text) to StrToInt(Ed_LetzteNr.Text) do begin qry_GardNr.Active:=True; qry_GardNr.SQL.Clear; sqlstring:=('INSERT INTO gardnr(gnr, vdate) VALUES(:i,:dt)'); ... end; |
Das sollte dann gehen denke ich.
// EDIT:
Aber ich vermute es genügt auch in der Schleife den Parameter zu ändern. Allerdings kenne ich mich da auch nicht so gut aus in Datenbanken UND Delphi, nur einzeln. ;-)
Delete - Mo 29.12.08 17:48
Versuch es mal so (ungetestet):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure Tfrm_Garderobe.bt_DruckClick(Sender: TObject); var i: Integer; begin qry_GardNr.Close; qry_GardNr.SQL.Text := 'INSERT INTO gardnr(gnr, vdate) VALUES(:i,:dt)'; for i:= StrToInt(ed_ErsteNr.Text) to StrToInt(Ed_LetzteNr.Text) DO begin qry_GardNr.ParamByName('i').AsInteger:=i; qry_GardNr.ParamByName('dt').AsDate:=dt_Datum.Date; qry_GardNr.ExecSQL; end; end; |
Oreaden - Mo 29.12.08 19:28
Guten Abend gamoes,
leider verstehe ich deine Code nicht, oder genauer gesagt, was dieser tun soll. Wäre es Dir möglich eine Struktogramm anzuhängen was hier ausgeführt werden sollte. Danke.
OREADEN
gamoes - Di 30.12.08 19:06
Hallo OREADEN,
mein Programm soll beim Click auf Drucken eine Zahlenreihe erzeugen und zwar beginnend bei der Zahl, die im ed_GardNrStart angegeben und endend mit der Nummer die im ed_GardNrEnd angegeben ist. Diese Zahlenreihe soll in die Datenbank geschrieben werden, damit ich sie dann später im FastReport nutzen kann.
Bin leider nicht so fit in Delphi, deshalb weiß ich nicht genau, was Du mit Struktogramm meinst.
Gruß
Gamoes
jaenicke - Di 30.12.08 19:09
Funktioniert der Code von
DeddyH denn? So ungefähr hätte ich vermutet, dass es klappt. :-)
gamoes - Di 30.12.08 19:56
Vorab erst mal Danke an Euch alle.
Der Tip dass ich meine for-Schleife um alles herum setzen muss, hat mein Problem gelöst. Werde mich wohl auch noch genauer an die richtigen Einrückungen halten müssen.
Gruß
gamoes
Oreaden - Di 30.12.08 20:26
Einen Schönen Abend Gamoes,
ein Struktogramm (
http://de.wikipedia.org/wiki/Struktogramm) hat nichts mit Delphi zu tun, sondern dient zur Strukturierung des Problems, ganz unabhängig von der Programmiersprache. Ein solches sollte man für jedes nicht triviale Problem anfertigen, damit man einfach den Algorithmus (
http://de.wikipedia.org/wiki/Algorithmus) der sich dahinter verbirgt, versteht und zu Papier bringt. Ist auch ganz gut zur Kommunikation mit anderen Gesprächspartnern. Das schöne an den Struktogramm ist dass einen relativ schnell die eigenen Fehler ins Auge fallen und man sie somit frühzeitig verbessern kann.
Noch einen schönen Abend
OREADEN
gamoes - Di 30.12.08 20:27
Ja der funktioniert.
Gruß
gamoes
jaenicke hat folgendes geschrieben : |
Funktioniert der Code von DeddyH denn? So ungefähr hätte ich vermutet, dass es klappt. :-) |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!