AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit Zähler in For-Schleife (gelöst)

Problem mit Zähler in For-Schleife (gelöst)

Ein Thema von JannesDKS · begonnen am 20. Apr 2010 · letzter Beitrag vom 20. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2   
JannesDKS

Registriert seit: 2. Feb 2009
Ort: Hamburg
61 Beiträge
 
#1

Problem mit Zähler in For-Schleife (gelöst)

  Alt 20. Apr 2010, 16:00
Hallo,

ich habe ein kleines Problem mit einer For-Schleife. Sie befindet sich in dem Before-Post eines Datasets.

Delphi-Quellcode:
  for i := 1 to DataSet.FieldCount do
  begin
    if DataSet.Fields.FieldByNumber(i).FieldName = 'DONEthen
    begin
      if DataSet.Fields.FieldByNumber(i).NewValue<> DataSet.Fields.FieldByNumber(i).oldValue then CheckCertified := False;
    end else
    begin
      if DataSet.Fields.FieldByNumber(i).NewValue<> DataSet.Fields.FieldByNumber(i).oldValue then CheckCertified := True;
    end;
  end;
Fieldcount ist 68, aber nach 60 geht i wieder auf 0. bitte erleuchtet mich mit eurer Weisheit
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:02
Eigentlich müsste es
for i := 0 to DataSet.FieldCount-1 do heissen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:03
Jup, so sollte es eigentlich sein. Aber bei dem gegebenen Code müsste dann ja eine Exception auftreten, oder? Und nicht der beschrieben Fehler, den ich mal mehr als strange finde.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
JannesDKS

Registriert seit: 2. Feb 2009
Ort: Hamburg
61 Beiträge
 
#4

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:04
ich dachte, das fieldbynumber auch mit 1 anfängt. bei 0 gibt er auf jeden fall eine Zugriffsverletzung an.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:18
Dein Code ist sehr umständlich. Die Lösung heisst Zwischenvariable:
Delphi-Quellcode:
var
  f : TField;
begin
  CheckCertified := False; // sollte nicht fehlen, da CheckCertified ansonsten undefiniert sein könnte
  for i := 1 to DataSet.FieldCount-1 do
  begin
    f := Dataset.Fields[i];
    if f.FieldName = 'DONEthen
    begin
      if f.NewValue<> f.oldValue then CheckCertified := False;
    end else
    begin
      if f.NewValue<> f.oldValue then CheckCertified := True;
    end;
  end;
Damit ist die Sache schon viel übersichtlicher.
Dann gibt es noch einen logischen Fehler.
Die Variable CheckCertified kann bei jedem Feld neu gesetzt werden.
Das letzte veränderte Feld entscheidet über den Inhalt von CheckCertified.
Es ist also wichtig, an welcher Feldposition das Feld 'DONE' steht.
Aber das willst du sicher nicht, oder?
Andreas
  Mit Zitat antworten Zitat
JannesDKS

Registriert seit: 2. Feb 2009
Ort: Hamburg
61 Beiträge
 
#6

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:20
ah ich hab's =

Zitat:
Mit FieldByNumber können Sie Feldinformationen für ein Feld abrufen, von dem nur die Feldnummer bekannt ist. Beachten Sie bitte, dass die Feldnummer die Position des Feldes in der zugrunde liegenden Datenbanktabelle angibt, nicht den Index des Feldes in dem TFields-Objekt.
in der Delphi-Hilfe steht's klar drin. Trotzdem Danke für die Antworten
  Mit Zitat antworten Zitat
JannesDKS

Registriert seit: 2. Feb 2009
Ort: Hamburg
61 Beiträge
 
#7

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:23
hey shmia, das ist kein logischer Fehler, sondern so gewollt. Wenn zum Beispiel Done und(!) ein anderes Feld geändert wurden, dann soll das Result True sein. Ansonsten hättest du natürlich recht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:24
Falls ich die Logik richtig verstanden habe:
Delphi-Quellcode:
var
  f : TField;
begin
  CheckCertified := true; //Standardwert festlegen
  for i := 1 to DataSet.FieldCount-1 do
  begin
    f := Dataset.Fields[i];
    if f.FieldName = 'DONEthen
      CheckCertified := f.NewValue<> f.oldValue;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
JannesDKS

Registriert seit: 2. Feb 2009
Ort: Hamburg
61 Beiträge
 
#9

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:28
Danke, das sieht gut aus, besser als meins. FieldbyNumber war der Hauptfehler. hab ich grad schon gemerkt. der Fields[i] ist das wahre.
Probier ich gleich mal aus
  Mit Zitat antworten Zitat
JannesDKS

Registriert seit: 2. Feb 2009
Ort: Hamburg
61 Beiträge
 
#10

Re: Problem mit Zähler in For-Schleife

  Alt 20. Apr 2010, 16:44
So, ich denk ich hab's. Vielen Dank nochmal.

wen's interessier hier nochmal Die Lösung:

Delphi-Quellcode:
Fieldcount := DataSet.FieldCount;
  for i := 0 to FieldCount-1 do
  begin
    f := Dataset.Fields[i];
    if (f.FieldName = 'DONE')
    or (f.FieldName = 'DOCUMENT_NAME')
    or (f.FieldName = 'REFERENCE')
    or (f.FieldName = 'CONTACT_NAME')
    or (f.FieldName = 'REMINDER_DATE')
    or (f.FieldName = 'REMARKS_ACTION') then
    begin
      if f.NewValue<> f.oldValue then EditableField := True;
    end else
    begin
      if f.NewValue<> f.oldValue then NotEditableField := True;
    end;
  end;

  if not ((EditableField = true) and (NotEditableField = False)) then
  begin
....
Der Sinn war halt, dass nur bestimmte Felder in einer zertifizierten Periode geändert werden können sollen. Sogesehen hatte shmia doch recht und ich hab das mit dem Logikfehler nicht richtig durchschaut. Asche auf mein Haupt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz