Seite 1 von 1

Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Fr, 31. Mär 2017 14:53
von Peter Schweizer
Hallo Gemeinde,

eine alte Clipperanwendung wurde nach Xbase migriert, es soll jedoch für eine gewiese Zeit beide Anwendungen parallel eingesetzt werden.
Nun habe ich die Xbase-Exe gestartet und zuerst alle Indexdateien (NTX) neu erstellt.

Wenn ich nun mit der Clipper-Exe starte bekomme ich an Programmstellen mit z.B. DbGoto( xy ) einen

Error DBFNTX/1210 Dateifehler festgestellt

Was mache ich falsch ?
bzw. muß ich bei der Erstellung des Index-Dateien im Xbase Programm etwas beachten ?

Gruß Peter

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Fr, 31. Mär 2017 18:05
von BJelinek
Hallo Peter,
bei gemischtem Betrieb lasse ich die NTX-Dateien
vom Clipper-Programm erstellen.
Die NTX-Dateien unterscheiden sich voneinander, auch in der Größe.
Xbase kommt damit zurecht. umgekehrt Clipper nicht.
Wenn dann nur noch Xbase, NTX-Dateien löschen und vom Xbase-Programm erstellen
lassen.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Sa, 01. Apr 2017 8:37
von mini990
Hallo Peter,
bei mir läuft ein Programm im Hybridmosua.
Teile noch in Clipper, Teile in Xbase.
Indizierung erfolgt über XBase, ein Zugriff von Clipper aus ist problemlos möglich
und läuft fehlerfrei.
Folgende Einstellungen vornehmen:

SET Optimize OFF
SET Smartfilter OFF
SET Rushmore OFF

Gruß Stefan

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Mo, 03. Apr 2017 10:44
von Peter Schweizer
Hallo Bernd und Stefan,
viellen Dank für eure Hilfe.

habe zuerst Stefans Vorschlag in das xBase Programm eingebaut und alles von xBase aus neu indizieren lassen.
Ergebniss: nach wie vor stürzt das Clipper Programm bei DbGoTo( xy) ab.

dann habe ich wie von Bernd vorgeschlagen alle Indexe im Clipper Prg aufbauen lassen.
Ergebniss: es geht !

Unsicherheit: ich weiß noch nicht ob das xBase Programm sauber mit den Clipper Indexen umgeht.
Testbetrieb läuft !

Falls also noch jemand über den Problembereich etwas weiß, bitte Info !

Gruß Peter

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Mo, 03. Apr 2017 11:25
von AUGE_OHR
Peter Schweizer hat geschrieben:dann habe ich wie von Bernd vorgeschlagen alle Indexe im Clipper Prg aufbauen lassen.
Ergebniss: es geht !
ich empfehle ebenfalls das Indiezieren mit einer Cl*pper App zu machen. (auch wenn Alaska was anderes sagt)

von Stephan solltest du bei gemeinsamen Betrieb

Code: Alles auswählen

SET Optimize OFF
SET Smartfilter OFF
SET Rushmore OFF
setzten, also alles was Cl*pper nicht kann.

Frage : VIO (ohne /PM:PM) oder Hybrid Modus ?

bei Cl*pper wurde ja mit "Wait-State" gearbeitet d.h. du hast evtl INKEY() ohne einen Wert.
solche Stellen können dafür sorgen das deine CPU 0 ( das ist die 1st CPU) bei 100% klebt ... INKEY(0.1) hilft meistens.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Mo, 03. Apr 2017 13:31
von Klaus Schuster
Hallo Peter,

ich setze verschiedene Xbase- und Clipper-Programme auf den selben Tabellen ohne Probleme parallel ein. Dies gelang erst nach langem Ringen mit folgender dbeSys:

Code: Alles auswählen

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

PROCEDURE DbeSys

   SET( _SET_COLLATION,  COLLAT_GERMAN )
   Set( _SET_DATEFORMAT, 'DD.MM.YYYY'  )

   // Engine für DBF-Dateien laden

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

   ENDIF

   // Engine für CDX-Dateien laden

   IF ! DbeLoad( "CDXDBE" , .T.)
      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

   // Aenderungen an der Data-Komponente GELTEN FUER ALLE abgeleiteten DBEs

   DbeInfo( COMPONENT_DATA, DBFDBE_LIFETIME, 0 )
   DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET, 10^9 )

   // Aenderungen an der CDX-Order-Komponente

   DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE, LOCKING_EXTENDED )
   DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKOFFSET, 10^9 )

   // Engine für NTX-Dateien laden

   IF ! DbeLoad( "NTXDBE" , .T.)
      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

   // Aenderungen an der NTX-Order-Komponente

   DbeSetDefault( 'DBFNTX' )
   DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKOFFSET, 10^9 )

   // DBF-Data-Komponente + CDX-Order-Komponenten als aktive DBE festlegen
   DbeSetDefault( 'DBFCDX' )

RETURN
Die NTX-Dateien werden ausschließlich durch eine Xbase-Applikation erstellt. Die Geschwindigkeitsteigerung ist enorm, ohne dass seit Jahren ein Problem auftrat.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Mo, 03. Apr 2017 18:11
von Peter Schweizer
Hallo Klaus
habe Deine dbesys Einträge eingebaut.
Jedoch ohne Erfolg.

Hallo Jimmy
ja der Schalter /PM:PM ist gesetzt.

Vielen dank für eure Ratschläge.
Gruß Peter

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Mo, 03. Apr 2017 19:00
von mini990
Welche Clipper Version ist da eingesetzt?

Gruß Stefan

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Mo, 03. Apr 2017 19:17
von Klaus Schuster
Hast Du anschliessend die alten Indexdateien gelöscht und neue erstellt?

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Di, 04. Apr 2017 0:04
von AUGE_OHR
Klaus Schuster hat geschrieben:Dies gelang erst nach langem Ringen mit folgender dbeSys:

Code: Alles auswählen

...
   // Engine für CDX-Dateien laden
   IF ! DbeLoad( "CDXDBE" , .T.)
      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

-> hier bist du noch auf DBFCDX

   // Aenderungen an der Data-Komponente GELTEN FUER ALLE abgeleiteten DBEs
   DbeInfo( COMPONENT_DATA, DBFDBE_LIFETIME, 0 )
   DbeInfo( COMPONENT_DATA, DBFDBE_LOCKOFFSET, 10^9 )

   // Aenderungen an der CDX-Order-Komponente
   DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE, LOCKING_EXTENDED )
   DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKOFFSET, 10^9 )

-> das ist aber NICHT Cl*pper

   // DBF-Data-Komponente + CDX-Order-Komponenten als aktive DBE festlegen
   DbeSetDefault( 'DBFCDX' )
was mich wundert bei "der" DBESYS [-X

DBFCDX kennt Cl*pper nicht. wenn du Comix oder Sixdrive meinst dann FOXCDX.

DbInfo() sollten IMHO immer nach der entsprechenden DBE eingesetzt werden wobei "default" Werte (10^9) überflüssig sind.

auch "LOCKING_EXTENDED" kennt Cl*pper nicht, deshalb würde ich es im Zweifel nicht verwenden.

DBFDBE_LIFETIME auf 0 zu setzten ist eine gute Idee wenn man Threads verwendet

Fazit : wer eine Cl*pper App auf Xbase++ umstellen will muss nicht die original DBESYS verändern sondern seinen Cl*pper Code ordentlich "anpassen"

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Di, 04. Apr 2017 7:20
von Klaus Schuster
DBFCDX kennt Cl*pper nicht. wenn du Comix oder Sixdrive meinst dann FOXCDX.
Das stimmt. Es gibt jedoch Dbf-Dateien die ausschließlich unter Xbase zum Einsatz kommen; für diese kommt DBFCDX zum Einsatz.
Werden Dateien geöffnet, die auch mit Clipper verwandt werden, wird mit dbUseArea( .T., 'DBFNTX',..) die DBFNTX herangezogen.

Fazit : wer eine Cl*pper App auf Xbase++ umstellen will muss nicht die original DBESYS verändern sondern seinen Cl*pper Code ordentlich "anpassen"[/quote]
Was verstehst Du unter einer ordentlichen Anpassung von Clipper?

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Di, 04. Apr 2017 7:33
von brandelh
Habt Ihr tatsächlich geprüft, dass die Sperren funktionieren ?

1. Wenn bei Clipper eine die OBJ für 2 GB eingelinkt wurde, muss der Lockoffset in Xbase auch angepasst werden. Hierzu gibt es unterschiedliche Angaben welche Zahl verwendet werden soll (HEX 7FFFFFFF oder 80000000 ?)
2. Unter Windows 7 müssen die Cache Werte für Metadaten gelöscht werden (also das cachen abgeschaltet), und zwar auf jeder Maschine die eine EXE ausführt (auch Terminalserver), ich meine das macht der SMB2 Patch (bin mir aber nicht sicher).
3. SMB Einstellungen (welche hab ich vergessen ;-) ) müssen stimmen, wurde häufig schon beschrieben hier.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Di, 04. Apr 2017 7:43
von mini990
Kann nur sagen dass es bei meinen Anwendern mit den o.a. Einstellungen läuft.
Auf über 110 Installationen seit über 2 Jahren.
Verwendete Clipper Version 5.1

Gruß Stefan

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Di, 04. Apr 2017 19:42
von Peter Schweizer
Hallo an alle,

zum Einsatz kommt ein Clipper 5.2
alle Index-Dateien wurden selbstverständlich neu erstell.

Inzwischen scheint es zu gehen( Erste tests sind gut).

Wie ich leidvoll erkennen mußte war aus irgendeinem Grund, der nicht nachvollziehbar ist, die prg Datei die lediglich die dbesys enthielt
aus der project.xpj verschwunden.
Ich habe zwar wie Stefan vorgeschlagen hatte die dbesys angepasst, jedoch keine positive Reaktion erfahren dürfen.
Erst ein nochmaliges debuggen hat dann die fehlende dbesys in der exe zutage gefördert.
Zu Deutsch: so ein sch........!

Nochmals vielen Dank an Alle die sich mit mir den Kopf zerbrochen haben.
Gruß Peter

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Verfasst: Mi, 05. Apr 2017 10:25
von mini990
Ich verwende DBESYS nicht, da ich bei den von Clipper und Xbase genutzten Dateien nur mit NTX arbeite.
Es reicht also die Einstellung:

SET Optimize OFF
SET Smartfilter OFF
SET Rushmore OFF

Gruß Stefan