cdx anstatt ntx [ERLEDIGT]
Moderator: Moderatoren
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
cdx anstatt ntx [ERLEDIGT]
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 ?
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
Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21219
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: cdx anstatt ntx
hi Klaus,
so könnte eine dbesys aussehe
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!!
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!!
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2941
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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
Wolfgang
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
Habe das jetzt mal versucht, bekomme allerdings beim DbeLoad
schon einen Runtime Error.
Was mache ich falsch ?
------------------------------------------------------------------------------
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)
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
Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21219
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: cdx anstatt ntx
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!!
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!!
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
Hi Klaus
so sieht meine Dbesys - aus
so werden die Indexdateien aufgebaut
Netz_Use - prüft, ob die Datenbank geöffnet ist.
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
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
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
Hatte ich total übersehen , danke.Du hast die dbesys kompiliert und getrennt angegeben in Deinem projekt?
Gruß
Klaus
Klaus
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2941
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
Hallo Klaus,
Wenn du irgendwann auch eine einfache Anbindung an den ADS möchtest, solltest du gleich deine Daten auf FOXCDX (mit DBF/FTP/CDX)
umstellen.
Ist nicht nötig, wenn du vorher ein dbsetorder() hast oder dbseek(begriff,.F.,index) machst.DBSEEK key, softseek, nIndex
ersetzen druch
DBSEEK key, softseek, TAGNAME
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
Wolfgang
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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.
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
Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21219
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: cdx anstatt ntx
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.
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!!
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!!
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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 ?
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
Klaus
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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.
für ein dbseek -
machst du dann vorher 123->(ordsetfocus(tagname))
das kannst du während des vorgans in der Funktion immer wieder ändern.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2941
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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:
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
Wolfgang
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
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.
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
Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21219
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: cdx anstatt ntx
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!!
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!!
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: cdx anstatt ntx
120 / 240 -> PDR 5694Koverhage 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 ?
gruss by OHR
Jimmy
Jimmy
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: cdx anstatt ntx
Traurig, das der PDR nach 8 Jahren immer noch offen ist (wie so viele andere auch).
Gruß
Klaus
Klaus
Re: cdx anstatt ntx
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)
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: cdx anstatt ntx
hi,
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
setzten
mit
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 )
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
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
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
mit
Code: Alles auswählen
Pbuild PROJECT.XPJ
---
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
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
Jimmy
- Frank Grossheinrich
- Rekursionen-Architekt
- Beiträge: 147
- Registriert: Fr, 31. Mär 2017 15:06
- Wohnort: Eschborn
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 82 Mal
- Kontaktdaten:
Re: cdx anstatt ntx [ERLEDIGT]
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
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?
Re: cdx anstatt ntx [ERLEDIGT]
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.
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.
Re: cdx anstatt ntx [ERLEDIGT]
Die appsys() wurde tatsächlich nochmal in main() aufgerufen!
Danke für Eure Hinweise !!!!
Danke für Eure Hinweise !!!!