AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBASE Datenbunk aktualisieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBASE Datenbunk aktualisieren

Ein Thema von conny drexler · begonnen am 22. Okt 2005 · letzter Beitrag vom 23. Okt 2005
 
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#8

Re: DBASE Datenbunk aktualisieren

  Alt 23. Okt 2005, 12:39
Moin conny drexler!

1. Ist das, die richtige Syntax???
datamodule1.Table1LAGERBEST.AsFloat Oder sollte es so sein:

datamodule1.Table1.FieldByName('LAGERBEST').AsFloat 2.Für bessere Lesbarkeit, benutze die "with" Anweisung:
z.B. statt:

Delphi-Quellcode:
DataModule1.Table1.First;
DataModule1.Table1.Next;
DataModule1.Table1.Edit;
DataModule1.Table1.FieldByName('VORNAME').AsString := 'John';
DataModule1.Table1.Post;
schreib:

Delphi-Quellcode:
with DataModule1.Table1 do
begin
  First;
  Next;
  Edit;
       
  FieldByName('VORNAME').AsString := 'John';
  Post;       
end;
3. Falls der gesuchte Artikel im ersten Record deiner Table1 ist, dann findest du ihn nicht!
Weil:

Delphi-Quellcode:
...
datamodule1.Table1.First;       <- hier wird auf den ersten Record in der Table1 positioniert
gefunden := false;
          
while (not(datamodule1.Table1.Eof)) or
(datamodule1.Table1ARTIKELNUM.asfloat = rechnungszeile.artikel.Artikelnummer) do
Begin
  datamodule1.table1.Next;      <- hier wird der erste Record übersprungen ohne ihn zu prüfen <- und "gefunden" bleibt "false"
  if datamodule1.Table1ARTIKELNUM.asfloat = rechnungszeile.artikel.Artikelnummer then
  gefunden := true;
end;       
...
4. Die Abbruchbedingung „datamodule1.Table1ARTIKELNUM.asfloat = rechnungszeile.artikel.Artikelnummer“ in der while-Schleife hat keinen Sinn. Die „while“-Schleife wird für jeden in der Table1 gefundenen Record gemacht. Und das unabhängig von Artikelnummern, weil wenn einen Record gefunden wird, ist „not EOF“ true.

Also „while not datamodule1.Table1.Eof“ ist auf dieser Stelle vollkommen ausreichend.

5. Brauchst du die Variable "gefunden" auf einer anderen Stelle in deinem Programm? Wenn nicht, dann ist sie ueberflussig:

Und statt:

Delphi-Quellcode:
Begin
  datamodule1.Table1.First;
  gefunden := false;
  while (not(datamodule1.Table1.Eof)) or
  (datamodule1.Table1ARTIKELNUM.asfloat = rechnungszeile.artikel.Artikelnummer) do
  Begin
    datamodule1.table1.Next;
    if datamodule1.Table1ARTIKELNUM.asfloat = rechnungszeile.artikel.Artikelnummer then
      gefunden := true;
    end;
    if gefunden then
    Begin
      datamodule1.Table1.Edit;
      datamodule1.Table1LAGERBEST.AsFloat := datamodule1.Table1LAGERBEST.AsFloat - rechnungszeile.anzahl;
              datamodule1.Table1.Post;
    end;
  end;
end;
Kannst du so schreiben:

Delphi-Quellcode:
Begin
datamodule1.Table1.First;
          
while (not(datamodule1.Table1.Eof)) or
(datamodule1.Table1ARTIKELNUM.asfloat = rechnungszeile.artikel.Artikelnummer) do
Begin
  datamodule1.table1.Next;
                
  if datamodule1.Table1ARTIKELNUM.asfloat = rechnungszeile.artikel.Artikelnummer then
  begin
    datamodule1.Table1.Edit;
    datamodule1.Table1LAGERBEST.AsFloat := datamodule1.Table1LAGERBEST.AsFloat - rechnungszeile.anzahl;
    datamodule1.Table1.Post;
  end;
end;
6. An deiner Stelle würde ich den Ratschlägen von marabu und Union folgen.

Viele Grüße
Markus
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz