ich porkel den Thread mal wieder in den Vordergrund. Es geht schließlich um Vererbung und dann darf man das
Ich darf doch nochmals davon ausgehen, das Membervars aus der Superklasse an die Unterklasse vererbt werden und darin auch erreichbar sind!? Hm, wo liegt da wieder mein Denkfehler?
Code: Alles auswählen
CLASS datenbank
PROTECTED:
EXPORTED:
VAR id // jeder
METHOD init
METHOD felderleeren
ENDCLASS
METHOD datenbank:init()
::id := 0
::aStruktur := {}
RETURN self
METHOD datenbank:felderleeren()
LOCAL cField
LOCAL nFcount
LOCAL nI
nFcount := LEN(::aStruktur)
FOR nI := 1 TO nFcount // Durchlauf der einzelnen Felder der DB
cField := ::aStruktur[nI,1]
IF ::aStruktur[nI,2] = "N"
::&(cField) := 0
ELSEIF ::aStruktur[nI,2] = "C"
::&(cField) := SPACE(::aStruktur[nI,3])
ELSEIF ::aStruktur[nI,2] = "D"
::&(cFIELD) := CTOD("")
ELSEIF ::aStruktur[nI,2] = "L"
::&(cField) := .F.
ENDIF
NEXT
RETURN self
****************************************************
****************************************************
CLASS mitarbeiter FROM datenbank
EXPORTED:
// Feldvariablen in DB
VAR name,;
vorname,;
persnr
METHOD initvaria
ENDCLASS
********************************************************************************
METHOD mitarbeiter:initvaria()
// ACHTUNG: immer auf DAtum achten!!!
::aIndex := {;
{"ID","STR(id,8,0)"},;
{"PNR","persnr"},;
{"NAME","UPPER(name)"};
}
::name := "ohne" // pauschal vorbesetzt
::Vorname := "ohne" // " "
::persnr := "9999" // " "
RETURN self
************************************************************
********************************************************************************
METHOD mitarbeiter:erzeugestruktur() // hier wird NUR die Datenbankstruktur erzeugt
// ACHTUNG: immer auf DAtum achten!!!
::aStruktur := {;
{ "ID", "N", 8, 0 },;
{ "NAME", "C", 15, 0 },;
{ "VORNAME", "C", 15, 0 },;
{ "PERSNR", "C", 4, 0 };
}
RETURN self
Warum macht sie das nicht? Beim 1. Durchlauf ist die ID, die klappt noch, sobald aber die Memvar name drankommt, kommt die Fehlermeldung Membervariable nicht bekannt für dieses Objekt. Sobald ich die Methode felderleeren() aber so umändere, dann klappt es:
Code: Alles auswählen
METHOD datenbank:felderleeren()
LOCAL cField
LOCAL nFcount
LOCAL nI
LOCAL objekt := self
nFcount := LEN(::aStruktur)
FOR nI := 1 TO nFcount // Durchlauf der einzelnen Felder der DB
cField := ::aStruktur[nI,1]
IF ::aStruktur[nI,2] = "N"
objekt:&(cField) := 0
ELSEIF ::aStruktur[nI,2] = "C"
objekt:&(cField) := SPACE(::aStruktur[nI,3])
ELSEIF ::aStruktur[nI,2] = "D"
objekt:&(cFIELD) := CTOD("")
ELSEIF ::aStruktur[nI,2] = "L"
objekt:&(cField) := .F.
ENDIF
NEXT
RETURN self