Xbase Anwendung bringt Clipper-Clients zu Stillstand

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Xbase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Klaus Schuster »

Hallo Profis,

sobald ich mit einer Xbase++ Anwendung auf die Dateien einer Clipper-Applikation zugreife, frieren die Clipper-Anwendungen ein. Die Clipper-Programme laufen auf win7 in virtuellen Xp-Maschinen. SMB2 habe ich mit dem Tool von Alaska auf den Clients konfiguriert. Im xBase-Programm stelle folgende Schalter:

Set( _SET_EPOCH, 2000 )
Set( _SET_CENTURY, TRUE )
Set( _SET_DATEFORMAT, 'DD.MM.YYYY' )
Set( _SET_DELETED, TRUE )
Set( _SET_OPTIMIZE, FALSE )
Set( _SET_RUSHMORE, FALSE )
Set( _SET_SMARTFILTER, FALSE ).

Die dbeSys sieht so aus

Code: Alles auswählen

#include "DbfDbe.CH"
#include "DMLB.CH"
#include "Collat.CH"
#include "Set.ch"

PROCEDURE dbeSys()

   SET( _SET_COLLATION, COLLAT_SYSTEM )

   // Engine für DBF-Dateien laden

   IF ! DbeLoad( "DBFDBE", .T.)
      ksMsgBox( "Database Engine DBFDBE nicht geladen", "DB-Fehler" )
   ENDIF

   // Engine für CDX-Dateien laden

   IF ! DbeLoad( "CDXDBE" , .T.)
      ksMsgBox( "Database Engine CDXDBE nicht geladen", "DB-Fehler" )

   ENDIF

   // Engines für Datensatz- und Index-Management zusammenfügen

   IF ! DbeBuild( "DBFCDX", "DBFDBE", "CDXDBE" )
      ksMsgBox( "Database Engine DBFCDX nicht erzeugt", "DB-Fehler" )
   ENDIF

   DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE, LOCKING_EXTENDED )
   DbeInfo( COMPONENT_DATA,  DBFDBE_LIFETIME, 0 )

   // Engine für NTX-Dateien laden

   IF ! DbeLoad( "NTXDBE" , .T.)
      ksMsgBox( "Database Engine NTXDBE nicht geladen", "DB-Fehler" )

   ENDIF

   // Engines für Datensatz- und Index-Management zusammenfügen

   IF ! DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" )
      ksMsgBox( "Database Engine DBFNTX nicht erzeugt", "DB-Fehler" )

   ENDIF

   DbeSetDefault( "DBFNTX" )

RETURN
Was kann ich noch tun?
Gruß Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von georg »

Hallo, Klaus -


wie öffnest Du die Dateien?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Klaus Schuster »

Hallo Georg,

r/w und shared.
Gruß Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von georg »

Hallo, Klaus -


wenn der Effekt so gut nachvollziehbar ist, würde ich hingehen, das Xbase++-Programm im Debugger öffnen und mal schrittweise durchgehen und prüfen, ab welcher Anweisung die Clipper-Programme einfrieren.

Zur Not kann man ja auch ein Test-Programm schreiben, in dem man eventuell nur eine Datei öffnet.

Mlöglicherweise gibt Dir das einen ersten Anhaltspunkt, wo Du ansetzen musst, denn der Effekt scheint mir (zumindest aus dem Gedächtnis) hier noch nicht diskutiert worden zu sein, so dass ich auf eine Konstellation in dem betreffenden Programm tippen würde.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Tom »

Es könnte am Extended Locking liegen. Clipper unterstützt das nicht. Und dann war da noch etwas mit Lock-Offsets <grübel>.
Herzlich,
Tom
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von brandelh »

unterstützt denn Clipper eine Mischung von DBF und CDX Index ? ... JA mit der DBFCDX RDD ...
unterstützt Xbase DBFCDX ohne Anpassung alle Varianten der DBFCDX RDD ? ... laut Beschreibung ja, es soll sogar die richtige Einstellung vorgenommen werden ...
CDXDBE_MODE

Die CDX DatabaseEngine ist in der Voreinstellung 100% Visual FoxPro kompatibel. ...
Die nachfolgende Tabelle führt alle verfügbaren Einstellungen für die Konstante CDXDBE_MODE auf:
CDXDBE_VFOXPRO Visual FoxPro 5.x und neuere Versionen
CDXDBE_COMIX Comix für Clipper RDD
CDXDBE_SIX Six für Clipper RDD
CDXDBE_FOXPRO2X FoxPro 2.x kompatibilität
*) ro=READONLY , a=ASSIGNABLE
...
Hinweis: Beim Öffnen einer CDX Datei mittels OrdListAdd(), DbSetIndex() oder SET INDEX TO wird durch die CDX DatabaseEngine automatisch
der jeweilige Betriebsmodus (Visual FoxPro, Comix oder Six) ermittelt.
das sollte also nicht das Problem sein, aber prüfen kann nichts schaden.
DBE_LOCKMODE
Mit der Konstante DBE_LOCKMODE kann das Verfahren für implizite Dateisperren vorgegeben werden. Wann immer auf die Index-Datei zugegriffen wird, erfolgt eine implizite Dateisperre um die Integrität der Operation zu gewährleisten. Voreingestellt für DBE_LOCKMODE ist LOCKING_STANDARD - ein Clipper und FoxPro kompatibles Verfahren. Das Standardverfahren ist jedoch im Kontext moderner Hardware nicht sehr effizient. Wird LOCKING_EXTENDED eingestellt, so erhöht sich die Performance von Such- und Navigations-Operationen erheblich ...
aber LOCKING_EXTENDED kann nicht mehr mit Clipper zusammen eingesetzt werden !

Zusätzlich muss auch der LOCK_OFFSET bei beiden gleich sein ... solange man NTXLOCK2.OBJ nicht gelinkt hat müsste es automatisch stimmen,
ansonsten erhöhen (wobei der genaue Wert unterschiedlich angegeben wird).

PS: ich habe gerade festgestellt, das auf dem aktuellen Entwicklungsrechner das Unterverzeichnis OBJ unter CL5 fehlt ... da habe ich wohl zuviel "optimiert" ;-)
Gruß
Hubert
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Klaus Schuster »

Herzlichen Dank für euere Ideen!

Das Problem scheint mit großer Wahrscheinlichkeit durch einen Filter ausgelöst worden zu sein. Seit dem ich diesen ersetzt habe, läuft die Applikation, ohne die Clipper-Programme einzuschränken. Es kommt zu vereinzelten Stockung, diese aber in einem weitaus geringerem Umfang als vorher. Sollte ich noch etwas herausfinden, werde ich es mitteilen.

Sorry Leute, dass ich nicht erwähnt habe, dass die CDXDBE ausschließlich für Dateien eingesetzt wird, die nicht von Clipper geöffnet werden. Ich gebe bei jeder Datei an, mit welcher DBE diese geöffnet werden soll. Somit dürfte Extended Locking keine Auswirkungen haben.

Danke nochmals!
Gruß Klaus
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von AUGE_OHR »

Klaus Schuster hat geschrieben:Was kann ich noch tun?
Ich würde NICHT mit deiner DBESYS arbeiten wollen ... da ist ja alles durcheinander !

zunächst fängst du mit "DBFDBE" an ... aber machst es nicht zu Ende. Vielmehr "streust" du nun die "CDXDBE" ein.
Dann verwendest du DbeInfo() ... auf was soll die "wirken" ?

und "jetzt" lädst du "NTXDBE" ... auf welche DBE das wohl geht ( bei der Reihenfolge ) ?

was den gemeinsamen Betrieb mit Cl*pper angeht wurde ja schon vom Lock-Offset gesprochen ... stimmt der bei dir ?
gruss by OHR
Jimmy
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Klaus Schuster »

Hallo Jimmy,

Danke für Deine Antwort, doch Du verwirrst mich ganz. Diese dbeSys ist nahezu identisch mit der Beispielversion unter \Alaska\XPPW32\SOURCE\samples\apps\MdiDemo. Was, denkst Du, ist daran so falsch?
Der Lock-Offset sollte okay sein, da keine Tabelle größer als 200 MB ist.
Gruß Klaus
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von AUGE_OHR »

Klaus Schuster hat geschrieben:... nahezu identisch
wie schon gesagt "gefällt" mir deine Reihenfolge nicht. Ich baue die so auf :

1.) DATA Komponente
2.) ORDER Komponente
3.) zusammenbauen
4.) evtl. DbInfo()

und für die nächste DBE wieder bei 1.) anfangen
gruss by OHR
Jimmy
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Klaus Schuster »

Hallo Jimmy,

da beide Compound-DBEs von der selben Data Komponente abgeleitet sind, muss (und kann) ich Schritt 1 nur einmal ausführen. Der Rest entspricht Deinem Vorgehen. Oder ist mir etwas entgangen?
Gruß Klaus
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von AUGE_OHR »

hi,

es gibt als DATA-Komponente :
DBFDBE
FOXDBE
DELDBE
SDFDBE

und als ORDER-Komponente :
NTXDBE
CDXDBE
DBFDBE (DATA-Komponente)
Die DatabaseEngine DBFDBE verwaltet Dateien im DBF-Format.
...
Die DBFDBE wird bei Xbase++ als DATA-Komponente der Compound-DBE DBFNTX verwendet,
...
Zusätzlich verwaltet die DBFDBE Memo-Dateien, die den Text von Memo-Feldern beinhalten.
FOXDBE (DATA-Komponente)
Die DatabaseEngine FOXDBE verwaltet DBF/FPT Tabellen welche kompatibel zu Visual FoxPro, FoxPro 2.x, Comix und SIX Clipper sind.
in deinem Code sehe ich nun

Code: Alles auswählen

IF ! DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" ) // richtig
...
IF ! DbeBuild( "DBFCDX", "DBFDBE", "CDXDBE" ) // hm ... was soll das werden ?
du verwendest 2 x die DATA Komponente DBFDBE ...
gruss by OHR
Jimmy
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von brandelh »

NA und ?

er kann doch einmal DBFNTX Dateien öffnen und bei anderen die moderneren DBFCDX Teile nutzen.
Ich meine sogar ein Beispiel mit SDF und NTX gesehen zu haben, ob das Sinn macht muss aber jeder selbst entscheiden.
Gruß
Hubert
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von AUGE_OHR »

brandelh hat geschrieben:NA und ?
auf die selbe DBE Komponente verschiedene ORDER-Komponenten ??? [-X
brandelh hat geschrieben:er kann doch einmal DBFNTX Dateien öffnen und bei anderen die moderneren DBFCDX Teile nutzen.
wenn ich die DBFCDX ORDER-Komponente verwenden dann die FOXDBE DATA-Komponente den sonst bin ich ja nicht kompatibel zu
Visual FoxPro, FoxPro 2.x, Comix und SIX
brandelh hat geschrieben:Ich meine sogar ein Beispiel mit SDF und NTX gesehen zu haben, ob das Sinn macht muss aber jeder selbst entscheiden.
SDF läuft über DbExport und hat keine ORDER-Komponente.
gruss by OHR
Jimmy
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von brandelh »

Hallo Jimmy,

was du schreibst ist schlicht falsch. Lies mal "DatabaseEngines und Programmiersprache" NTXDBE und CDXDBE sind genauso eingenständige Objekte wie DBFDBE und FOXDBE etc.
Die Order und die Daten DBEs können zu jeder Kombination gemischt und auch einzeln verwendet werden.
DBFNTX und DBFCDX kommen sich nicht in die Quere, wobei natürlich nur der DBFNTX und der FOXCDX mit Clipper kompatibel ist:
Die Verteilung bestimmter Funktionalitäten auf Component-DBEs und die Möglichkeit, alle Funktionalitäten dynamisch durch eine Compound-DBEs bereitzustellen, bietet eine enorme Flexibilität bei der Daten- und Dateiverwaltung. So kann z.B. ein Index für eine Datei erzeugt werden, die im SDF-Format vorliegt (System Data Format). Dazu braucht lediglich die NTXDBE (ORDER-Komponente) an die SDF-DatabaseEngine (DATA-Komponente) gekoppelt zu werden. Das Resultat ist eine SDFNTX-DatabaseEngine, die eine logische Sortierung von ASCII-Dateien ermöglicht, welche im SDF-Format vorliegen.
Die "Compound-DBE" DBFNTX kann ohne Probleme zusammen mit DBFCDX oder FOXCDX benutzt werden (über den DBE Parameter).

Code: Alles auswählen

DbUseArea( [<lNewArea>]        , ; 
           [<cDBE>|<oSession>] , ; 
            <cFileName>        , ; 
           [<cAlias>]          , ; 
           [<lShared>]         , ; 
           [<lReadonly>]  )  --> NIL 
Gruß
Hubert
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von AUGE_OHR »

hi,

das man SDFDBE zusammen mit DBFNTX benutzen kann war mir nicht klar.
es ist richtig das man jede ORDER-Komponente an eine DATA-Komponente binden kann, aber wenn die nicht kompatibel sind macht das keinen Sinn.

Die Frage die ich auf-warf war ob man die selbe DATA-Komponente mit verschiedenen ORDER-Komponenten ausstatten kann ?

wo ich noch Probleme sehe sind die DbInfo Komponenten da ein DbeBuild() nicht automatisch ein DbeSetDefault() mit sich bringt.
( zumindest nicht in den älteren Xbase++ Versionen s.h. Alaska-News "DbeBuild" )

ich baue die DBESYS deshalb so auf

Code: Alles auswählen

#include "DBFDBE.CH"
#include "NTXDBE.CH"
#include "FOXDBE.CH"
#include "CDXDBE.CH"

PROCEDURE dbeSys()

SET COLLATION TO GERMAN
SET DATE TO GERMAN

if .not. DbeLoad('DBFDBE', .t.)
   ConfirmBox(NIL, 'Database engine "DBFDBE" was not loaded...')
endif
if .not. DbeLoad('NTXDBE', .t.)
   ConfirmBox(NIL, 'Database engine "NTXDBE" was not loaded...')
endif

if DbeBuild('DBFNTX', 'DBFDBE', 'NTXDBE')
   DbeSetDefault('DBFNTX')
   DbeInfo( COMPONENT_DATA,  DBFDBE_LOCKRETRY,     xx) // default 3
   DbeInfo( COMPONENT_DATA,  DBFDBE_LOCKDELAY,     xx) // default 25
   DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKRETRY, xxxxxx) // default 100000
   DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKDELAY,     xx) // default 15 
   // Cli*pper
   DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE, LOCKING_STANDARD)
else
   ConfirmBox(NIL, 'Compound database engine "DBFNTX" not created...')
endif

if .not. DbeLoad('FOXDBE', .t.)
   ConfirmBox(NIL, 'Database engine "FOXDBE" was not loaded...')
endif
if .not. DbeLoad('CDXDBE', .t.)
   ConfirmBox(NIL, 'Database engine "CDXDBE" was not loaded...')
endif

if DbeBuild('FOXCDX', 'FOXDBE', 'CDXDBE')
   DbeSetDefault('FOXCDX')
*   DbeInfo( COMPONENT_DATA, FOXDBE_CREATE_2X, .T. ) // FoxPro 2.x kompatibilität
*   DbeInfo( COMPONENT_DATA, FOXDBE_LOCKMODE, FOXDBE_LOCKMODE_2X )
   DbeInfo( COMPONENT_DATA, FOXDBE_LOCKRETRY,     xx) // default 3
   DbeInfo( COMPONENT_DATA, FOXDBE_LOCKDELAY,     xx) // default 25

*   DbeInfo( COMPONENT_ORDER, CDXDBE_MODE, CDXDBE_FOXPRO2X ) // FoxPro 2.x
   DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKRETRY, xxxxxx) // default 100000
   DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKDELAY,     xx) // default 15 
   DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE, LOCKING_EXTENDED)
else
   ConfirmBox(NIL, 'Compound database engine "FOXCDX" not created...')
endif

DbeSetDefault('DBFNTX')

RETURN
gruss by OHR
Jimmy
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Klaus Schuster »

AUGE_OHR hat geschrieben: Die Frage die ich auf-warf war ob man die selbe DATA-Komponente mit verschiedenen ORDER-Komponenten ausstatten kann ?
Positiv. Eine Data-Komponente kann mit verschiedenen Order-Komponenten zu CompoundDbes zusammengesetzt werden. Zu beachten ist nur, dass Änderungen in der DATA-Komponente sich stets auf die Compound-Dbes auswirken.

Die Ausgabe eines kleinen Testprogramms:

Code: Alles auswählen

#include "Common.CH"
#include "CdxDbe.CH"
#include "DbfDbe.CH"
#include "DMLB.CH"
#include "NtxDbe.CH"
#include "Set.ch"

PROCEDURE AppSys

   SET DATE GERMAN
   SET( _SET_COLLATION, COLLAT_GERMAN )

   SET EXCLUSIVE ON
   SET RUSHMORE OFF
   SET SMARTFILTER OFF
   SET OPTIMIZE OFF

RETURN



PROCEDURE DbeSys

   // DATA-Komponente-Engine für DBF-Dateien laden

   IF ! DbeLoad( "DBFDBE", FALSE )
      MsgBox( "Database Engine DBFDBE nicht geladen", "DB-Fehler" )

   ENDIF

   // ORDER-Komponente-Engine für CDX-Dateien laden

   IF ! DbeLoad( "CDXDBE", FALSE )
      MsgBox( "Database Engine CDXDBE nicht geladen", "DB-Fehler" )

   ENDIF

   // Engines für Datensatz- und Index-Management zusammenfügen

   IF ! DbeBuild( "DBFCDX", "DBFDBE", "CDXDBE" )
      MsgBox( "Database Engine DBFCDX nicht erzeugt", "DB-Fehler" )

   ENDIF

   // ORDER-Komponente-Engine für NTX-Dateien laden

   IF ! DbeLoad( "NTXDBE", FALSE )
      MsgBox( "Database Engine NTXDBE nicht geladen", "DB-Fehler" )

   ENDIF

   // Engines für Datensatz- und Index-Management zusammenfügen

   IF ! DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" )
      MsgBox( "Database Engine DBFCDX nicht erzeugt", "DB-Fehler" )

   ENDIF

RETURN



PROCEDURE Main

   SET PRINTER TO DbeInfo.Txt
   SET PRINTER ON

   ? PadR( "DBES", 22 ), DbeList()
   ? PadR( "Collation", 22 ), SetCollation()
   ?

   DbeSetDefault("DBFCDX")
   ? "Compound-Dbe DBFCDX abfragen"
   ? 'DbeSetDefault("DBFCDX")'
   ?
   ? PadR( "DBFDBE_MEMOFILE_EXT", 22 ),  DbeInfo( COMPONENT_DATA, DBFDBE_MEMOFILE_EXT )
   ? PadR( "DBFDBE_MEMOBLOCKSIZE", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_MEMOBLOCKSIZE )
   ? PadR( "DBFDBE_LOCKMODE", 22 ),      DbeInfo( COMPONENT_DATA, DBFDBE_LOCKMODE )
   ? PadR( "DBFDBE_LOCKOFFSET", 22 ),    DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )
   ? PadR( "DBFDBE_LOCKRETRY", 22 ),     DbeInfo( COMPONENT_DATA, DBFDBE_LOCKRETRY )
   ? PadR( "DBFDBE_LOCKDELAY", 22 ),     DbeInfo( COMPONENT_DATA, DBFDBE_LOCKDELAY )
   ? PadR( "DBFDBE_LOCKRETRY_MIN", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKRETRY_MIN )
   ? PadR( "DBFDBE_LOCKDELAY_MIN", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKDELAY_MIN )
   ? PadR( "DBFDBE_CACHESIZE", 22 ),     DbeInfo( COMPONENT_DATA, DBFDBE_CACHESIZE )
   ? PadR( "DBFDBE_LIFETIME", 22 ),      DbeInfo( COMPONENT_DATA, DBFDBE_LIFETIME )
   ? PadR( "DBFDBE_ANSI", 22 ),          DbeInfo( COMPONENT_DATA, DBFDBE_ANSI )
   ?
   ? PadR( "CDXDBE_LOCKOFFSET", 22 ),    DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKOFFSET )
   ? PadR( "CDXDBE_LOCKRETRY", 22 ),     DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKRETRY )
   ? PadR( "CDXDBE_LOCKDELAY", 22 ),     DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKDELAY )
   ? PadR( "CDXDBE_LIFETIME", 22 ),      DbeInfo( COMPONENT_ORDER, CDXDBE_LIFETIME )
   ? PadR( "CDXDBE_LOCKRETRY_MIN", 22 ), DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKRETRY_MIN )
   ? PadR( "CDXDBE_LOCKDELAY_MIN", 22 ), DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKDELAY_MIN )
   ? PadR( "CDXDBE_MODE", 22 ),          DbeInfo( COMPONENT_ORDER, CDXDBE_MODE )
   ?
   DbeSetDefault("DBFNTX")
   ? "Compound-Dbe DBFNTX abfragen"
   ? 'DbeSetDefault("DBFNTX")'
   ?
   ? PadR( "DBFDBE_MEMOFILE_EXT", 22 ),  DbeInfo( COMPONENT_DATA, DBFDBE_MEMOFILE_EXT )
   ? PadR( "DBFDBE_MEMOBLOCKSIZE", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_MEMOBLOCKSIZE )
   ? PadR( "DBFDBE_LOCKMODE", 22 ),      DbeInfo( COMPONENT_DATA, DBFDBE_LOCKMODE )
   ? PadR( "DBFDBE_LOCKOFFSET", 22 ),    DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )
   ? PadR( "DBFDBE_LOCKDELAY", 22 ),     DbeInfo( COMPONENT_DATA, DBFDBE_LOCKDELAY )
   ? PadR( "DBFDBE_LOCKRETRY", 22 ),     DbeInfo( COMPONENT_DATA, DBFDBE_LOCKRETRY )
   ? PadR( "DBFDBE_CACHESIZE", 22 ),     DbeInfo( COMPONENT_DATA, DBFDBE_CACHESIZE )
   ? PadR( "DBFDBE_LIFETIME", 22 ),      DbeInfo( COMPONENT_DATA, DBFDBE_LIFETIME )
   ? PadR( "DBFDBE_LOCKDELAY_MIN", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKDELAY_MIN )
   ? PadR( "DBFDBE_LOCKRETRY_MIN", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKRETRY_MIN )
   ? PadR( "DBFDBE_ANSI", 22 ),          DbeInfo( COMPONENT_DATA, DBFDBE_ANSI )
   ?
   ? PadR( "NTXDBE_LOCKOFFSET", 22 ),    DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKOFFSET )
   ? PadR( "NTXDBE_LOCKRETRY", 22 ),     DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKRETRY )
   ? PadR( "NTXDBE_LOCKDELAY", 22 ),     DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKDELAY )
   ? PadR( "NTXDBE_LOCKRETRY_MIN", 22 ), DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKRETRY_MIN )
   ? PadR( "NTXDBE_LOCKDELAY_MIN", 22 ), DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKDELAY_MIN )
   ? PadR( "NTXDBE_SIGN", 22 ),          DbeInfo( COMPONENT_ORDER, NTXDBE_SIGN )

   DbeSetDefault("DBFDBE")
   ?
   ? "In der DBFDBE, COMPONENT_DATA, DBFDBE_LOCKOFFSET auf 0x80000000 setzen und abfragen"
   ? 'DbeSetDefault("DBFDBE")'
   DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET, 0x80000000 )
   ? PadR( "DBFDBE_LOCKOFFSET", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )

   DbeSetDefault("DBFCDX")
   ?
   ? "In der DBFCDX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen"
   ? 'DbeSetDefault("DBFCDX")'
   ? PadR( "CDXDBE_LOCKOFFSET", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )

   DbeSetDefault("DBFNTX")
   ?
   ? "In der DBFNTX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen"
   ? 'DbeSetDefault("DBFNTX")'
   ? PadR( "NTXDBE_LOCKOFFSET", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )

   DbeSetDefault("DBFNTX")
   ?
   ? "NUR in der DBFNTX, COMPONENT_DATA, DBFDBE_LOCKOFFSET auf 10^2 setzen und abfragen"
   ? 'DbeSetDefault("DBFNTX")'
   DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET, 10^9 )
   ? PadR( "DBFDBE_LOCKOFFSET", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )

   DbeSetDefault("DBFCDX")
   ?
   ? "In der DBFCDX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen"
   ? 'DbeSetDefault("DBFCDX")'
   ? PadR( "CDXDBE_LOCKOFFSET", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )

   DbeSetDefault("DBFNTX")
   ?
   ? "In der DBFNTX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen"
   ? 'DbeSetDefault("DBFNTX")'
   ? PadR( "NTXDBE_LOCKOFFSET", 22 ), DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET )

   SET PRINTER OFF
   SET PRINTER TO

RETURN
zeigt dies deutlich auf:
  • DBES {{DBFDBE, N}, {CDXDBE, N}, {DBFCDX, N}, {NTXDBE, N}, {DBFNTX, N}}
    Collation 1

    Compound-Dbe DBFCDX abfragen
    DbeSetDefault("DBFCDX")

    DBFDBE_MEMOFILE_EXT DBT
    DBFDBE_MEMOBLOCKSIZE 512
    DBFDBE_LOCKMODE 1
    DBFDBE_LOCKOFFSET 1000000000
    DBFDBE_LOCKRETRY 100000
    DBFDBE_LOCKDELAY 15
    DBFDBE_LOCKRETRY_MIN 5
    DBFDBE_LOCKDELAY_MIN 1
    DBFDBE_CACHESIZE 128
    DBFDBE_LIFETIME 50
    DBFDBE_ANSI N

    CDXDBE_LOCKOFFSET 2147483646
    CDXDBE_LOCKRETRY 100000
    CDXDBE_LOCKDELAY 15
    CDXDBE_LIFETIME 50
    CDXDBE_LOCKRETRY_MIN 5
    CDXDBE_LOCKDELAY_MIN 1
    CDXDBE_MODE 1

    Compound-Dbe DBFNTX abfragen
    DbeSetDefault("DBFNTX")

    DBFDBE_MEMOFILE_EXT DBT
    DBFDBE_MEMOBLOCKSIZE 512
    DBFDBE_LOCKMODE 1
    DBFDBE_LOCKOFFSET 1000000000
    DBFDBE_LOCKDELAY 15
    DBFDBE_LOCKRETRY 100000
    DBFDBE_CACHESIZE 128
    DBFDBE_LIFETIME 50
    DBFDBE_LOCKDELAY_MIN 1
    DBFDBE_LOCKRETRY_MIN 5
    DBFDBE_ANSI N

    NTXDBE_LOCKOFFSET 1000000000
    NTXDBE_LOCKRETRY 100000
    NTXDBE_LOCKDELAY 15
    NTXDBE_LOCKRETRY_MIN 5
    NTXDBE_LOCKDELAY_MIN 1
    NTXDBE_SIGN 6

    In der Component-DBE DBFDBE, COMPONENT_DATA, DBFDBE_LOCKOFFSET auf 0x80000000 setzen und abfragen
    DbeSetDefault("DBFDBE")
    DBFDBE_LOCKOFFSET -2147483648

    In der DBFCDX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen
    DbeSetDefault("DBFCDX")
    CDXDBE_LOCKOFFSET -2147483648

    In der DBFNTX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen
    DbeSetDefault("DBFNTX")
    NTXDBE_LOCKOFFSET -2147483648

    NUR in der DBFNTX, COMPONENT_DATA, DBFDBE_LOCKOFFSET auf 10^2 setzen und abfragen
    DbeSetDefault("DBFNTX")
    DBFDBE_LOCKOFFSET 1000000000

    In der DBFCDX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen
    DbeSetDefault("DBFCDX")
    CDXDBE_LOCKOFFSET 1000000000

    In der DBFNTX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen
    DbeSetDefault("DBFNTX")
    NTXDBE_LOCKOFFSET 1000000000
AUGE_OHR hat geschrieben:wo ich noch Probleme sehe sind die DbInfo Komponenten da ein DbeBuild() nicht automatisch ein DbeSetDefault() mit sich bringt.
Bedauerlich, dass man kein Alias ähnliches Konstrukt verwenden kann.
Gruß Klaus
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von brandelh »

Da gibt es kein Problem !

die "Compound database engine" ist / erzeugt ein Objekt, das sich um Datenbanken dieses Typs kümmert.
So wie 3 Fenster vom Typ XbpDialog gleichzeitig existieren können, können auch DBFNTX und DBFCDX und FOXCDX gleichzeitig agieren.
Das braucht man z.B. wenn man eine Anwendung teilweise umstellt oder Daten konvertiert.

DbeSetDefault() wird per Definition NICHT von DbeBuild ausgeführt, da dieses mehrere Objekte erzeugen kann, dabei aber die aktuelle Laufzeitumgebung nicht automatisch ändern darf.
DbeSetDefault() wird genau einmal am Ende aufgerufen, weil es EINE als Standard definiert, ähnlich wie SetAppWindow() ... man kann es natürlich ändern.

Klaus war schneller ;-)

von der REINEN Objektleere hätte ich beim combound etwas anderes erwartet, vielleicht trifft dies bei anderen Einstellungen auch zu ...
andererseits, es macht einfach keinen Sinn verschiedene Werte bei DBFs zu haben (lockoffset der DBF muss in der Anwendung identisch sein, egal welcher Index verwendet wird).
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Xbase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von Jan »

Eine Ergänzung zu Huberts Aussage zu SDF und NTX: Mit der SDFDBE klappt das. Mit der DELDBE dagegen kann man aber nicht mit Indizee arbeiten, das läßt die Databaseengine nicht zu. Das ist etwas verwirrend und ist leicht überlesbar im Fließtest der Onlinedoku versteckt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: Xbase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von brandelh »

Ich sag aber gleich dazu, dass ich sowas NICHT mache, wenn ich Textdateien (SDF oder DELIM) habe, lade ich die mit meinen Funktionen in Arrays und nutze das direkt ;-)
Gruß
Hubert
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: xBase Anwendung bringt Clipper-Clients zu Stillstand

Beitrag von AUGE_OHR »

Klaus Schuster hat geschrieben:In der Component-DBE DBFDBE, COMPONENT_DATA, DBFDBE_LOCKOFFSET auf 0x80000000 setzen und abfragen
DbeSetDefault("DBFDBE")
DBFDBE_LOCKOFFSET -2147483648

In der DBFCDX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen
DbeSetDefault("DBFCDX")
CDXDBE_LOCKOFFSET -2147483648

In der DBFNTX, COMPONENT_DATA, DBFDBE_LOCKOFFSET abfragen
DbeSetDefault("DBFNTX")
NTXDBE_LOCKOFFSET -2147483648
meinst du das ein Lockoffset NEGATIV sein kann ?
gruss by OHR
Jimmy
Antworten