INDEX und Netzwerkbetrieb

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Hubert,

danke für Deine Gegenüberstellung, mir gefällt ganz besonders das Argument Nr. 3
brandelh hat geschrieben:
Vorteile von DBFNTX

- die DBF ist immer compatibel zu den alten DOS Welten
- man muss keine neuen DBEs einbinden.
- das kennt man halt

...
Das macht einem das ganze einfacher. Und die Größer der Index-Dateien ist - zumindest derzeit - kein Problem für mich.....

Gruß
Lutz
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

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
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Lutz,


hast du das Problem mit dem Net_Use gelöst ? - Sonst kann ich dir meinen quellcode mal hier zeigen. Dieser funktioniert einwandfrei.

Zu Index: Ich halte für mich die cdx-Datei für die beste Idee. Hier kann ich wie Manfred bereits geschildert hat, mehrere Indizies in einer Datei verwalten. Dann brauche ich nur noch die Tag mit OrdSetFocus anzusprechen.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

auch ich bevorzuge neben der kleineren Indexdatei hauptsächlich die Möglichkeit mit einer Indexdatei auszukommen.

Die Regel:

eine DBF
eine Memodatei (wenn nötig)
eine Indexdatei (wenn nötig)

mit gleichem Namen erleichtert den Überblick.
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hi Rolf,
Rolf Ramacher hat geschrieben:
hast du das Problem mit dem Net_Use gelöst ? - Sonst kann ich dir meinen quellcode mal hier zeigen. Dieser funktioniert einwandfrei.
Danke für Dein Angebot... Ich würde mir gerne mal Deinen Code anschauen.... Wäre also net, wenn Du ihn hier posten könntest.

Gruß
Lutz
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Lutz,

hier ist die Function:

#Define CRLF Chr(13)+ Chr(10)
Function Netz_Use()
Local lJa:=.f.
PARAMETERS Datei, ex_use, cTitel, Info, Name

If Info="alias"
If ex_use && exclusive
Use (Datei) New Exclusive Alias Name
EndIf
Else
If ex_use && exclusive
Use &Datei New Exclusive
EndIf
EndIf
If NetErr()
lJa:=.f.
Msgbox("Die Datenbank "+Datei+" ist in Benutzung"+CRLF+;
"Das Programm an allen Stationen beenden und erneut starten",cTitel)
Else
lJa:=.t.
EndIf
Return lJa


Datei ist die Datenbank
ex_use ist .t.

Diese Function wird dann aus den verschiedenen Bereichen aufgerufen und kann dadurch überall verwendet werden.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
michael_wetterhahn

Indizieren im Netz bzw.exclusiv öffnen erzwingen

Beitrag von michael_wetterhahn »

Hallo,

habe heute erst das Problem gelesen. In meinen Anwendungen ist es oftmals nötig das exclusive Öffnen zu erzwingen. Ich verwende eine einfache Methode ich sende ein Textmarker Beispiel: REORG als Minidatei auf das Netzlaufwerk. Die anderen User werden damit veranlasst kurzzeitig ihre Dateien zu schließen. Die sind dann in einem definierten Wartezustand mit entsprechender Meldung auf dem Bildschirm bis durch das Löschen des Textmarkers REORG sie wissen, dass sie ihre Dateien wieder öffnen können und damit weiter arbeiten können. Wenn es sich nicht um riesige Datenmengen handelt, ist das in der Regel ein kurzer überschaubarer Zeitraum. (Zeit für PIPI oder Kaffee holen)

Michael
Antworten