Array Assign [ERLEDIGT]
Moderator: Moderatoren
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Array Assign [ERLEDIGT]
ein Kunde erhält beim Wareneingang nach auswahl der Bestellung die besagte Fehlermeldung. Einzelne WE aus dieser Bestellung gingen bisher ohne Probleme. Auch andere Bestellungen ohne Probleme.
Hat jemand eine idee ?
Hat jemand eine idee ?
Zuletzt geändert von Rolf Ramacher am Mo, 06. Aug 2012 14:07, insgesamt 1-mal geändert.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: Array Assign
Könnte an einem Programmfehler liegen.Hat jemand eine idee ?
Spaß beiseite. Wieder mal eine exzellent ausführliche Beschreibung der Fehlersituation, ergänzt um Informationen, die wir natürlich sofort verarbeiten können, weil wir a) alle mit Deinem Bestellsystem arbeiten und b) auch die Quellcodes davon haben.
"Array assign" ist vermutlich nicht der gesamte Fehlertext. Hilfreich wäre auch noch die Sourcecode-Zeile, in der der Fehler auftritt. Vermutlich aber versuchst Du an dieser Stelle, auf einen Bereich im Array zuzugreifen, der nicht existiert, etwa wie hier:
Code: Alles auswählen
a := { 1, 2, 3 }
? a[4] // dürfte den fraglichen Fehler generieren
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Array Assign
was für eine "auswahl" unter "Cl*pper" ?Rolf Ramacher hat geschrieben:ein Kunde erhält beim Wareneingang nach auswahl
gruss by OHR
Jimmy
Jimmy
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Array Assign
Code: Alles auswählen
for x = 1 to 34
z = (zz - 1) * 34 + x && z = Index von vmegr bezgl. Fil. + GrӇe
vmegr[z]=sumegr[x] && absoluter Index, alles auf eine Filiale
vmegrb[z]=sumegr[x] && verteilt
next
Aber wie gesagt nur bei dieser einen Bestellung. An den Daten kann ich nichts falsches erkennen.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Array Assign
Ich tippe darauf, das x oder z größer sind als die Arraylänge.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: Array Assign
Toller Tip, Jan. Zumal es überhaupt kein y gibt.
@Rolf:
1. Was enthält "zz"? Grundsätzlich und im Moment des Fehlers?
2. Bist Du sicher, dass "(zz - 1) * 34 + x" so richtig ist? Punktrechnung geht vor Strichrechnung. "zz - 1" würde zunächst mit 34 multipliziert werden, danach käme x hinzu. Falls "34 + x" zum Ergebnis von "zz - 1" addiert werden sollte, müsstest Du den letzten Term klammern.
Der Hase liegt sehr wahrscheinlich in 1. begraben. zz enthält einen Wert, der zu einem z führt, das außerhalb des Arrays zeigt - entweder 0 (Null) oder > Länge des Arrays. Eins von beidem.
@Rolf:
1. Was enthält "zz"? Grundsätzlich und im Moment des Fehlers?
2. Bist Du sicher, dass "(zz - 1) * 34 + x" so richtig ist? Punktrechnung geht vor Strichrechnung. "zz - 1" würde zunächst mit 34 multipliziert werden, danach käme x hinzu. Falls "34 + x" zum Ergebnis von "zz - 1" addiert werden sollte, müsstest Du den letzten Term klammern.
Der Hase liegt sehr wahrscheinlich in 1. begraben. zz enthält einen Wert, der zu einem z führt, das außerhalb des Arrays zeigt - entweder 0 (Null) oder > Länge des Arrays. Eins von beidem.
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Array Assign
Gnagnagna Hast ja Recht. Nehmen wir also statt y ein z.Tom hat geschrieben:Toller Tip, Jan. Zumal es überhaupt kein y gibt.
Aber grundsätzlich liegt es meiner Menung nach daran, das eine der beiden Varibalen einen Wert enthält, der nicht ein Arrayelement ansprechen kann. Ob das jetzt ein zu hoher Wert ist, oder 0, oder sonstwas, ist dann auch egal.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Array Assign
Ich schließe mich Jan an und vermute, dass durch Rundungsfehler z.B. mehr als 34 oder weniger als 1 rauskommt die Indexwerte überschritten werden.
Hier wäre ein MAX() und MIN() eine gute Idee
Hier wäre ein MAX() und MIN() eine gute Idee
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: Array Assign
Die bessere Idee wäre, so zu programmieren, dass das nicht auftreten kann. Immerhin scheinen die Arraydaten ja irgendwie zu den "zz"-Werten zu gehören. Baut man jetzt Begrenzungsmechanismen für seltsame Fehlersituationen ein, vermeidet man zwar möglicherweise diesen Fehler, aber zugleich riskiert man, mit inhaltlich falschen Daten zu arbeiten.Hier wäre ein MAX() und MIN() eine gute Idee
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Array Assign
Hallo Tom,
gerade weil oben der Indexwert z berechnet wird, halte ich die Begrenzung auf die möglichen Arraygrenzen für sehr sinnvoll.
Das meinte ich mit min() und max(), aber natürlich kann man dieses auch anders erreichen.
gerade weil oben der Indexwert z berechnet wird, halte ich die Begrenzung auf die möglichen Arraygrenzen für sehr sinnvoll.
Das meinte ich mit min() und max(), aber natürlich kann man dieses auch anders erreichen.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Array Assign
ich versuche mal einen anderen Weg und gehe davon aus das deine Berechnungen doch stimmen dann wäre wieder die Frage was anAber wie gesagt nur bei dieser einen Bestellung.
An den Daten kann ich nichts falsches erkennen.
"nur bei dieser einen Bestellung" anders ist ?
da du hier nach Filialen gehst würde ich mir mal "alles" von "der" Filiale ansehen ob dir etwas auffällt
auch würde ich "davor" und "danach" die Daten durchsehen denn die Fehlermeldung / Zeile muss nicht immer "exakt" stimmen ...
zur Fehlersuche, wenn du es nicht reproduzieren kannst, würde ich mit BEGIN / SEQUENCE / RECOVER arbeiten und die Fehler mit Var2Char() in ein Logfile schreiben
gruss by OHR
Jimmy
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: Array Assign
Hallo, Hubert.
Ich vermute, dass dieser Code von Rolf eindeutige Bedinungen/Voraussetzungen hat. Die Ermittlung irgendwelcher Werte aus dem Array ist vermutlich der umgekehrte Weg eines vorigen, der den Arrayindex überhaupt erst erzeugt hat. Ich habe x Positionen, aus denen ich etwas wählen kann, und speichere dann die Positionsnummer (den Index). Will ich wieder damit arbeiten (oder irgendwas anzeigen), ermittle ich aus dem Array der Positionen über meinen Indexwert wieder den dazu passenden Eintrag, was im gezeigten Code geschehen soll. Das ist wahrscheinlich eine vereinfachte Wiedergabe dessen, was da geschieht oder geschehen soll. Deshalb wären Bedingungen/Begrenzungen in dieser Abfrage bestenfalls Kosmetik; aus irgendeinem Grund referenziert ein gespeicherter Wert nicht mehr richtig auf das Array. Das kann daran liegen, dass ein Eintrag unerwarteterweise leer ist, also eine Null erzeugt, und einen Nulleintrag gibt es bei Arrays nicht. Oder es ist inzwischen ein Referenzeintrag gelöscht worden, das Array ist also kürzer als es im Moment war, als der zu speichernde Wert erzeugt wurde. Auch hier wäre mit einer Begrenzung ein Fehler zu vermeiden, aber der Rückgabewert wäre dann inhaltlich falsch. Und das wäre in meinen Augen bei einer Geschäftsanwendung noch schlimmer als ein Laufzeitfehler. Rolf muss also herausfinden, warum die Referenz nicht mehr stimmt, und daran arbeiten.
Ich vermute, dass dieser Code von Rolf eindeutige Bedinungen/Voraussetzungen hat. Die Ermittlung irgendwelcher Werte aus dem Array ist vermutlich der umgekehrte Weg eines vorigen, der den Arrayindex überhaupt erst erzeugt hat. Ich habe x Positionen, aus denen ich etwas wählen kann, und speichere dann die Positionsnummer (den Index). Will ich wieder damit arbeiten (oder irgendwas anzeigen), ermittle ich aus dem Array der Positionen über meinen Indexwert wieder den dazu passenden Eintrag, was im gezeigten Code geschehen soll. Das ist wahrscheinlich eine vereinfachte Wiedergabe dessen, was da geschieht oder geschehen soll. Deshalb wären Bedingungen/Begrenzungen in dieser Abfrage bestenfalls Kosmetik; aus irgendeinem Grund referenziert ein gespeicherter Wert nicht mehr richtig auf das Array. Das kann daran liegen, dass ein Eintrag unerwarteterweise leer ist, also eine Null erzeugt, und einen Nulleintrag gibt es bei Arrays nicht. Oder es ist inzwischen ein Referenzeintrag gelöscht worden, das Array ist also kürzer als es im Moment war, als der zu speichernde Wert erzeugt wurde. Auch hier wäre mit einer Begrenzung ein Fehler zu vermeiden, aber der Rückgabewert wäre dann inhaltlich falsch. Und das wäre in meinen Augen bei einer Geschäftsanwendung noch schlimmer als ein Laufzeitfehler. Rolf muss also herausfinden, warum die Referenz nicht mehr stimmt, und daran arbeiten.
Herzlich,
Tom
Tom
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Array Assign
Ich habe es inzwischen herrausgefunden. Es wurde ein bestimmtes feld nicht befüllt. daher hat er Zähler nicht richtig funtk. jetzt wieder OK
danke
danke
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Array Assign
Dann kannst Du das ja als erledigt kennzeichnen!
Wenn Du da schon dabei bist, die anderen erledigten auch.
Wenn Du da schon dabei bist, die anderen erledigten auch.
Gruß
Klaus
Klaus