USE &file

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
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

USE &file

Beitrag von AUGE_OHR »

hi,

vielleicht ist es ja zu trivial, aber mancher Newbie hat mit den "kleinen
Unterschied" beim migieren von Cl*pper nach Xbase++ zu kämpfen.

Im Alaska Newsforum ist eine Anfrage wegen einem "ab und zu crash"
gewesen. Nachdem ich mir den veröffentlichten code angesehen hatte,
die eine DBF per "net_use" öffnen sollte, hab ich mal "meine Net_Use"
angesehen und musste festellen das ich dort einen Unterschied zwischen
Xbase++ / Cl*pper dokumentiert habe :

Code: Alles auswählen

*** snip ***
      IF FILE(file_dbf)                    // does (path+)files exist
         DO WHILE  m_dauer> 0     // timeout
            IF ex_use                       // Exclusive
               #IFDEF __XPP__         // Xbase++
                  IF lNewAlias             // with Aliasname
                     USE (file_dbf) EXCLUSIVE ALIAS (myalias)
                  ELSE
                     USE (file_dbf) EXCLUSIVE
                  ENDIF
               #ELSE                           // Cl*pper
                  IF lNewAlias
                     USE &file_dbf EXCLUSIVE ALIAS &myalias
                  ELSE
                     USE &file_dbf EXCLUSIVE
                  ENDIF
               #ENDIF
            ELSE                                // shared
               #IFDEF __XPP__            // Xbase++
                  IF lNewAlias
                     USE (file_dbf) ALIAS (myalias)
                  ELSE
                     USE (file_dbf)
                  ENDIF
               #ELSE                            // Cl*pper
                  IF lNewAlias
                     USE &file_dbf ALIAS &myalias
                  ELSE
                     USE &file_dbf
                  ENDIF
               #ENDIF
            ENDIF
            IF .NOT. NETERR()          // Error open DBF ?
                DO CASE                   // set Index
                   CASE ALIAS() = "ABZU"
                     SET INDEX TO &ZABZUNROK, &ZABNRDATE, &ZABQNR
...
also wenn man unter Xbase++ einen Fehler bei einem Macro (&)
bekommen sollte, obwohl es unter Cl*pper läuft, der sollte es dann
mal mit () versuchen.

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

Nachtrag Net_Use(file ...)

Beitrag von AUGE_OHR »

Ich hätte vielleicht auch gleich des "Rätsels Lösung" posten sollen
"warum" es den "kleinen Unterschied" in Xbase++ zu Cl*pper gibt ...

Code: Alles auswählen

FUNCTION NET_USE(cDFB,cAliasName)
...
  USE &cDBF      -> Xbase++ crash
also wenn man sich die Cl*pper Function ansieht funktioniert alles
und unter Xbase++ crash es ... warum ?

Nun Xbase++ kan denn Macro (&) Operator nur auf Private und Public
und nicht auf eine Local cDBF.

grusss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Jimmy,

nur mal eine Frage am Rande:

Warum machst Du es nicht so?

Code: Alles auswählen

FUNCTION opendb(lNewArea,cDBE,cFileName,cAlias,lShared,lReadOnly)
                DEFAULT lNewArea TO .T.
                DEFAULT lShared    TO .T.
                DBUSEAREA(lNewArea,cDBE,cFileName,cAlias,lShared,lReadOnly)
Damit dürfte doch jedes Problem beseitigt sein? Natürlich evtl. noch eine Erfolgsabfrage drumherum bauen, aber ich denke damit ist das mit USE geklärt. Zumal ich eh nicht verstehe, warum das heute noch beutzt wird.
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
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

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben: nur mal eine Frage am Rande:
Warum machst Du es nicht so?
naja es ist eben "alter" Cl*pper code und die __XPP__ Erweiterrung
ist schon so lange drin das ich die "vergesssen" hatte.
Manfred hat geschrieben: Damit dürfte doch jedes Problem beseitigt sein?
Es ging ja im Prinzip um die LOCAL cDBF die von Cl*pper im Macro
funtioniert und unter Xbase++ nicht.

gruss by OHR
Jimmy
Daniel

Beitrag von Daniel »

Hi

aber kann denn CLIPPER 5.x nicht auch mit dieser Form umgehen:

USE (file_dbf) ALIAS (myalias)

?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

use MyDBF alias MDB benutzt man, wenn der Dateiname und Alias direkt angegeben wird.

use (cMyDBF) alias MDB benutzt man, wenn der Dateiname eine lokale Variable ist und der Alias direkt angegeben wird.

use &cMyDBF war die alte Form mit public oder private Variable

einen Alias mit (MyAlias) denke ich kann man so nicht definieren.
Ich glaube nicht dass als ALIAS eine Variable angegeben werden kann.

Ich mache es heute so:

Code: Alles auswählen

local cDatei, nAlias
...
cDatei := "MyDBF"
use (cDatei) NEW
if nererr()
   Fehlermeldung ...
else
   nAlias := select()
   Indexe ?
endif

Gruß
Hubert
Antworten