USE ...

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
XBaseAzubi
Rookie
Rookie
Beiträge: 10
Registriert: Fr, 13. Mai 2016 8:14
Wohnort: Tattendorf/Österreich

USE ...

Beitrag 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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: USE ...

Beitrag 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?
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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: USE ...

Beitrag 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())
   
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: USE ...

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: USE ...

Beitrag 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 )
gruss by OHR
Jimmy
Antworten