USE ...

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

Moderator: Moderatoren

USE ...

Beitragvon XBaseAzubi » Mi, 22. Jun 2016 12:36

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
XBaseAzubi
Rookie
Rookie
 
Beiträge: 10
Registriert: Fr, 13. Mai 2016 7:14
Wohnort: Tattendorf/Österreich

Re: USE ...

Beitragvon Manfred » Mi, 22. Jun 2016 12:45

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 16068
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: USE ...

Beitragvon brandelh » Mi, 22. Jun 2016 13:15

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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13319
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: USE ...

Beitragvon Tom » Mi, 22. Jun 2016 13:15

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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6692
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: USE ...

Beitragvon AUGE_OHR » Mi, 22. Jun 2016 18:27

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10205
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg


Zurück zu Newbie

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast