hi,
Lutz Rübe hat geschrieben:
... man könnte ja FLock() benutzen, aber dein eigendliches Problem wird
damit ja nicht "behoben".
das funktioniert leider nicht, da ja EXCLUSIV auch beim REINDEX gesetzt sein muß.
stimmt ... ich dachte auch an INDEX ON, also "neuaufbaut" was mit FLock() ginge.
Lutz Rübe hat geschrieben:
darf ich mal fragen, wie Deine Net_Use aussieht und funktioniert ? Da ich ja vorher nur unter Clipper ein Netzwerk-Programm geschrieben habe, habe ich in dieser Beziehung kaum Erfahrung.
nun sicherlich gibt es viele Ansätze für eine Net_use aber ich hab das
so gelöst :
Code: Alles auswählen
#define Dbf_Name 1
#define Dbf_Select 2
#define Dbf_Path 3
#define Dbf_Index 4
STATIC aDBF := {} // Array mit allen DBF/Index/PATH Angaben
FUNCTION NTXNDX
// leere Array aufbaun
_INIT_ARRAY()
// Datei mit Path Angaben etc
OPENPARA("LAUFWERK.DAT")
// Array mit DBF / Index Namen sowie PATH füllen
_FILL_ARRAY()
RETURN
FUNCTION NET_USE(cName,lExcusiv)
...
DEFAULT lExcusiv TO .F.
...
// suche den Namen der DBF
nPosi := ASCAN(aDBF, {|x| UPPER(x[Dbf_Name] )==UPPER(cName) }
IF nPosi > 0
// wenn DBF noch nicht vorhanden
IF .NOT. FILE(aDBF[nPosi][Dbf_Path])
CRE_DBF(aDBF[nPosi][Dbf_Path])
ENDIF
// bei mir hat jede DBF "seinen" SELECT Bereich
SELECT(aDBF[nPosi][Dbf_Select])
IF lExcusiv
USE (aDBF[nPosi][Dbf_Path]) EXCLUSIVE
ELSE
USE (aDBF[nPosi][Dbf_Path])
ENDIF
// prüfen auf NETERR()
IF .NOT. NETERR()
// nun die Indexe
nLen := aDBF[nPosi][Dbf_Index]
FOR i = 1 TO nLen
// prüfen ob Index vorhanden
IF .NOT. FILE(aDBF[nPosi][Dbf_Index][i])
CRE_INDEX(aDBF[nPosi][Dbf_Index][i])
ENDIF
OrdListAdd(aDBF[nPosi][Dbf_Index][i])
NEXT
...
Ich lese also zunächste aus einer localen Datei alle DBF/Index/Path Info´s
in ein STATIC Array. Wenn ich nun eine DBF öffen möchte schreib ich nur
Code: Alles auswählen
PROCEDURE MAIN
...
NTXNDX()
...
IF NET_USE("Kunden")
OrdSetfocus( [<cTagName>|<nIndex>] )
ENDIF
und brauche mich um keine Index Files zu kümmern. Wenn man nun die
DBF oder Index erweitern will findet man alles an einer Stelle.
Natürlich kan man statt eines Array auch eine DBF benutzen was man
dann "Data Dictionary" nennt.
gruss by OHR
Jimmy