cdx anstatt ntx [ERLEDIGT]

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

cdx anstatt ntx [ERLEDIGT]

Beitrag von Koverhage »

Bei den Diskussionen hier wird mir richtig schwindelig ;-)

Ich möchte bzw. sollte (wegen öfters mal Probleme mit defekten Indexdateien) von NTX auf CDX umstellen.

Die DBF Dateien liegen im OEM (DOS) Format vor, die Memodateien im DBT Format.

Ich möchte nur die NTX Dateien durch CDX Dateien ersetzen, wobei alle NTX Dateien dann in einer CDX Datei sein sollen.

Eine Änderung der DBF Datei in ANSI (Windows) wäre zwar wünschenswert,
dann würde die interne Konvertierung von DOS in ANSI entfallen und somit Zeit sparen
oder täusche ich mich da ?

Eine DBE laden
Was muss ich alles machen, derzeit lade ich keine DBE, Standard ist ja NTX ?

INDEX ON
ersetzen durch
?

DBSEEK key, softseek, nIndex
ersetzen druch
DBSEEK key, softseek, TAGNAME

Habe ich noch was vergessen ?
Zuletzt geändert von Koverhage am Fr, 19. Jun 2015 7:19, insgesamt 1-mal geändert.
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: cdx anstatt ntx

Beitrag von Manfred »

hi Klaus,

so könnte eine dbesys aussehe

Code: Alles auswählen

PROCEDURE dbeSys()
          LOCAL aDbesBuild := {}
          LOCAL aDbesLoad  := {}
          LOCAL nI

          // Datakomponenten
          AAdd(aDbesLoad,{"DBFDBE",.T.})
          AAdd(aDbesLoad,{"FOXDBE",.T.})
          AAdd(aDbesLoad,{"DELDBE",.F.})
          AAdd(aDbesLoad,{"SDFDBE",.F.})

          // OrderKommponenten
          AAdd(aDbesLoad,{"CDXDBE",.T.})
          AAdd(aDbesLoad,{"NTXDBE",.T.})

          SET COLLATION TO GERMAN                                               // setzen der Sortierreihenfolge und des Datumsformates

          FOR nI := 1 TO LEN(aDbesLoad)
              IF ! DbeLoad( aDbesLoad[nI][1], aDbesLoad[nI][2])
                 Alert( aDbesLoad[nI][1] + MSG_DBE_NOT_LOADED , {"OK"} )
              ENDIF
          NEXT

          // "Name der neuen Engine","Name der benötigten DataDBE","Name der benötigten OrderDBE"
          AAdd(aDbesBuild,{"DBFCDX","DBFDBE","CDXDBE"} )
          AAdd(aDbesBuild,{"DBFNTX","DBFDBE","NTXDBE"} )
          AAdd(aDbesBuild,{"FOXCDX","FOXDBE","CDXDBE"} )

          FOR nI := 1 TO Len(aDbesBuild)
              IF ! DbeBuild( aDbesBuild[nI][1],aDbesBuild[nI][2],aDbesBuild[nI][3] )
                 Alert( aDbesBuild[nI][1] + MSG_DBE_NOT_CREATED , {"OK"} )
              ENDIF
          NEXT
          DbeSetDefault("DBFCDX")                                               // muß jeweils vor DbeInfo()
          DbeInfo( COMPONENT_DATA,  DBFDBE_LIFETIME,0)                          // Verweildauer von Records im lokalen Cache
//          DbeInfo( COMPONENT_DATA,  DBFDBE_ANSI,.T.)                            // damit alle DB im Ansi Modus bearbeitet werden
          DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE,LOCKING_EXTENDED)              // macht das die Massenabfertigung schneller? (29.10.2008)

          DbeSetDefault("FOXCDX")                                               // muß jeweils vor DbeInfo()
          DbeInfo( COMPONENT_DATA,  FOXDBE_LIFETIME,0)                          // Verweildauer von Records im lokalen Cache
          DbeInfo( COMPONENT_DATA,  DBFDBE_ANSI,.T.)                            // damit alle DB im Ansi Modus bearbeitet werden
          DbeInfo( COMPONENT_ORDER, FOXDBE_LOCKMODE,LOCKING_EXTENDED)           // macht das die Massenabfertigung schneller? (29.10.2008)
          RETURN
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Wolfgang Ciriack »

Ganz wichtig ist dann beim neuen Erzeugen der Indexdateien ein explizites Löschen der cdx-Dateien, sonst werden die tags hinten angehängt und irgendwann ist dann die Datei zu groß. Das war bei ntx ja anders.
Viele Grüße
Wolfgang
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Koverhage »

Habe das jetzt mal versucht, bekomme allerdings beim DbeLoad
schon einen Runtime Error.
Was mache ich falsch ?

Code: Alles auswählen

#include "AppEvent.ch"
#include "Common.ch"
#include "Inkey.ch"
#include "Gra.ch"
#include "Xbp.ch"
#include "dll.ch"
#include "nls.ch"
#include "font.ch"
#include 'bap.ch'
#include 'dmlb.ch'
#include 'directry.ch'
#include "Fileio.ch"

#include "activex.ch"
#include "excel.ch"
// Include the Automation Support Library
#pragma library( "ascom10.lib" )

******************************************************************************
* Application's Main() Procedure
******************************************************************************
PROCEDURE Main()
LOCAL oApp      := {},;
      nWSCount  := 0,;
      oSheet    := {},;
      nRow      := 8237,;
      nCol      := 0,;
      aValues   := {},;
      I         := 0,;
      J         := 0,;
      K         := 0,;
      N         := 0,;
      cPlz      := space(5),;
      cvonDatum := space(10),;
      cbisDatum := space(10),;
      cError := " ", ;
      nKlFakt   := 00.00,;
      nWorkArea := 0, ;
      xValue    := NIL


set excl OFF
//SET TALK OFF
//set cons OFF
setcancel( .F. )
set conf on
set wrap on
set exac OFF
set scor OFF
//set inte on
set dele on
set epoch to 1980
set century on
set date GERMAN

   IF ! DbeLoad( "DBFDBE", .T.)
      MsgBox("Database-Engine DBFDBE wurde nicht geladen")
   ENDIF
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\klimacdx\XLS1.EXE" Datum: 11.06.2015 10:24:57

Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 3
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: DBFDBE
-> VALTYPE: L VALUE: .T.
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Ungültiger Dateiname für DBE-DLL
oError:filename :
oError:genCode : 52
oError:operation : DbeLoad
oError:osCode : 0
oError:severity : 2
oError:subCode : 8009
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von MAIN(102)
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: cdx anstatt ntx

Beitrag von Manfred »

Du hast die dbesys kompiliert und getrennt angegeben in Deinem projekt?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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:

Re: cdx anstatt ntx

Beitrag von Rolf Ramacher »

Hi Klaus

so sieht meine Dbesys - aus

Code: Alles auswählen

PROCEDURE DbeSys 
#include "DbfDbe.ch" 
#include "Dmlb.Ch"
 
 
   IF ! DbeLoad( "DBFDBE", .T.)      // Engine für DBF-Dateien laden 
      ALERT( "Database Engine DBFDBE nicht geladen" , {"OK"} ) 
   ENDIF 
 
   IF ! DbeLoad( "CDXDBE" , .T.)     // Engine für CDX-Dateien laden 
      ALERT( "Database Engine CDXDBE nicht geladen" , {"OK"} ) 

   ENDIF 
                                     // Engines für Datensatz- und 
                                     // Index-Management zusammenfügen 
   IF ! DbeBuild( "DBFCDX", "DBFDBE", "CDXDBE" ) 
      ALERT( "Database Engine DBFCDX nicht erzeugt" , {"OK"} ) 
   ENDIF 
 
	DbeSetDefault("DBFCDX")
 
RETURN 
so werden die Indexdateien aufgebaut

Code: Alles auswählen

If !File("Plag.cdx") 			// Größe Preis DB für PLU
	lIndex:=.t.
   If !Netz_Use("Plag.Dbf",.t.)
		Quit
	EndIf
	oStatic1:caption:=(cText+"PLAG")
	oStatic1:configure()
	Index on ken tag "ken" to "plag.cdx"
	Index on preis tag "preis" to "plag.cdx"
EndIf
Netz_Use - prüft, ob die Datenbank geöffnet ist.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Koverhage »

Du hast die dbesys kompiliert und getrennt angegeben in Deinem projekt?
Hatte ich total übersehen , danke.
Gruß
Klaus
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Wolfgang Ciriack »

Hallo Klaus,
DBSEEK key, softseek, nIndex
ersetzen druch
DBSEEK key, softseek, TAGNAME
Ist nicht nötig, wenn du vorher ein dbsetorder() hast oder dbseek(begriff,.F.,index) machst.

Wenn du irgendwann auch eine einfache Anbindung an den ADS möchtest, solltest du gleich deine Daten auf FOXCDX (mit DBF/FTP/CDX)
umstellen.
Viele Grüße
Wolfgang
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Koverhage »

Hallo Wolfgang,

da wo ich dbsetorder() benutze, lasse ich das erst mal so,
dort wo ich nIndex im DbSeek verwende möchte ich das auf TAGNAME
ändern ist aussagefähiger und bei der Fehlersuche hilfreich.

Jetzt hadere ich noch damit, wie ich die Index-Datei erstellen soll (alle Indexe einer dbf in einer Datei).
Vermutlich bleibe ich bei INDEX ON da OrdCreate zumindest nach der Beschreibung
viel weniger kann.
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: cdx anstatt ntx

Beitrag von Manfred »

Hi Klaus,

ich mache (und andere auch) alle Tags in eine Datei. Einmal öffnen, alles da.
Und ordcreate kann jede Menge. Lies Dir mal dazu OrdCondSet() durch. Das macht man vorher und damit kann man alles andere lösen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Koverhage »

Hallo Manfred,

ich möchte ja auch alle TAGS in einer Datei.
OrdCreate und OrdCondSet ist mir zu aufwendig / umständlich.

Da benutze ich lieber INDEX ON weiter, da brauche ich nur den TAG hinzufügen.

Oder gibt es durch den Einsatz von OrdCondSet und OrdCreate einen Vorteil ?
Gruß
Klaus
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:

Re: cdx anstatt ntx

Beitrag von Rolf Ramacher »

Hi Klaus

für ein dbseek -

machst du dann vorher 123->(ordsetfocus(tagname))

das kannst du während des vorgans in der Funktion immer wieder ändern.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
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: cdx anstatt ntx

Beitrag von Jan »

Ich benutze nahezu ausschließlich OrdSetFocus(). OrdCondSet() glaube ich überhaupt nur 1x bislang.

Ich benutze in DbSeek() übrigens IMMER den dritten Parameter. Selbst wenn ich weiß, das ich den Index vorher auf genau den Suchindex gesetzt habe. Erstens ist das eine Art persönlicher Disziplin. Aber viel wichtiger ist für mich, das ich mich dann bei Codeänderungen nicht darum kümmern muß, ob ich irgendwo den Index verstelle. Bei der Suchoperation wird der IMMER stimmen, weil das ja im DbSeek() so drin steht. Und abgesehen wird der Code für mich einfacher lesbar. Ich muß bei enem DbSeek() nicht erst nach oben scrollen (im einfachsten Fall, im schlimmsten Fall in irgend einer dll die Funktion suchen, die vorher aufgerufen wurde und den Index umgestellt hat), um zu sehen, welcher Index denn da gerade aktiv ist.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Wolfgang Ciriack »

Also ich benutze immer nur 5 Indexe pro CDX-Datei, und öffne dann eben mehrere Indexdateien.
Soll angeblich im Netzwerk Performance bringen. Auszug aus ADS-Hilfedatei:
Limit the Number of Index Orders (Tags) Per CDX

In a multi-user system where data is being updated, developers have a decision to make regarding the trade-off between ease of development and performance when using CDX index files. As discussed in the "Do Not Use NTX Indexes and DBT Memos" section above, CDX indexes can make application index usage very simple because all index orders (tags) can be contained within a single auto-open compound CDX index file that relieves the application from having to explicitly open or close index files. CDX index files, however, do not have per-index order write lock functionality. There is only per-file write locking available. This means that any time any application in the multi-user system is updating an individual index order in the CDX, no other application on the entire system can gain access to any index order in the CDX index file for reading or writing. When there are many index orders per CDX and updates are occurring in a multi-user system, that CDX will become a bottleneck and lead to poor application throughput.

If, on the other hand, index orders are divided among multiple CDX index files, updating a single index order in one of the CDX index files will have no effect on access to the other CDX index files. For example, if you have 50 index orders in a single CDX index file, and some application needs to write to the "last name" index order in that CDX, no other users on the system will be able to access any index orders in that CDX while the update is occurring. If, however, you created 5 separate CDX index files, each with 10 index orders, some application updating the "last name" index order would only keep other users on the system from accessing one of the CDX index files while that update was in progress. The other 4 index files would be available to be read from, or written to, by all other applications on the network.

In this example scenario, the ease of development vs. performance trade-off can be seen. For maximum ease of development, putting all 50 index orders in a single auto-open CDX index file would require no specific index open/close code to be written. For best performance, however, dividing up the index orders into 5 CDX index files and writing the extra code to make sure all index files are opened and closed, would provide optimum multi-user performance. Note that this issue only applies to CDX index files and not ADI index files because ADI index files do have per-index order write locking functionality
Viele Grüße
Wolfgang
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: cdx anstatt ntx

Beitrag von Jan »

Wolfgang,

der Text erscheint logisch. Aber: Wenn ich Änderungen im Index schreiben muß, dann betrifft das zumindest bei den Anwendungen, die ich schreibe, mehr oder weniger alle Tags. Und dann stellt sich mir die Frage, was schneller ist: Mehrere cdx mit je 5 Tags, oder eine cdx mit allen Tags. Ich tippe mal darauf, das die eine cdx schneller sein dürfte.

Aber das betrifft wie gesagt den Fall, das (nahezu) alle Tags von einer Satzänderung betroffen sind, wie bei Neuanlage oder Löschung eines Satzes. Und nicht nur ein Tag, wie bei kleineren Änderungen im Satz.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Koverhage »

So langsam wird das was, aber bei folgender CDX Datei gibt es Probleme.

INDEX ON "langkz+txtid" TAG "LANGXX" TO "lang_xx.cdx" for !deleted()
INDEX ON "langtxt" TAG "LANGTXT" TO "lang_xx.cdx" for !deleted()

Beim Ausführen der zweiten INDEX Anweisung bekomme ich die Fehlermeldung

Fehler BASE/8999
Beschreibung: Länge des Datenbankfeldes wurde überschritten
Operation: OrdCreate

Kann das damit zusammenhängen, weil LANGTXT 132 Bytes lang ist ?
Ich glaube irgendwas gelesen zu haben, finde aber in der Xbase++ Dokumentation dazu nichts.


Ansonsten ist mir nur aufgefallen das die Erstellung der CDX länger als die NTX dauert (gefühlsmäßig). Gemessen habe ich es nicht.
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: cdx anstatt ntx

Beitrag von Manfred »

ja, ich meine irgendwie bei 100 Piependeckel ist Feierabend
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: cdx anstatt ntx

Beitrag von AUGE_OHR »

Koverhage hat geschrieben:Fehler BASE/8999
Beschreibung: Länge des Datenbankfeldes wurde überschritten
Operation: OrdCreate

Kann das damit zusammenhängen, weil LANGTXT 132 Bytes lang ist ?
120 / 240 -> PDR 5694
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Koverhage »

Traurig, das der PDR nach 8 Jahren immer noch offen ist (wie so viele andere auch).
Gruß
Klaus
Grimm
Rookie
Rookie
Beiträge: 13
Registriert: Di, 11. Sep 2007 8:09
Wohnort: Eberswalde
Kontaktdaten:

Re: cdx anstatt ntx

Beitrag von Grimm »

Manfred hat geschrieben: Do, 11. Jun 2015 10:36 Du hast die dbesys kompiliert und getrennt angegeben in Deinem projekt?
Hallo,

ich habe das gleiche Problem und weiß nicht weiter:

Code: Alles auswählen

#pragma library( "XBTBASE1.LIB" )
#pragma library( "XBTBASE2.LIB" )
#pragma library("XppUi2")
#include "foxdbe.ch"
#include "cdxdbe.ch"
#include "Dmlb.Ch"

#include "inkey.ch"
#include "Appevent.ch"
#include "Xbp.ch"
#include "gra.ch"
#include "Getexit.ch"
#include "SetCurs.ch"
#include "Font.ch"
#include "nls.ch"
#include "os.ch"
#include "dll.ch"
#include "Directry.ch"
#include "..\wintool\help.PRG"
#include "..\wintool\toolnet.PRG"
#include "..\wintool\wintool.PRG"
#include "..\wintool\wdasi.PRG"
#include "..\wintool\use.PRG"
*****************************************
Procedure appsys()

public such[23,3],aSizew0[2],amb[3],omenubar,omenu
public aPP:={{ XBP_PP_FGCLR, GRA_CLR_BLACK },{ XBP_PP_COMPOUNDNAME, "8.Arial" } }

aSizew0:= SetAppWindow():currentSize()	//Bildschirmgröße
return
****************************************
// FOXCDX Database-Engine erzeugen

// Das Beispiel zeigt eine DbeSys() Prozedur bei der die
// FOXCDX Database-Engine erzeugt wird.

   PROCEDURE DbeSys()
      IF ! DbeLoad( "FOXDBE")	//, .T.)
         Alert( "Database-Engine FOXDBE nicht geladen", {"OK"} )
      ENDIF

      IF ! DbeLoad( "CDXDBE", .T.)
         Alert( "Database-Engine CDXDBE nicht geladen", {"OK"} )
      ENDIF

      IF ! DbeBuild( "FOXCDX", "FOXDBE", "CDXDBE" )
         Alert( "FOXCDX Database-Engine konnte nicht erzeugt werden" , {"OK"} )
      ENDIF

      DbeSetDefault( "FOXCDX" )

   RETURN
******************************************
procedure main()	//bearbeiten
.
.
.

Code: Alles auswählen

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\Alaska\Golldack\LK.EXE" Datum: 14.03.23 10:48:17

Xbase++ Version     : Xbase++ (R) Version 1.90.355
Betriebssystem      : Windows XP 05.01 Build 02600 Service Pack 3
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: C VALUE: FOXDBE
oError:canDefault   : J
oError:canRetry     : N
oError:canSubstitute: N
oError:cargo        : NIL
oError:description  : Ungültiger Dateiname für DBE-DLL
oError:filename     : 
oError:genCode      :         52
oError:operation    : DbeLoad
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :       8009
oError:subSystem    : BASE
oError:thread       :          1
oError:tries        :          0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von DBESYS(44)
Aufgerufen von MAIN(61)
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: cdx anstatt ntx

Beitrag von AUGE_OHR »

hi,
Grimm hat geschrieben: Di, 14. Mär 2023 10:50 ich habe das gleiche Problem und weiß nicht weiter:
man sollte ein "Project-File" (*.XPJ) nutzen statt die *.PRG zu "include(n)"

Code: Alles auswählen

DIR /b *.PRG > PROJECT.LST 
Pbuild @PROJECT.LST
danach in der PROJECT.XPJ den PROJECT.EXE Namen anpassen

Tip : bei COMPILE_FLAGS = /q noch /w hinzufügen um "Warnungen" zu erhalten

!Note : für eine GUI App muss man

Code: Alles auswählen

  GUI = YES
setzten

mit

Code: Alles auswählen

Pbuild PROJECT.XPJ
wird dann der Build Vorgang gestartet

---

AppSys und DBEsys sind 2 verschiedene Sachen :!:

für eine GUI Anwendung kann man eine "leere" AppSys verwenden ( damit sich kein CMD Fenster öffnet )

Code: Alles auswählen

PROCEDURE APPSYS
RETURN
für eine Console Anwendung ist das der Ort wo man die Grösse (ROW / COL) und den Font einstellt
siehe c:\ALASKA\XPPW32\Source\SYS\AppSys.prg

---

"was" für einen *.CDX "Type" willst du nutzen :?:

wenn man "alte" Cl*pper Dateien mit *.FPT hat wäre bei *.CDX "SixDrive / Comix" angesagt

siehe dir dazu unter "FOXDBE (DATA-Komponente)" den Abschnitt "FOXDBE_CREATE_2X" an
es gibt 3 Möglichkeiten wobei die "mittlere" für Comix/Sixdrive geeignet ist

---

hier eine DBEsys welche für NTX und CDX Type "Comix/Sixdrive" gedacht ist

Code: Alles auswählen

#include "Dbfdbe.ch"
#include "Ntxdbe.ch"
#include "Foxdbe.ch"
#include "Cdxdbe.ch"

// Text-Konstanten
#define MSG_DBFDBE_NOT_LOADED   "Database-Engine DBFDBE nicht geladen"
#define MSG_NTXDBE_NOT_LOADED   "Database-Engine NTXDBE nicht geladen"
#define MSG_DBFNTX_NOT_CREATED  "DBFNTX Database-Engine;konnte nicht erzeugt werden"

*+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
*+    Procedure dbeSys()
*+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
*+
PROCEDURE dbeSys()

   SET COLLATION TO GERMAN

   * ------------ DBFNTX          ------------ *

   IF !DbeLoad( "DBFDBE", .T. )
      ALERT( MSG_DBFDBE_NOT_LOADED, { "OK" } )
   ENDIF
   IF !DbeLoad( "NTXDBE", .T. )
      ALERT( MSG_DBFDBE_NOT_LOADED, { "OK" } )
   ENDIF
   IF !DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" )
      ALERT( MSG_DBFNTX_NOT_CREATED, { "OK" } )
   ENDIF

   * ------------ COMPONENT_DATA  ------------ *

   // Cache time
   DbeInfo( COMPONENT_DATA, DBFDBE_LIFETIME , 0 )

   * ------------ COMPONENT_ORDER ------------ *

   DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKRETRY, 10000 )
   DbeInfo( COMPONENT_ORDER, NTXDBE_LOCKDELAY, 100 )

   * ------------ FOXCDX          ------------ *

   IF !DbeLoad( "CDXDBE", .T. )
      ALERT( "Database-Engine CDXDBE nicht geladen", { "OK" } )
   ENDIF
   IF !DbeLoad( "FOXDBE", .T. )
      ALERT( "Database-Engine FOXDBE nicht geladen", { "OK" } )
   ENDIF
   IF !DbeBuild( "FOXCDX", "FOXDBE", "CDXDBE" )
      ALERT( "FOXCDX Database-Engine;konnte nicht erzeugt werden", { "OK" } )
   ENDIF

   * ------------ COMPONENT_DATA  ------------ *

   // Cache time
   DbeInfo( COMPONENT_DATA, FOXDBE_LIFETIME , 0 )

   DbeInfo( COMPONENT_DATA, FOXDBE_CREATE_2X, .T. )
   DbeInfo( COMPONENT_DATA, FOXDBE_LOCKMODE, FOXDBE_LOCKMODE_2X )

   * ------------ COMPONENT_ORDER ------------ *

   DbeInfo( COMPONENT_ORDER, CDXDBE_MODE, CDXDBE_FOXPRO2X )

   DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKRETRY,100000)
   DbeInfo( COMPONENT_ORDER, CDXDBE_LOCKDELAY,10)

   * ------------ SET DEFAULT DBE ------------ *

   *  DbeSetDefault( "DBFNTX" )
   DbeSetDefault( "FOXCDX" )

RETURN
gruss by OHR
Jimmy
Benutzeravatar
Frank Grossheinrich
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: Fr, 31. Mär 2017 15:06
Wohnort: Eschborn
Hat sich bedankt: 5 Mal
Danksagung erhalten: 81 Mal
Kontaktdaten:

Re: cdx anstatt ntx [ERLEDIGT]

Beitrag von Frank Grossheinrich »

Grimm,

Frage: rufst du dbeSys() in deiner Main() auf? Das besagt zumindest dein CallStack.
Das bitte nicht tun! dbeSys() wird implizit (ohne dein Zutun) aufgerufen und zwar sogar VOR deiner Main().
Das gilt für AppSys und ErrorSys() gleich.

Grüße
Frank
We love Xbase++, and you?
Grimm
Rookie
Rookie
Beiträge: 13
Registriert: Di, 11. Sep 2007 8:09
Wohnort: Eberswalde
Kontaktdaten:

Re: cdx anstatt ntx [ERLEDIGT]

Beitrag von Grimm »

Danke für Eure Tipps,
da habe ich erstmal zu tun.
Ich habe auf einer anderen Xbase-Installation probiert, und da gibt es das Problem nicht. Es wird ein ganz einfacher Fehler sein.
Grimm
Rookie
Rookie
Beiträge: 13
Registriert: Di, 11. Sep 2007 8:09
Wohnort: Eberswalde
Kontaktdaten:

Re: cdx anstatt ntx [ERLEDIGT]

Beitrag von Grimm »

Die appsys() wurde tatsächlich nochmal in main() aufgerufen!
Danke für Eure Hinweise !!!!
Antworten