Seite 1 von 1

dbf-Typen im ADS bestimmen

Verfasst: Mo, 09. Jan 2017 9:56
von Jan
Hallo,

wenn ich mit dem ADS arbeite, benutze ich die ADSCDX. Im ADS werden die dbf als FoxPro eingelesen. Soweit so gut.

Wenn ich aber im ADS eine neue dbf erstellen möchte durch ein DbCreate() - wie bestimme ich dann, das die erstmal FOXCDX sein soll? Aber dennoch natürlich sofort im ADS registriert sein soll?

Warum ich das frage: Ich habe schon stapelweise neue dbf im ADS auf diesem Weg erstellt. Das hat auch immer geklappt. Aber jetzt habe ich zum ersten Mal eine dbf mit Memofeld erstellt - und die hat dann eine dbt bekommen! Und ich konnte die daher natürlich auch manuell nicht als Typ Foxpro in den ADS integrieren.

Wenn ich DbCreate() als dritten Parameter das FOXCDX mitgebe, dann klappt das im ADS nicht, weil der natürlich eine ADSCDX haben möchte. Ich habe mir jetzt erstmal so beholfen, das ich die dbf per 3. Parameter woanders erzeugt habe, und dann manuell in den ADS-Datenbereich kopiert und in den ADS eingebunden habe. Aber Sinn der Sache ist das natürlich nicht.

Jan

Re: dbf-Typen im ADS bestimmen

Verfasst: Mo, 09. Jan 2017 10:37
von ramses
Hallo Jan

ich denke du musst der ADSDBE mit folgenden Befehlen:

DbeInfo( COMPONENT_DATA , ADSDBE_TBL_MODE, ADSDBE_CDX )
DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )

mitteilen dass Sie (die ADSDBE) als Standard CDX verwendet.
Dann kannst du dem dbcreate() als 3. Parameter "ADSDBE" übergeben.

Cu Carlo

Re: dbf-Typen im ADS bestimmen

Verfasst: Mo, 09. Jan 2017 10:57
von Jan
Hallo Carlo,

implementiert ein ADSCDX automatisch, das die dbf FOX ist?

Jan

Re: dbf-Typen im ADS bestimmen

Verfasst: Mo, 09. Jan 2017 11:41
von ramses
Hallo Jan

müsste eigentlich. Ich verwende seit einiger Zeit nur noch DBF und NTX ob es jetzt noch so ist musst du testen.
Schau mal in der ads20.chm da sind die Parameter beschrieben.

Cu Carlo

Re: dbf-Typen im ADS bestimmen

Verfasst: Mo, 09. Jan 2017 11:54
von Tom
DbCreate() erzeugt immer eine Tabelle mit der aktuellen DBE, es sei denn, es wird via VIA eine andere angegeben, wobei diese DBE auch geladen sein muss. Ob Dein "ADSCDX" Fox-Tabellen mit Fox-Indexen erzeugt oder dB-Tabellen mit Fox-Indexen, was nicht eben wahrscheinlich ist, hängt von der Konfiguration der DBE ab. Da es sich um eine zusammengesetzte DBE handeln dürfte, müsstest Du das in Deinem Code sehen können. Wichtig sind Dinge wie DbeInfo(COMPONENT_DATA,ADSDBE_TBL_MODE) und ähnliche. Fox-Tabellen kann man zuweilen öffnen, wenn man eigentlich Standard-DBF erwartet, vorausgesetzt, es gibt keine Memos, keine Autoincrements oder ähnliche Spezialitäten.
Und dann ist da noch die Sache mit dem Zeichensatz. :wink:

Re: dbf-Typen im ADS bestimmen

Verfasst: Mo, 16. Jan 2017 12:39
von Jan
Sorry, das es doch länger gedauert hat.

So sieht der ADS-Eintrag in der dbesys aus:

Code: Alles auswählen

DbeInfo(COMPONENT_DATA, ADSDBE_LOCK_MODE, ADSDBE_PROPRIETARY_LOCKING)                              // dbf nur über ADS bearbeitbar
DbeInfo(COMPONENT_DATA, ADSDBE_TBL_MODE, ADSDBE_CDX)
DbeInfo(COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX)
DbeInfo(COMPONENT_DATA, ADSDBE_RIGHTS_MODE, ADSDBE_IGNORERIGHTS )
DbeInfo(COMPONENT_DATA, ADSDBE_TABLENAME_IS_ALIAS, .T.)
DbeSetDefault("ADSDBE")
In der dbesys erstelle ich auf die DBFNTX und die FOXCDX. Erstere könnte ich inzwischen auch rauswerfen, die FOXCDX brauche ich ab und an für externe dbf.

Ich habe das noch mal nachgeprüft: Es werden eindeutig DBFNTX erzeugt im ADS. Was nicht sonderlich erquickend ist.

Jan