errorsys
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
errorsys
Hi,
ich hatte gerade die Fehlermeldung, dass die Länge des Datenbankfeldes überschritten wurde bei der Speicherung. Schön und Gut, aber das System hat mir nicht gesagt, welche Datenbank, bzw. was noch viel wichtiger wäre, in welchem Feld es passiert ist. Nachdem ich die Fehlermeldung im Debugger angesehen hatte, konnte ich nur feststellen über ALIAS() welche Db es wäre. Hat jemand irgendeine Idee, wie ich das Feld auch ermitteln kann?
ich hatte gerade die Fehlermeldung, dass die Länge des Datenbankfeldes überschritten wurde bei der Speicherung. Schön und Gut, aber das System hat mir nicht gesagt, welche Datenbank, bzw. was noch viel wichtiger wäre, in welchem Feld es passiert ist. Nachdem ich die Fehlermeldung im Debugger angesehen hatte, konnte ich nur feststellen über ALIAS() welche Db es wäre. Hat jemand irgendeine Idee, wie ich das Feld auch ermitteln kann?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Hallo, Manfred.
Die :args- und die peration-Instanzen des Error-Objekts (wie sieht Dein Errorsys aus?) sollten Dir die entsprechenden Informationen liefern, und zusätzlich könntest Du an der entsprechenden Stelle natürlich auch Debug-Code einsetzen, Dir also einfach das jeweils aktualisierte Datenbankfeld anzeigen lassen.
Die :args- und die peration-Instanzen des Error-Objekts (wie sieht Dein Errorsys aus?) sollten Dir die entsprechenden Informationen liefern, und zusätzlich könntest Du an der entsprechenden Stelle natürlich auch Debug-Code einsetzen, Dir also einfach das jeweils aktualisierte Datenbankfeld anzeigen lassen.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Tom,
In peration steht nur das Pogramm innerhalb dessen der Fehler generiert wurde. Das hatte ich alles schon druchgesehen.
:args zeigt ein recht großes Array an, in dem die ganzen Objektvariablen stehen, also dort steht zumindest nicht drin, welches Feld den Fehler verursacht.Tom hat geschrieben:Hallo, Manfred.
Die :args- und die peration-Instanzen des Error-Objekts (wie sieht Dein Errorsys aus?) sollten Dir die entsprechenden Informationen liefern, und zusätzlich könntest Du an der entsprechenden Stelle natürlich auch Debug-Code einsetzen, Dir also einfach das jeweils aktualisierte Datenbankfeld anzeigen lassen.
In peration steht nur das Pogramm innerhalb dessen der Fehler generiert wurde. Das hatte ich alles schon druchgesehen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16502
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
dann musst Du halt die einzelnen Arrayelemente mit den ihnen entsprechenden Feldern abgleichen!
Viele Grüße,
Martin
dann musst Du halt die einzelnen Arrayelemente mit den ihnen entsprechenden Feldern abgleichen!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
sorry, haste mal ne Leiter? Das ist mir jetzt zu hoch.
Abgleichen? Wie stellst Du Dir das vor? Nachsehen, was in den Vars steht und dann mit dem Datensatzfeld vergleichen?
sorry, haste mal ne Leiter? Das ist mir jetzt zu hoch.
Abgleichen? Wie stellst Du Dir das vor? Nachsehen, was in den Vars steht und dann mit dem Datensatzfeld vergleichen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16502
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Genau so!
In Deinem Array hast Du ja die Felder in einer bestimmten Reihenfolge drin - schau also, welches Feld an welcher Stelle ist.
Vergleiche den Aufbau der einzelnen Feldinhalte mit dem Aufbau der einzelnen Arrayelemente und beachte dabei auch die jeweiligen Längen!
Viele Grüße,
Martin
In Deinem Array hast Du ja die Felder in einer bestimmten Reihenfolge drin - schau also, welches Feld an welcher Stelle ist.
Vergleiche den Aufbau der einzelnen Feldinhalte mit dem Aufbau der einzelnen Arrayelemente und beachte dabei auch die jeweiligen Längen!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: errorsys
hi,
aber nun mal Ernst : ich habe paar Erweiterrungen in meiner Errorsys
die mir ganz nützlich erscheinen.
gruss by OHR
Jimmy
leider nicht so richtig ... ausser in die DBF sehen wo was fehltManfred hat geschrieben: Hat jemand irgendeine Idee, wie ich das Feld auch ermitteln kann?
aber nun mal Ernst : ich habe paar Erweiterrungen in meiner Errorsys
die mir ganz nützlich erscheinen.
gruss by OHR
Jimmy
Code: Alles auswählen
*** snip ***
...
? Replicate( "-", 78 )
? EHS_ERROR_LOG_OF +ID_USER+" Ver."+ID_VERSION+' "'+ appName(.f.) +'"'+ EHS_DATE, Date(), Time()
?
? EHS_XPP_VERSION , Version()+"."+Version(3)
? EHS_OS_VERSION , Os()
? "Memory (RAM_AVAIL) :" , LTRIM(STR(MEMORY(MEM_RAM_AVAIL)/1000))+" of "+LTRIM(STR(Memory(MEM_RAM_TOTAL)/1000))+ " MB"
? "DiskSpace C: :" , LTRIM(STR(DiskSpace("C:")/1000000))+" KB"
? "Alias() :" , IF(USED(),ALIAS(),"leer")
? "Recno() :" , IF(USED(),LTRIM(STR(RECNO())),"leer")
? "Found() :" , IF(Found(),"YES","NO")
? "Select() :" , LTRIM(STR(SELECT()))
? "IndexOrd() :" , LTRIM(STR(OrdNumber()))
IF OrdNumber() > 0
? "Indexfocus() :" , OrdSetFocus()
? "Indexname() :" , OrdName()
? "Indexkey() :" , OrdKey()
ENDIF
IF USED()
? "DBO_ALIAS :" , DbInfo( DBO_ALIAS )
? "DBO_FILENAME :" , DbInfo( DBO_FILENAME )
? "DBO_ORDERS :" , LTRIM(STR(DbInfo( DBO_ORDERS )))
? "DBO_RELATIONS :" , LTRIM(STR(DbInfo( DBO_RELATIONS )))
? "DBO_SHARED :" , IF(DbInfo( DBO_SHARED ),"YES","NO")
? "DBO_REMOTE :" , IF(DbInfo( DBO_REMOTE ),"YES","NO")
? "DBO_SERVER :" , IF(DbInfo( DBO_SERVER ),"YES","NO")
? "DBO_DBENAME :" , DbInfo( DBO_DBENAME )
ENDIF
aWSL := WorkSpaceList()
nWSL := LEN(aWSL)
? "WorkSpaceList :" , ""
FOR j = 1 TO nWSL
?? aWSL[j]
IF j = nWSL
ELSE
?? ", "
ENDIF
NEXT
? ""
? Replicate( "-", 78 )
? "oError:args :"
...
*** eof ***
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
also ich meine man müßte die Fehlerzeile (REPLACE ...) im Callstack unten sehen, das müsste die letzte vor der ERRORSYS sein.
Auch kann es eigentlich nur ein numerisches Feld sein, dessen Vorkommastellen nicht für den Wert reichen, denn Datum, logisch, String und Memo, schneiden automatisch ab.
also ich meine man müßte die Fehlerzeile (REPLACE ...) im Callstack unten sehen, das müsste die letzte vor der ERRORSYS sein.
Auch kann es eigentlich nur ein numerisches Feld sein, dessen Vorkommastellen nicht für den Wert reichen, denn Datum, logisch, String und Memo, schneiden automatisch ab.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
Replace benutze ich überhaupt nicht mehr. Ich mache es mit :=
Außerdem benutze ich Deinen herrlichen Vorschlag über Codeblocks usw. Du erinnerst Dich? Leider wird das alles über Aeval ausgewertet und somit kann man nicht mehr sehen, wenn die Felder ausgetauscht werden.
Aber der Vorschlag von Jimmy bringt mich schon ein Stück weiter (mal wieder gepennt, war wohl zu einfach für mich ) Ich habe meine Errorsys erweitert und jetzt sehe ich zumindest welche Datenbank und welche Recno es war.
Ich habe aber an den Alaska Support angemailt. Mal sehen was die so vorschlagen. Ist ja eigentlich nicht uninteressant diese Frage, mit dem Problem. Was nutzt mir eine Fehlermeldeung, wenn ich nicht weiß wo sie genau herkommt?
Replace benutze ich überhaupt nicht mehr. Ich mache es mit :=
Außerdem benutze ich Deinen herrlichen Vorschlag über Codeblocks usw. Du erinnerst Dich? Leider wird das alles über Aeval ausgewertet und somit kann man nicht mehr sehen, wenn die Felder ausgetauscht werden.
Aber der Vorschlag von Jimmy bringt mich schon ein Stück weiter (mal wieder gepennt, war wohl zu einfach für mich ) Ich habe meine Errorsys erweitert und jetzt sehe ich zumindest welche Datenbank und welche Recno es war.
Ich habe aber an den Alaska Support angemailt. Mal sehen was die so vorschlagen. Ist ja eigentlich nicht uninteressant diese Frage, mit dem Problem. Was nutzt mir eine Fehlermeldeung, wenn ich nicht weiß wo sie genau herkommt?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
woher sie kommt ist eindeutig, wie geschrieben ist einer deiner zu schreibenden Werte im Vorkommabereich länger als deine Felddefinition.
Clipper hat früher glaube ich **** ins Feld geschrieben, ich meine Xbase++ schreibt 0 ... Untersuche den Eingabedatenbestand und die Feldlänge.
Um das abzufangen kannst du im Codeblock bei numerischen Feldern die Länge und Dezimalstellen abfragen und z.B. mit str(nWert,nLen,nDec) testen ob da **** im String enthalten sind -> Feldlängenfehler !
woher sie kommt ist eindeutig, wie geschrieben ist einer deiner zu schreibenden Werte im Vorkommabereich länger als deine Felddefinition.
Clipper hat früher glaube ich **** ins Feld geschrieben, ich meine Xbase++ schreibt 0 ... Untersuche den Eingabedatenbestand und die Feldlänge.
Um das abzufangen kannst du im Codeblock bei numerischen Feldern die Länge und Dezimalstellen abfragen und z.B. mit str(nWert,nLen,nDec) testen ob da **** im String enthalten sind -> Feldlängenfehler !
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hallo Hubert,
es passiert ja nicht bei der Eingabe, sondern bei Datenübernahmen aus fremden Tabellen, von denen ich zwar weiß, welches Feld erwartet wird, aber nicht immer die Länge der Felder klar ist. Das sind alles Textfelder, die dann entsprechend in numerische umgewandelt werden. Es wird aus Textdateien gelesen und da kann es halt vorkommen, das irgendwann einmal mehr drinsteht, als ich vorbereitet habe. Naja, irgendwann ist halt immer das 1.Mal.
Aber an dieser Stelle müßte ich wirklich einmal vorher versuchen zu prüfen, ob die Inhalte auch in die Felder passen. Das muß aber dann vorher schon passieren, wenn die Daten in die Membervar geschrieben werden.
es passiert ja nicht bei der Eingabe, sondern bei Datenübernahmen aus fremden Tabellen, von denen ich zwar weiß, welches Feld erwartet wird, aber nicht immer die Länge der Felder klar ist. Das sind alles Textfelder, die dann entsprechend in numerische umgewandelt werden. Es wird aus Textdateien gelesen und da kann es halt vorkommen, das irgendwann einmal mehr drinsteht, als ich vorbereitet habe. Naja, irgendwann ist halt immer das 1.Mal.
Aber an dieser Stelle müßte ich wirklich einmal vorher versuchen zu prüfen, ob die Inhalte auch in die Felder passen. Das muß aber dann vorher schon passieren, wenn die Daten in die Membervar geschrieben werden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
das wäre natürlich eine Lösung, aber wie sehen denn Maximumfelder in einem Browse aus? Außerdem kostet das doch Speicherplatz, oder, auch wenn der in Mengen heutzutage zur Verfügung steht. Was aber nicht einreißen sollte.....
das wäre natürlich eine Lösung, aber wie sehen denn Maximumfelder in einem Browse aus? Außerdem kostet das doch Speicherplatz, oder, auch wenn der in Mengen heutzutage zur Verfügung steht. Was aber nicht einreißen sollte.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Man könnte die Spaltenbreite dynamisch machen ...Manfred hat geschrieben:aber wie sehen denn Maximumfelder in einem Browse aus?
Feld "N",18,2 -> Anzeige im Browse 9,2 bis * auftauchen, dann Anzeigewert erhöhen ...
Du könntest natürlich auch den größten Wert ermitteln und die dafür nötige Anzahl berechnen, bevor du deinen browse erzeugst, aber das wird eventuell zu langsam.
Gruß
Hubert
Hubert
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Eigentlich steht doch in der Errorlog in welcher Zeile der Fehler auftritt.
db->value := input_wert
Ich mache das in den meisten Fällen so, das ich die Anzahl der zu übernehmenden Stellen mit der Feldlänge vergleiche.
Dies ist eine Abfrage mehr und verhindert solche Fehlermeldungen.
Manche Anwender übergehen die Fehlermeldung und dann steht 0 drin.
Also so ähnlich wie
if len(input_wert) > len(fielsize)
then print error
else
übernehme den Wert
endif
db->value := input_wert
Ich mache das in den meisten Fällen so, das ich die Anzahl der zu übernehmenden Stellen mit der Feldlänge vergleiche.
Dies ist eine Abfrage mehr und verhindert solche Fehlermeldungen.
Manche Anwender übergehen die Fehlermeldung und dann steht 0 drin.
Also so ähnlich wie
if len(input_wert) > len(fielsize)
then print error
else
übernehme den Wert
endif
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi,
ich habe mir alles zu Herzen genommen und folgendes gebaut:
schnipp----------------
Findet das Zustimmung bei euch, oder eher Augenrollen und Katastrophenalarm?
ich habe mir alles zu Herzen genommen und folgendes gebaut:
schnipp----------------
Code: Alles auswählen
FOR nI := 1 TO nFcount // Durchlauf der einzelnen Felder der DB
cField := FIELDNAME(nI)
FeldWert := Fieldget(nI)
IF VALTYPE(FeldWert) = "N" // hier können die meissten Fehler auftauchen
nFeldLaenge := Fieldinfo(nI,FLD_LEN) - Fieldinfo(nI,FLD_DEC)
IF Fieldinfo(nI,FLD_DEC) > 0
nFeldLaenge := --nFeldLaenge // Komma muß weg
ENDIF
IF nFeldLaenge < MAXLINE(ALLTRIM(STR(objekt:&cField)))
// Reaktion
ENDIF
ENDIF
cArbeit := "{|objekt| (ALIAS())->"+cField+" := objekt:"+cField+"}"
bArbeit := &(cArbeit)
AADD(aKopieren, bArbeit)
NEXT
AEVAL( aKopieren,{ |b| EVAL( b, objekt ) } )
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
stimmt vollkommen, mal wieder gepennt. Aber die Sache mit dem Komma mußte auch raus, weil das Teil sich bei 0.0 in ein 0 Feld auch beschwert hatte. Aber wir wissen ja: 0x0 is 0 is 0
stimmt vollkommen, mal wieder gepennt. Aber die Sache mit dem Komma mußte auch raus, weil das Teil sich bei 0.0 in ein 0 Feld auch beschwert hatte. Aber wir wissen ja: 0x0 is 0 is 0
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
verstehe ich nicht. Das es nicht paßt, wird doch erst gemerkt, wenn es versucht wird ins Feld zu schreiben.....
verstehe ich nicht. Das es nicht paßt, wird doch erst gemerkt, wenn es versucht wird ins Feld zu schreiben.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
in deinem Code hast du unterschieden ob es ein numerisches Feld ist oder nicht, und die Länge berechnet, statt dieser Berechnung würde diese Abfrage sicher prüfen was raus kommt.
Das ganze jetzt ohne Handbuch, daher im Pseudocode ...
in deinem Code hast du unterschieden ob es ein numerisches Feld ist oder nicht, und die Länge berechnet, statt dieser Berechnung würde diese Abfrage sicher prüfen was raus kommt.
Code: Alles auswählen
nLen := Länge insgesamt aus Feldinfo
nDez := Anzahl Dezimalstellen
nWert := Wert des Feldinhaltes
if "*" $ str(nWert,nDez,nLen)
Fehlermeldung -> Länge wird überschritten
else
Feld := nWert ...
endif
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
alles klar, aber es werden keine "*" geschrieben. Die Fehlermeldung kommt und es wird eine 0 ins Feld geschrieben, wenn überhaupt, da ja numerische Felder mit 0 vorinitialisiert sind.
alles klar, aber es werden keine "*" geschrieben. Die Fehlermeldung kommt und es wird eine 0 ins Feld geschrieben, wenn überhaupt, da ja numerische Felder mit 0 vorinitialisiert sind.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
genau deshalb sollst du ja nicht direkt ins Feld zuweisen, sondern bei numerischen Feldern erst den Rückgabewert von str() prüfen. Bei der Zuweisung gibt es sofort eine Fehlermeldung, das Feld bleibt auf 0, bei STR() würdest du ein * abfragen können und könntest darauf reagieren ...
genau deshalb sollst du ja nicht direkt ins Feld zuweisen, sondern bei numerischen Feldern erst den Rückgabewert von str() prüfen. Bei der Zuweisung gibt es sofort eine Fehlermeldung, das Feld bleibt auf 0, bei STR() würdest du ein * abfragen können und könntest darauf reagieren ...
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
ich habe mal wieder ein Brett vor dem Kopf. Wie soll das klappen? Nicht ins Feld schreiben? Vorher prüfen?
Ich kann Dir nicht folgen, wie Du das gedacht hast.
ich habe mal wieder ein Brett vor dem Kopf. Wie soll das klappen? Nicht ins Feld schreiben? Vorher prüfen?
Ich kann Dir nicht folgen, wie Du das gedacht hast.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
statt deinem Code
Nun kommt es darauf an,
1. die Fehlersituation zu erkennen,
2. eine ERRORSYS Fehlermeldung zu verhindern
3. eine eigene Fehlermeldung auszugeben ...
das könnte so gehen (die Texte sind jetzt nicht ernst gemeint )
statt deinem Code
Code: Alles auswählen
FOR nI := 1 TO nFcount // Durchlauf der einzelnen Felder der DB
cField := FIELDNAME(nI)
FeldWert := Fieldget(nI)
IF VALTYPE(FeldWert) = "N" // hier können die meissten Fehler auftauchen
nFeldLaenge := Fieldinfo(nI,FLD_LEN) - Fieldinfo(nI,FLD_DEC)
IF Fieldinfo(nI,FLD_DEC) > 0
nFeldLaenge := --nFeldLaenge // Komma muß weg
ENDIF
IF nFeldLaenge < MAXLINE(ALLTRIM(STR(objekt:&cField)))
// Reaktion
ENDIF
ENDIF
cArbeit := "{|objekt| (ALIAS())->"+cField+" := objekt:"+cField+"}"
bArbeit := &(cArbeit)
AADD(aKopieren, bArbeit)
NEXT
AEVAL( aKopieren,{ |b| EVAL( b, objekt ) } )
1. die Fehlersituation zu erkennen,
2. eine ERRORSYS Fehlermeldung zu verhindern
3. eine eigene Fehlermeldung auszugeben ...
das könnte so gehen (die Texte sind jetzt nicht ernst gemeint )
Code: Alles auswählen
::FehlerText := "" // diese iVar merkt sich die Fehler
IsFehler := .f. // diese lokale Variable merkt sich ob im aktuellen Feld ein Fehler ist
FOR nI := 1 TO nFcount // Durchlauf der einzelnen Felder der DB
cField := FIELDNAME(nI)
FeldWert := Fieldget(nI)
IsFehler := .f. // Grundsatz kein Fehler
IF VALTYPE(FeldWert) = "N" // NUR HIER können Fehler auftauchen
nLen := Fieldinfo(nI,FLD_LEN)
nDec := Fieldinfo(nI,FLD_DEC)
if "*" $ str(FeldWert,nLen,nDec)
IsFehler := .t.
::FehlerText += "Feldlängenfehler: "+cField+"bei Recno...."+CRLF
endif
ENDIF
if ! IsFehler // nur wenn kein Fehler auftaucht
cArbeit := "{|objekt| (ALIAS())->"+cField+" := objekt:"+cField+"}"
bArbeit := &(cArbeit)
AADD(aKopieren, bArbeit)
endif
NEXT
AEVAL( aKopieren,{ |b| EVAL( b, objekt ) } )
...
if len(::FehlerText)>0
msgbox(::FehlerText,"Du Depp hast die Feldlänge falsch definiert")
endif
Gruß
Hubert
Hubert