Entwickler-Ecke

Datenbanken - Datenbank mit einer Schleife ändern


Robby - So 04.12.05 23:34
Titel: Datenbank mit einer Schleife ändern
Hei ich möchte eine Datenbank mit einer Schleife ändern hier mein Code,
aber der funzelt nicht. Kann mir Jemand Helfen.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 begin
 Data.Table.first; 
while Not Data.Table.EOF do  begin

if Data.Table.fieldByName('pos').AsString = Edit14.text then
  data.Table.Active:= true;
Data.Table.edit;
Data.Table.fieldByName('pos').AsString := Edit15.text ;
 Data.Table.post;
Data.Table.next;
end;
      end;
//  Data.TableStueckliste.CancelRange;
   // Data.TableStueckliste.Refresh;
end;
end.


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.


smiegel - Mo 05.12.05 09:06

Hallo,

so sollte es gehen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
begin  
  with Data.Table do
  begin
    First;   
    while not EOF do 
    begin
      // da die Tabelle bereits aktiv ist, ist dieser Aufruf überflüssig >data.Table.Active:= true<
      // nur Datensätze ändern, deren Kriterium zutrifft.
      if (FieldByName('pos').AsString=Edit14.Text) then  
      begin
        Edit;  
        FieldByName('pos').AsString:=Edit15.Text;  
        Post;  
      end// if
      Next;  
    end// while
  end; / with Data.Table
end;


Robby - Mo 05.12.05 20:09

Habe dein Quelltext ausprobiert, aber leider hatte ich keinen Erfolg.
Bei mehreren versuchen änderte sich nur ein Feld und manchmal alle aber überwiegend nur ein Feld.
Gruß Robby


stifflersmom - Mo 05.12.05 20:15

Der Code von Smiegel sieht an sich gut aus...

Du solltest mal Deinen gesamten Quelltext hier posten,
allgemein sind die Glaskugeln in letzter Zeit ziemlich unzuverlässig...

Moin


Robby - Mo 05.12.05 20:27

Hier mein Quelltext.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm5.Button4Click(Sender: TObject);
begin
  with Data.TableLager do
  begin
   First;
    while not EOF do
    begin
      // nur Datensätze ändern, deren Kriterium zutrifft.
      if (FieldByName('pos').AsString=Edit14.Text) then
        begin
        Edit;
        FieldByName('pos').AsString:=Edit15.Text;
        Post;
      end;
      Next;
    end;
  end;
ShowMessage('Die Änderungen wurden erfolgreich in der Datenbank abgespeichert.');
end;


stifflersmom - Mo 05.12.05 20:38

Zitat:
Bei mehreren versuchen änderte sich nur ein Feld und manchmal alle aber überwiegend nur ein Feld.


Also, laut Deinem Code KANN sich auch nur ein Feld ändern, das Feld heißt bei Dir "pos".
Allerdings sollten sich in jedem Datensatz das Feld "pos" ändern wenn Die Bedingungen werfüllt sind, der Code sieht immer noch gut aus.
Vielleicht spielt der Cache Deines Rechners (oder der BDE) einen Streich.
Starte mal das Programm, laß es durch laufen, beende es und schaue dann mal mit der Datenbankoberfläche in die Tabelle rein und bestimme dann abschließend, ob nicht doch alle relevanten Datensätze verändert wurden.

Wenn es denn tatsächlich am Cache liegt, schau mal unter FlushBuffers nach, könnte Dir weiter hefen.

Moin


Robby - Mo 05.12.05 21:26

Hurra, :lol: es funzelt ich habe eine neue Table-Komponente genommen.
Danke an alle für Eure Geduld.
Robby. :D