Hallo Leute,
mit Xbase habe ich meine CLIPPER-Datenbank LOKLISTE auf Windows umgestellt. Diese befaßt sich mit der Erfassung von Eisenbahntriebfahrzeugen und ist komplett im GUI-Modus erstellt. Zur korrekten Darstellung müssen fast alle Eingaben formartiert werden. Ich benutze dazu die og. Funktionen, habe aber das Problem, daß ab und an das Programm abstürzt mit dem Hinweis Datensatz muß für diese Operation gesperrt sein. Leider ist der Fehler auch nicht reproduzierbar und in der Anleitung fehlt auch ein Hinweis, daß man bei den Functionen PadR, PadL, PadC den Befehl RLock() vorher anwenden muß. Ich habe zwar in den Fällen, wo dieser Fehler auftrat, RLock() vorweg angegeben, der Fehler trat an dieser Stelle auch nicht mehr auf. Ich bin aber nicht sicher, ob das wirklich geholfen hat !!
Erwähnen muß ich aber noch, daß fast alle betreffenden Eingaben noch die Bearbeitung eines Code-Blocks zur Folge haben !!!
Ein Eingabebeispiel ohne Codeblock :
oComboDir := XbpCombobox():new( oStatic1,,{275,77},{90,210} )
oComboDir:type := XBPCOMBO_DROPDOWN
oComboDir:XbpSLE:bufferLength := 12
oComboDir:XbpSLE:group := XBP_WITHIN_GROUP
oComboDir:create()
oComboDir:XbpSLE:dataLink := {|x| RLock(), ;
IIf( x==NIL, ALLTRIM(F_direkt1), ;
F_direkt1 := PadR(ALLTRIM(x),12) ) }
oComboDir:XbpSLE:setData()
oComboDir:helpLink := MagicHelpLabel():New(" Direktion für Länderbahn-Triebfahrzeuge ")
oComboDir:killInputFocus := {|| nFieldPos := FieldPos( "F_direkt1" ) }
oDlg:addEditControl( oComboDir:XbpSLE )
Vielen Dank im Voraus für Eure Hilfe
MfG Dipl.Ing. karl-Heinz Kahl
Eingabeformatierung mit PadR, PadL, PadC
Moderator: Moderatoren
-
- UDF-Programmierer
- Beiträge: 68
- Registriert: Do, 14. Dez 2006 20:55
- Wohnort: 22946 Trittau
- Kontaktdaten:
Eingabeformatierung mit PadR, PadL, PadC
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Eingabeformatierung mit PadR, PadL, PadC
hi,
auszuführen. Da durch wird dieser aktive und evaluiert den Ausdruck :
FELD := SLEvariabel.
deine SLE aufnmmst. "Normal"erweise würdes du im "OK" Codeblock
sowas haben wie GATHER(aEditControl). In den Codeblock kannst du
ja deine eigenes GATHER() weiter um RLOCK().
Was die "formatierung" unter GUI angeht kann ich nur auf SLEPic von
James Loughner verweisen womit man wie bei Cl*pper dann PICTURE
hat. Eine Combobox gibt es auch von ihm.
gruss by OHR
Jimmy
dein Problem ist das du versuchst im 2st Teil von :datalink eine AktionKHKDampflok hat geschrieben: Datensatz muß für diese Operation gesperrt sein
...
oComboDir:XbpSLE:dataLink := {|x| RLock(), ;
IIf( x==NIL, ALLTRIM(F_direkt1), ;
F_direkt1 := PadR(ALLTRIM(x),12) ) }
...
auszuführen. Da durch wird dieser aktive und evaluiert den Ausdruck :
FELD := SLEvariabel.
ich nehme mal an das dies dein Array ist (= aEditControl) wo du auchKHKDampflok hat geschrieben: ...
oDlg:addEditControl( oComboDir:XbpSLE )
...
deine SLE aufnmmst. "Normal"erweise würdes du im "OK" Codeblock
sowas haben wie GATHER(aEditControl). In den Codeblock kannst du
ja deine eigenes GATHER() weiter um RLOCK().
Was die "formatierung" unter GUI angeht kann ich nur auf SLEPic von
James Loughner verweisen womit man wie bei Cl*pper dann PICTURE
hat. Eine Combobox gibt es auch von ihm.
gruss by OHR
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Eingabeformatierung mit PadR, PadL, PadC
Hallo,KHKDampflok hat geschrieben: oComboDir:XbpSLE:dataLink := {|x| RLock(), ;
IIf( x==NIL, ALLTRIM(F_direkt1), ;
F_direkt1 := PadR(ALLTRIM(x),12) ) }
so geht das nicht:
1. Rlock() kann immer fehlschlagen, man muss also auf Erfolg abfragen.
Wenn es fehlschlägt gibt es diese Fehlermeldung.
2. Rlock() wird hier auch ausgeführt, wenn nur gelesen werden soll, ist das gewünscht ? (Langsam !)
3. Rlock() wird nicht wieder aufgehoben.
4. So verschachtelte Codeblöcke sind sehr fehleranfällig und nicht debugbar.
besser du lagerst das Speichern (oder beides) in eine Funktion aus:
Code: Alles auswählen
// schreiben auslagern
oComboDir:XbpSLE:dataLink := {|x| [b]RLock()[/b], ;
IIf( x==NIL, ALLTRIM(F_direkt1), ;
MyReadSave("FeldName",cAlias,x } ) }
// alles auslagern
oComboDir:XbpSLE:dataLink := {|x| MySave("FeldName",cAlias,x }
je nach Auslagerungsart muss die Funktion etwas anders aussehen...
hier das Beispiel nur zum Speichern.
function MaSave(cFeld,cAlias,xVal)
if (cAlias)->(RLock())
replace (cAlias)->(cFeld) with xVal
// eventuell muss es so angegeben werden:
// replace (cAlias)->&(cFeld) with xVal
(cAlias)->(DbUnlock())
else
Fehlermeldung
endif
return x
Gruß
Hubert
Hubert