Seite 1 von 1

USE ...

Verfasst: Mi, 22. Jun 2016 13:36
von XBaseAzubi
Hallo!

Am Beginn des Programmes steht:

Code: Alles auswählen

...
USE Kunden new Alias sCustomer
...
CLASS Kunden
   
   EXPORTED:
   VAR nKNummer, cKName, cKAdresse, cKPLZ, cKOrt, lAktiv

   method KRead
   method KShow
   method RNew
   method RWrite
   method ChangeRec
ENDCLASS
...

//ABER: Hier wird´s nicht gefunden:
method Kunden:KRead
   FIELD KNUMMER, KNAME, KADRESSE, KPLZ, KORT, AKTIV IN sCustomer
   
   ::nKNummer := sCustomer->KNUMMER
   ::cKName := sCustomer->KNAME
   ::cKAdresse := sCustomer->KADRESSE
   ::cKPLZ := sCustomer->KPLZ
   ::cKOrt := sCustomer->KORT
   ::lAktiv := sCustomer->AKTIV
   USE
return
...
In den Hilfedateien finde ich nicht warum.

FG
Martin

Re: USE ...

Verfasst: Mi, 22. Jun 2016 13:45
von Manfred
Hi Martin,
erstmal ein kleiner Tipp, wenn Du mit Alias arbeitest, brauchst Du keine Field Anweisung vorher.
Gibt es den eine Fehlermeldung? Woher weißt Du das es nicht gefunden wird? Hast Du mal im Debugger nachgeschaut, ob die DBF an der Stelle noch offen ist?

Re: USE ...

Verfasst: Mi, 22. Jun 2016 14:15
von brandelh
Ist es Absicht, dass nach jedem KRead() die Datei geschlossen wird ?

Das USE ohne Argument schließt nämlich die Datei ...

und zwar die aktuell selektierte, das muss nicht unbedingt die sCustomer sein :!:

Außerdem schaffst du in der Kunden Klasse Abhängigkeiten, die spätestens in einer MDI Anwendung übel aufstoßen werden.
Dein FIXER Alias außen und mögliche mehrfache Aufrufe einer GUI Anwendung wird zu Namens Konflikten führen.

Ich nutze statt dem, ALIAS einen dynamischen Selectbereich mit Variable (als Instanz-Var oder per Parameter):

Code: Alles auswählen

local nKunde
USE Kunden new // neterr() sollte immer geprüft werden !
if ! neterr()
   nKunde := select()
   *** ab hier alle Zugriffe über diese Variable (nKunde)->(...) beispiel ! (nKunde)->(eof())
   
   oKunde := Kunden():new()
   oKunde:nDB := nKunde
   ...
   

CLASS Kunden
   
   EXPORTED:
   VAR nKNummer, cKName, cKAdresse, cKPLZ, cKOrt, lAktiv, nDB // nDB ist kurz, kann aber (fast) jeden Namen annehmen

   method KRead
   method KShow
   method RNew
   method RWrite
   method ChangeRec
ENDCLASS
method Kunden:KRead
   FIELD KNUMMER, KNAME, KADRESSE, KPLZ, KORT, AKTIV IN sCustomer
   
   ::nKNummer := (::nDB)->KNUMMER
   ::cKName :=  (::nDB)->KNAME

*** wirklich schließen, falls ja 

   (::nDB)->(dbCloseArea())
   

Re: USE ...

Verfasst: Mi, 22. Jun 2016 14:15
von Tom

Code: Alles auswählen

::lAktiv := sCustomer->AKTIV
   USE
Dieses einsame USE am Ende der Methode schließt alle Dateien in der aktuellen Workarea. Wenn "sCustomer" selektiert ist, bevor die Methode aufgerufen wird, ist die Tabelle nach dem Aufruf wech.

Re: USE ...

Verfasst: Mi, 22. Jun 2016 19:27
von AUGE_OHR
hi,
XBaseAzubi hat geschrieben:Am Beginn des Programmes steht:
du hast ja schon diverse Tips bekommen.

hier meiner : benutze den Formdesigner ( XppFD.EXE )
er wird dir die richtige Syntax generieren ( Class Code )