AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variable ist plötzlich anders

Ein Thema von H.Bothur · begonnen am 6. Jun 2017 · letzter Beitrag vom 7. Jun 2017
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#21

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 17:30
Sicher, dass sich der Inhalt ändert, oder zeigt der Debugger nur nicht mehr das Richtige an?
Inhalt manuell irgendwo ausgeben (Logdatei, ShowMessage, ...)

Zitat:
(* Kann eigentlich nicht vorkommen :-D *)
Doch, wenn die Nummer nicht im Grid vorkommt.

eigentlich wollte ich ja wenn das hier läuft das ganze mal mit TTable umsetzen.
Wenn es dann läuft, willst du dann erstmal alles erstmal wieder umbauen und kaputt machen?

Statt TTable kannst'e auch ein TClientDataSet (MemoryTable) verwenden, wenn noch keine Datenbank vorhanden ist.
Und schon kannst'e auch schön mit Locate im DataSet suchen lassen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#22

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 17:32
Dann muss wohl irgendwas mit Kundenummer geschehen. Du sagtest, es gibt die variable nur einmal.
Benenne sie im Prozedurkopf trotzdem mal um und teste das.

Eine andere wahrscheinlich dumme Idee, nur zum testen:
deklariere mal eine lokale string-Variable und weise ihr VOR der for-Schleife "Kundennummer" zu. Du vergleichst dann auf diese neue string-Variable und nicht mehr auf Kundennummer.

Geändert von SneakyBagels ( 6. Jun 2017 um 17:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#23

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:54
Kundennummer ist ein Parameter der Methode,
also selbst wenn jemand zwischendurch außerhalb eine Variable ändert, die zu Beginn an diesen Parameter übergeben wurde, darf sich niemals der Wert dieses Parameters ändern, außer jemand ändert ihn innerhalb dieser Methode, was hier ja angeblich nicht gemacht wird.

Also ein Umkopieren in eine weitere lokale Variable sollte hier nichts bringen, vorallem da es sich am Ende um die selbe String-Referenz handelt.



Einzige Ausnahme für das NIEMALS: BufferOverflow oder Dergleichen. Danach sieht es in dem gezeigten Code aber auch nicht aus.


Änderung innerhalb der Methode könnte man auch mal so ausschließen:
procedure TUKunden.FirstKundenSuchen(const KundenNummer: String; var KName1, ...
Wenn das nichts bringt, dann bleiben nur 2 mögliche Problemstellen.
* der Compiler zeigt etwas Falsches an und das Programm arbeitet dennoch korrekt (prüfen siehe mein vorheriger Post)
* du hast ein massives Speicherproblem und jemand (du) überschreibt irgendwo willkürlich deinen RAM. (aber schon komisch, dass dabei rein zufällig ein "korrekter" String mit einer schönen "Nummer" als Text entsteht)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#24

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 18:55
Zitat:
* der Compiler zeigt etwas falsches an und das Programm arbeitet dennoch korrekt (prüfen siehe mein vorheriger Post)
Ich schlage ganz plump einfach mal vor den Inhalt von "Kundennummer" mit einer Showmessage anzuzeigen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#25

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 19:06
Zitat:
* der Compiler zeigt etwas falsches an und das Programm arbeitet dennoch korrekt (prüfen siehe mein vorheriger Post)
Ich schlage ganz plump einfach mal vor den Inhalt von "Kundennummer" mit einer Showmessage anzuzeigen.
Hatte ich auch schonmal im ersten Post vorgeschlagen.

Aber gerade aufgrund des Types hätte ich eher erwartet, dass er dann garnichts, bzw. eine Fehlermeldung anzeigt, als rein zufällig einen "anderen" String, den er scheinbar problemlos auslesen konnte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#26

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 20:23
Zitat:
Hatte ich auch schonmal im ersten Post vorgeschlagen.
Manchmal sind eben die dümmsten Vorgehensweisen die besten. Aber irgendwie habe ich den Eindruck, dass dieser Thread hier wieder ein sich selbst am Leben erhaltender Thread wird.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#27

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 20:27
Delphi-Quellcode:
procedure TUKunden.FirstKundenSuchen(KundenNummer: String; var KName1, KName2, KStrasse, KLand, KPLZ, KOrt, KTelefax, KEmail, KVertreter, KRnEmail: String);
var
   i: Integer;
begin
   for i := 0 to UKunden.KundenSpeicherSG.RowCount -1 do
   begin
     if (KundenNummer = UKunden.KundenSpeicherSG.Cells[CKundenNr, i]) then [COLOR="Red"]// <- hier wird nach Kundennummer 12652 gesucht[/COLOR]
     begin
       if (UKunden.KundenSpeicherSG.Cells[CKundenRNAnschrift, i] = (UKunden.KundenSpeicherSG.Cells[CKundenLfdNr, i])) then [COLOR="Red"]// -< und hier ist der Inhalt von KundenNummer plötzlich 14109[/COLOR]
       begin
         KName1 := UKunden.KundenSpeicherSG.Cells[CKundenName1, i];
         KName2 := UKunden.KundenSpeicherSG.Cells[CKundenName2, i];
         KStrasse := UKunden.KundenSpeicherSG.Cells[CKundenStr, i];
         KLand := UKunden.KundenSpeicherSG.Cells[CKundenLand, i];
         KPLZ := UKunden.KundenSpeicherSG.Cells[CKundenPLZ, i];
         KOrt := UKunden.KundenSpeicherSG.Cells[CKundenOrt, i];
         KTelefax := UKunden.KundenSpeicherSG.Cells[CKundenTelefax, i];
         KEmail := UKunden.KundenSpeicherSG.Cells[CKundenEMail, i];
         KVertreter := UKunden.KundenSpeicherSG.Cells[CKundenVertreter, i];
         KRnEmail := UKunden.KundenSpeicherSG.Cells[CKundenRnEMail, i];
         exit;
       end;
     end;
   end;
   KName1 := 'Keine Daten gefunden ! '; (* Kann eigentlich nicht vorkommen :-D *)
end;
Delphi-Quellcode:
procedure IchBinKomisch(KundenNummer: String; var Rueckgabewert: String);
var
   i: Integer;

begin
   for i := 0 to UKunden.KundenSpeicherSG.RowCount -1 do
   begin
     if (KundenNummer = StringGrid[1, i]) then
     begin
       if (StringGrid[2, i] = (StringGrid[3, i])) then
       begin
         Rueckgabewert := 'Gefunden';
         exit;
       end;
     end;
   end;
   Rueckgabewert := 'Keine Daten gefunden ! '; (* Kann eigentlich nicht vorkommen :-D *)
end;
Die beiden Routinen sind überhaupt nicht gleich, es besteht allerhöchstens eine oberflächliche Ähnlichkeit.
Die erste ist Teil einer Klassendefinition, die zweite ist "unabhängig".
In der ersten sollten alle UKunden durch self ersetzt werden.
Ebenso sollte procedure TUKunden.FirstKundenSuchen(KundenNummer: String; var.... durch procedure TUKunden.FirstKundenSuchen(const KundenNummer: String; var.... ersetzt werden.
in der zweiten wird die Laufvariable durch UKunden.KundenSpeicherSG.RowCount -1 begrenzt und auf StringGrid[1, i] zugegriffen. Das ist zumindest ungewöhnlich. Woher kommt "Stringgrid" ?

Gruß
K-H

P.S.
Sind die üblichen Prüfungen (Bereich etc.) aktiviert?
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
252 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: Variable ist plötzlich anders

  Alt 6. Jun 2017, 20:46
Zitat:
Hatte ich auch schonmal im ersten Post vorgeschlagen.
Manchmal sind eben die dümmsten Vorgehensweisen die besten. Aber irgendwie habe ich den Eindruck, dass dieser Thread hier wieder ein sich selbst am Leben erhaltender Thread wird.
Sorry - wird es nicht - ich bin ja selber an der Lösung interessiert !! Aber manchmal fordert die bessere Hälfte auch ihr Recht - und das war heute unser Dorfgrieche

Ich schreib morgen zu dem ganzen anderen Rest und teste mal die verschiedenen Tips aus !

Gruß und Gute Nacht
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
252 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 08:02
Wenn ein String-Parameter innerhalb der Methode nicht verändert werden soll, vereinbart man den am besten als "const"-Paramter. ... Für die Rückgabe kann man zwar "var"-Parameter verwenden, aber eigentlich sollten es hier "out"-Parameter sein.
Blöde gefragt - demzufolge sollte man immer entweder const, out oder var in den Methodenkopf schreiben ? Und "schlichte"
procedure IchTuWas(XYZ: String); gar nicht schreiben ?

Wie dem auch sei - das habe ich entsprechend umgesetzt und alle Aufrufe entsprechend gemacht.
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Variable ist plötzlich anders

  Alt 7. Jun 2017, 08:28
Mit der Angabe von Const kann der Parameter auch innerhalb der Procedure/Function nicht verändert werden. Außerdem kann der Compiler besser optimieren.

Etwas ausführlicher:
Delphi-Hilfe
Peter

Geändert von Jasocul ( 7. Jun 2017 um 08:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 09:35 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