Autor Beitrag
gamoes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86



BeitragVerfasst: Mo 29.12.08 16:47 
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:

ausblenden 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 user profile iconGausi: Delphi-Tags hinzugefügt
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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:

ausblenden 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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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.
ausblenden 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. ;-)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 29.12.08 17:48 
Versuch es mal so (ungetestet):
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 16



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 30.12.08 19:09 
Funktioniert der Code von user profile iconDeddyH denn? So ungefähr hätte ich vermutet, dass es klappt. :-)
gamoes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 16



BeitragVerfasst: Di 30.12.08 20:26 
Einen Schönen Abend Gamoes,

ein Struktogramm (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 (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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86



BeitragVerfasst: Di 30.12.08 20:27 
Ja der funktioniert.

Gruß
gamoes

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Funktioniert der Code von user profile iconDeddyH denn? So ungefähr hätte ich vermutet, dass es klappt. :-)