Seite 1 von 1

Error during printing [erledigt]

Verfasst: Mo, 09. Mär 2020 12:16
von peternmb
Hallo,

ich bekomme gelegentlich bei einer kleinen Routine einen Absturz mit einer Fehlermeldung die ich nicht richtig zuordnen kann.
Ich erstelle dabei eine kleine 3-zeilige txt-Datei.

Code: Alles auswählen

proc mach_info
//
LOCAL webdatei:=Hauptpfad+"\Export\Web\TU"+strzero(A->tnr,3,0)+"\"+rtrim(b151_sle4:getData())+".txt"
//
set console off
set printer to (webdatei)
set printer on
//
? dtoc(A->TDATUM)
? rtrim(ConvToAnsiCP(b151_sleW1:getData()))
? rtrim(ConvToAnsiCP(b151_sleW2:getData()))
//
set printer off
set printer to
set console on		
//
return
Die Datenbank in ->A ist definitv geöffnet, den Wert sieht man auch in der Fehlermeldung:
Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows-10oError:args :
-> VALTYPE: C VALUE: 05.03.2020
oError:canDefault : N
oError:canRetry : Y
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Error during printing
oError:filename :
oError:genCode : 101
oError:operation : qOut
oError:osCode : 6
oError:severity : 2
oError:subCode : 4313
oError:subSystem : BASE
oError:thread : 1
oError:tries : 5
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
aufgerufen von MACH_INFO(704)
Zeile 704 ist die LOCAL-Definition des Dateinamens

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 12:26
von Jan
Hallo Peter,

der Fehler geht auf ein qout. Das ist nicht die LOCAL-Zeile. Das muß eine der ?-Zeilen sein.

Jan

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 12:43
von brandelh
Die Zuordnung im LOCAL ist zwar erlaubt, aber gerade im Fehlerfalle wird das dann schwierig und das debuggen wird erschwert.
Wie JAN schon schrieb muss das qout von den ? her kommen, es könnte sein, dass ein ungültiger Dateinamen entsteht,
beim set printer sollte der zwar schon auffallen, aber eventuell wird erst beim ersten ? tatsächlich auf den zugegriffen.
Ansonsten was ist A-> ein gültiger Alias ?
Ich erstelle dabei eine kleine 3-zeilige txt-Datei.
Aber warum SET PRINT ON ?

Ich hätte das direkt mit

Code: Alles auswählen

SET ALTERNATE TO (webdatei)
? ...
? ...
SET ALTERNATE TO 
erledigt, die Drucker Umleitung wird bei Windows immer problematischer und bei reinem Text ist das sicherer.

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 12:45
von peternmb
Jan hat geschrieben: Mo, 09. Mär 2020 12:26 Hallo Peter,

der Fehler geht auf ein qout. Das ist nicht die LOCAL-Zeile. Das muß eine der ?-Zeilen sein.

Jan
ja, stimmt, es ist diese Zeile
? dtoc(A->TDATUM)
Nur wieso die Fehlermdung, das Datum ist doch da - steht auch in der errorlog :banghead:

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 12:49
von Tom
Die Xbase++-Fehlerdatei von Anno Zopf sagt zum Fehlercode 101 "Caused by: "QOut()" etc. to off-line/non-existing printer".

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 12:49
von Martin Altmann
Enthält der Dateiname (b151_sle4 ) ein Leerzeichen oder ein Sonderzeichen wie %$":;?

Viele Grüße,
Martin

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 13:00
von Tom
Ich würde drei Daten/Variableninhalte auch nicht auf so kompliziertem Weg loggen, sondern simpler mit MemoWrit, den Low-Level-Funktionen (FOpen(), FWrite(), FClose()) oder der Tools-Funktion StrFile(), die auch appenden kann. Aber das ist nur ein Hinweis, der nicht bei der Fehlerbeseitigung helfen wird. Ist eine alte Forentradition: Statt mit auf Fehlersuche zu gehen, erklärt man, dass und wie man das ganz anders machen würde, was da versucht wird. :lol:

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 13:04
von brandelh
Nun ja TOM,

wenn der Dateiname nicht fehlerhaft und der Inhalt OK ist, ist halt die Erstellung einer ALTERNATE Datei viel sicherer als eine Druckerumlenkung auf Fesplatte.
Die Liste der Probleme mit SET PRINTER TO hier ist lang und wird nicht kürzer ;-)

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 13:04
von Martin Altmann
Tom,
darum ja mein Hinweis. Der Dateiname setzt sich zusammen aus einem String, einer Zahl mit führenden Nullen und dem Inhalt eines SLEs, von dem die anhängenden Leerzeichen entfernt wurden.

Viele Grüße,
Martin

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 14:23
von peternmb
Martin Altmann hat geschrieben: Mo, 09. Mär 2020 12:49 Enthält der Dateiname (b151_sle4 ) ein Leerzeichen oder ein Sonderzeichen wie %$":;?

Viele Grüße,
Martin
das weiß ich leider nicht, die errorlog bekomme ich vom Kunden automatisch gemailt - könte aber die Ursache sein, da das Problem nicht immer auftritt
Aber warum SET PRINT ON ?
vermutlich, weil ich das schon immer so mache...

Ich werde das auf "set alternate" ändern und auf Leer- oder Sonderzeichen prüfen, dann sollte Ruhe sein.

PS.: wie kann ich am einfachsten auf Sonderzeichen prüfen???

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 15:30
von Wolfgang Ciriack
Am einfachsten einfach alle nicht erlaubten Zeichen im Dateinamen entfernen:

Code: Alles auswählen

dateiname := charrem(' ~"#%&*:<>?/\{|}', dateiname)
oder ohne die Tools3 eine Funktion schreiben, die alle nicht erlaubten Zeichen nacheinander entfernt:

Code: Alles auswählen

dateiname := StrTran(dateiname, "#", "")
dateiname := StrTran(dateiname, "/", "")
.....

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 15:46
von peternmb
Wolfgang Ciriack hat geschrieben: Mo, 09. Mär 2020 15:30 Am einfachsten einfach alle nicht erlaubten Zeichen im Dateinamen entfernen:

Code: Alles auswählen

dateiname := charrem(' ~"#%&*:<>?/\{|}', dateiname)
oder ohne die Tools3 eine Funktion schreiben, die alle nicht erlaubten Zeichen nacheinander entfernt:

Code: Alles auswählen

dateiname := StrTran(dateiname, "#", "")
dateiname := StrTran(dateiname, "/", "")
.....
Ich muss die Sonderzeichen nicht entfernen - der Kunde bekommt einen Hinweis, dass hier keine Sonderzeichen erlaubt sind.
Ich hatte gehofft, dass ich irgendwie generell auf Sonderzeichen prüfen kann (z.B. über chr(x)) ohne jedes einzeln zu benennnen.

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 15:52
von Koverhage
Ja wie Wolfgang ja schon schrieb.
IF sle $ "hier deine Sonderzeichen"

Re: Error during printing

Verfasst: Mo, 09. Mär 2020 15:56
von brandelh
Ich habe SLE erstellt welche z.B. nur Datumswerte oder Zahlen eingeben können.
Wenn du willst kannst du dir in der Wissensbasis ansehen wie das geht:

:arrow: https://www.xbaseforum.de/viewtopic.php?f=16&t=499

Re: Error during printing [erledigt]

Verfasst: Mo, 09. Mär 2020 16:44
von peternmb
Danke, ich muss jetzt erst einmal warten ob ich immer noch Absturzmeldungen erhalte.