Discussion:
Fehlersuche Hilfe ?
(zu alt für eine Antwort)
Silenus paparias
2010-05-03 07:34:42 UTC
Permalink
Hallo.

Habe folgendes problem:

Eine kleine "printerform.scx" hat eine Button Print mit foldenden
code in click event:
y=1
FOR i=1 TO thisform.list1.ListCount
IF thisform.list1.Selected(i)=.t.
DIMENSION listarray(y)
listarray(y)=thisform.list1.List(i)
y=y+1
ENDIF
endfor
FOR i=1 TO ALEN(listarray,1)
REPORT FORM deals FOR ALLTRIM(deals.pelatis)=ALLTRIM(listarray(i)) TO
PRINTER PREVIEW noconsole
ENDFOR

KEINE sonstige code in form.

Das Programm bleibt stehen mit der Fehlermeldung "Unknown member
SPINNER3."

Nach schauen in den Debugger bleib das auf :

REPORT FORM .............................

Weder in den Printerform.scx noch in der *.FRX existiert so eine
member!.

Diese member existiert nur in der Hauptform.
Der aufrufen Button hat diesebezueglich folgenden code.

zdate=CTOD(STR(thisform.spinner1.Value)+STR(thisform.spinner2.Value)
+STR(thisform.spinner3.Value))
...........................
........................
do printform.scx

zdate ist eine Public variable die in .FRX existiert und gedruckt
wird.

Hat jemand idee oder eine vorschlag zu fehlerbehebung?

Danke.
Silenus paparias
2010-05-03 07:49:37 UTC
Permalink
Ich hab noch was vergessen zu erwaehnen:

Ruf ich den report direkt auf, mit "Preview", lauft es ohne
problemen, und zdate wird auch korrekt ausgedruckt.
Jürgen Wondzinski
2010-05-03 08:07:53 UTC
Permalink
Hi Silenus

Ne Eigenart von VFP ist es, dass der Debugger ab und an ein ehemaliges
Objekt als Verursacher meldet, wenn er den echten Verursacher nicht richtig
festnageln kann ;) Ich vermute daher mal, dass dein Spinner3 erst mal
unschuldig ist.

Probier mal zuerst, ob dein Code durchläuft, wenn du _testweise_ vor die
FOR-Schleife reinsetzt:
PUBLIC ListArray(1)

Das Array wird ja in der Methode erstellt, und ist folglich erst mal nur in
dieser Methode sichtbar. Vielleicht hat der Report dann später Probleme mit
der Auswertung der FOR Bedingung, weil er dann dieses Array nicht mehr
sieht.


Ansonsten stellt sich die Frage, warum du erst ein Array erstellt, um dann
anhand dieses Arrays wiederum den Report aufzurufen. Eiegntlich kannste den
Report gleich in der ersten Schleife aufrufen:

FOR i=1 TO thisform.list1.ListCount
IF thisform.list1.Selected(i)
REPORT FORM deals ;
FOR deals.pelatis = ALLTRIM(Thisform.List1.List(i));
TO PRINTER PREVIEW noconsole
ENDIF
ENDFOR




Noch ne Anmerkung zur Codeverbesserung: Deinen SpinnerCode könntest du
eleganter schreiben:

zdate=DATE(thisform.spinner3.Value, thisform.spinner2.Value,
thisform.spinner1.Value)
--
wOOdy
Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" 1996 bis 2009



"*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
..·`.Visual FoxPro: It's magic !
(¸.·``··*
Silenus paparias
2010-05-03 08:35:02 UTC
Permalink
Hallo Juergen.
Post by Jürgen Wondzinski
Probier mal zuerst, ob dein Code durchläuft, wenn du _testweise_ vor die
PUBLIC ListArray(1)
Die fehlermeldung bleibt...Leider.
Post by Jürgen Wondzinski
Ansonsten stellt sich die Frage, warum du erst ein Array erstellt, um dann
anhand dieses Arrays wiederum den Report aufzurufen. Eiegntlich kannste den
Der User soll Anhang der zuverfuegung stehende Drucksaetze ,
auswaehlen koennen (aus eine Listbox) was er auch tatschaelich drucken
will.
Post by Jürgen Wondzinski
Noch ne Anmerkung zur Codeverbesserung: Deinen SpinnerCode könntest du
zdate=DATE(thisform.spinner3.Value, thisform.spinner2.Value,
thisform.spinner1.Value)
Danke.

Ausserdem habe ich ein neue *.frx die ganz leeren ist erstellt und
dann angestossen(um mich zu vergewissern das die *.frx keine make hat)
aber die fehlemeldung bleib bestehen.

Gruss.
Matthias Kahlert
2010-05-03 08:25:33 UTC
Permalink
Post by Silenus paparias
zdate=CTOD(STR(thisform.spinner1.Value)+STR(thisform.spinner2.Value)
+STR(thisform.spinner3.Value))
Mich wundert ja, dass das hier problemlos funktioniert... an der Stelle
wirds spätestens dann krachen, wenn jemand sein Windows auf ein anderes
Datumsformat einstellt ;-)

Besser:
zdate = DATE(thisform.spinner3.Value, thisform.spinner2.Value, ;
thisform.spinner1.Value)
--
Matthias
Jürgen Wondzinski
2010-05-03 08:56:26 UTC
Permalink
Noch nen Idee:

Haste eventuell noch nen FILTER auf der Tabelle, der wiederum auf den
Spinner3 zugrieft?
--
wOOdy
Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" 1996 bis 2009



"*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
..·`.Visual FoxPro: It's magic !
(¸.·``··*
Silenus paparias
2010-05-03 09:16:21 UTC
Permalink
Post by Jürgen Wondzinski
Haste eventuell noch nen FILTER auf der Tabelle, der wiederum auf den
Spinner3 zugrieft?
JA, die tabelle hat ein FILTER TO .... Datum.

wenn der Benutzer-- Tage , monate oder Jahre zurueck "geht" mit
drechen der spinnerwerte, werden nur die daten des jeweiligen datums
angezeigt.

In interactiveChange jedes Spinners ist der CODE.
SET FILTER TO DAY(deals.datum)=thisform.spinner1.value AND
MONTH(deals.datum)=thisform.spinner2.value AND
YEAR(deals.datum)=thisform.spinner3.value.
......................
......................

Gruss.
Silenus paparias
2010-05-03 10:07:19 UTC
Permalink
Danke Juergen fuer den tip.

Durch setztes erneut des FILTER TO in den Init des printform.scx ,
kommt die fehlermeldung nicht mehr.

Gruss.
Jürgen Wondzinski
2010-05-03 10:13:06 UTC
Permalink
Na, da hammas ja...

Umschreiben auf:

LOCAL dDatum, cDatum
dDatum =
DATE(thisform.spinner3.value,thisform.spinner2.value,thisform.spinner1.value)
cDatum = "{^"+TRANS(DTOC(dDatum,1), "@R 9999-99-99")+"}"
SET FILTER TO deals.datum=&cDatum

Auf die Weise wird die Filterbedingung global direkt auf den entsprechenden
Wert gesetzt, und die Tabelle ist nun unabhänggig von deienr Form und deren
Objekten.
--
wOOdy
Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" 1996 bis 2009



"*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
..·`.Visual FoxPro: It's magic !
(¸.·``··*
Loading...