Gemeinsamer Betrieb Clipper und Xbase ntx

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

Moderator: Moderatoren

Antworten
Peter Schweizer
UDF-Programmierer
UDF-Programmierer
Beiträge: 81
Registriert: Do, 06. Apr 2006 10:51

Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von Peter Schweizer » Fr, 31. Mär 2017 14:53

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

Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 122
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von BJelinek » Fr, 31. Mär 2017 18:05

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.
Gruß
Bernd

Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von mini990 » Sa, 01. Apr 2017 8:37

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

Peter Schweizer
UDF-Programmierer
UDF-Programmierer
Beiträge: 81
Registriert: Do, 06. Apr 2006 10:51

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von Peter Schweizer » Mo, 03. Apr 2017 10:44

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
Zuletzt geändert von Peter Schweizer am Mo, 03. Apr 2017 18:07, insgesamt 1-mal geändert.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von AUGE_OHR » Mo, 03. Apr 2017 11:25

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

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 190
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von Klaus Schuster » Mo, 03. Apr 2017 13:31

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.
Gruß Klaus

Peter Schweizer
UDF-Programmierer
UDF-Programmierer
Beiträge: 81
Registriert: Do, 06. Apr 2006 10:51

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von Peter Schweizer » Mo, 03. Apr 2017 18:11

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

Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von mini990 » Mo, 03. Apr 2017 19:00

Welche Clipper Version ist da eingesetzt?

Gruß Stefan

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 190
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von Klaus Schuster » Mo, 03. Apr 2017 19:17

Hast Du anschliessend die alten Indexdateien gelöscht und neue erstellt?
Gruß Klaus

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von AUGE_OHR » Di, 04. Apr 2017 0:04

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

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 190
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von Klaus Schuster » Di, 04. Apr 2017 7:20

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?
Gruß Klaus

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14594
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von brandelh » Di, 04. Apr 2017 7:33

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.
Gruß
Hubert

Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von mini990 » Di, 04. Apr 2017 7:43

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

Peter Schweizer
UDF-Programmierer
UDF-Programmierer
Beiträge: 81
Registriert: Do, 06. Apr 2006 10:51

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von Peter Schweizer » Di, 04. Apr 2017 19:42

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

Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Gemeinsamer Betrieb Clipper und Xbase ntx

Beitrag von mini990 » Mi, 05. Apr 2017 10:25

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

Antworten