versuche es mal mit meiner MyLocalSelf ... oder lass die Feldvariablen weg und nimm Arrays, wie weiter unten angerissen ...
Was mir auffiel
CLASS VAR cAlias -> ein cAlias macht nur Ärger, ich mache immer:
use DBF NEW // das NEW ist wichtig
if ! neterr()
::nAlias := select()
...
(::nAlias)-> ... Zahlen sind eindeutig ...
du ließt in DATENBANK die Felder mit Struktur ein und verwendest dann aber je Datei namentliche Feldvariablen, warum nicht ein Array (wie es für z.B. DBCREATE() benutzt wird) anlegen, das enthält dann Name und Art des Feldes ... und in deiner Klasse intern über FieldPut(nFeld), FieldGet(nFeld) und FiledName(..) bzw. Fieldpos() gehen. Fieldinfo kann Blank auch ersetzten. Eventuell sparst du dir sogar die XBTools3 DLLs.
So vermeidest du die Macros, du brauchts kein Blank (dort mußt du doch auch unterscheiden zwischen num und text ... das spart auch Zugriffe auf die Datei. Die Methoden nach außen können natürlich auch Namen empfangen, diese setzt du dann über das Array auf Feldnummern um.
Für das Leeren eines Datensatzes nehme ich z.B.
for x := 1 to fCount()
do case
case fieldinfo(x,FLD_TYPE)="C"
fieldput(x, "")
case fieldinfo(x,FLD_TYPE)="N"
fieldput(x, 0)
...
Du hättest dann ja auch die Struktur schon im ::ArrrayMitStrukur ...
natürlich in deinem Beispiel immer mit dem alias:
(::nAlias)->(fieldput(...))
Wenn ich recht verstanden habe sind die übergebenen object Variablen vom gleichen Typ wie die Klasse in der du das programmierst ?
Das sollte nicht nötig sein, innerhalb der Klasse hat man immer auf die eigenen Instanzvariablen Zugriff.
Wenn man allerdings eine Klasse ableitet und dann dort erneut eine gleichnamige Variable erstellt, dann sperrt diese die andere, dann muß man :
::Masterclasse:MyVar und ::MyVar hier wird bei ::MyVar immer
die in der abgeleiteten Classe benutzt, man muß genau ::Masterclasse:MyVar schreiben wenn man diese will.
auch blockiert ein lokal self .... das eigentliche self ... da muß man aufpassen ...
::MySle:irgendeinevent := {|p1,p2,self| ::Fenstermethode() }
hier knallt es, denn :: ist nicht mehr das self des Fensters, sondern die lokale Variable self aus der Parameterleiste ...
Das hat mich schon Nerven gekostet, weil einige Beispiele dort self statt oXbp verwenden.
Ich hoffe es war was für dich dabei, wenn nicht, auf in die Mülltonne
![Wink ;-)](./images/smilies/wink.gif)