Seite 1 von 1

dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 7:13
von Jan
Moin,

Im ADS 12 sind dbf als FOXCDX angelegt: Die dbesys sieht so aus:

Code: Alles auswählen

IF .NOT. Dbeload("ADSDBE", .F.)
   Alert("ADSDBE konnte nicht geladen werden!")
ENDIF
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.)

// Standard-Datenbanktreiber setzen
DbeSetDefault("ADSDBE")
Und dennoch: Als ich per DbCreate() eine neue Tabelle angelegt habe wurde die als DBFNTX angelegt.

Wie bekomme ich es hin, das eine neue Tabelle korrekt als FOXCDX angelegt wird?

Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 8:11
von Manfred
Hi Jan,
wie sieht denn Dein Dbcreate() aus?

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 8:45
von Tom
Bei DbCreate() als dritten Parameter die DBE angeben (DbCreate('mytable.dbf',aStructure,'ADSDBE').

Was antwortet DbSetDefault() ohne Parameter direkt vor dem DbCreate()?

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 9:02
von Jan
Hallo,

beim DbCreate() hatte ich lediglich den Dateinamen und das Struktur-Aray mitgegeben. Weil ich vorausgesetzt hatte das die ADSDBE ja als Default eingestellt ist und damit auch hier automatisch wirksam ist.

Ich teste das nachher mal mit dem dritten Parameter. Mal schauen ob das was ändert.

Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 9:09
von Jan
So.

Tom: DbeSetDefault() gibt mir "ADSDBE" zurück. Also eigentlich vollkommen korrekt.

Allgemein: Ich habe jetzt die ADSDBE als dritten Parameter eingebaut. ARC sagt mir bei den table properties trotzdem "NTX". Mist.

Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 9:32
von Tom

Code: Alles auswählen

DbeInfo(COMPONENT_ORDER,ADSDBE_INDEX_EXT,"CDX")

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 9:46
von nightcrawler
Wie sieht Deine Connection aus? Evtl spielt die noch mit rein, ADD als DBFNTX verbunden?

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 10:55
von Jan
Joachim,

da steht die ADSDBE mit drin:

Code: Alles auswählen

cConnect := "DBE=ADSDBE; SERVER=\\192.168.2.206:6262\D$\Daten_Produktiv\Produktiv.add; ADS_REMOTE_SERVER; UID=[UID]; PWD=[PWD]"
Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 10:57
von Jan
Tom,

das müsste ich doch gefahrlos einbauen können ohne bestehende Daten zu korrumpieren?

Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:10
von Jan
Tom,
Tom hat geschrieben: Mo, 19. Sep 2022 9:32

Code: Alles auswählen

DbeInfo(COMPONENT_ORDER,ADSDBE_INDEX_EXT,"CDX")
Hat leider nichts geändert.

Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:18
von Manfred
dann gib doch mal folgendes ein:

Code: Alles auswählen

DbCreate(cDbFileName,,"FOXCDX")

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:32
von Jan
Manfred,

der Gedanke war mir auch schon gekommen. Hatte aber ein wenig Schiss davor.

Jetzt habe ich das doch mal gemacht - wenn noch jemand diese Idee hatte wird es ja hoffentlich nicht ganz so falsch sein. Ergebnis:
oError:args :
-> VALTYPE: C VALUE:temp.dbf
-> VALTYPE: A VALUE:{{Array mit den ganzen Feldern}
-> VALTYPE: C VALUE:FOXCDX
oError:canDefault : .T.
oError:canRetry : .F.
oError:canSubstitute: .F.
oError:cargo : NIL
oError:description : Datei kann nicht erzeugt werden
oError:filename :
oError:genCode : 70
oError:operation : DbCreate
oError:osCode : 0
oError:severity : 2
oError:subCode : 8999
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:39
von Tom
Das kann auch nicht funktionieren. Der dritte Parameter gibt die Engine an, nicht (nur) das Format. Ich benutze kein DD; bei mir ist das ausschließlich von den Einstellungen der DBE abhängig und funktioniert einwandfrei - auch ohne Angabe der DBE, wenn DbeSetDefault("ADSDBE") aktiv ist.

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:41
von Manfred
nur mal so ins blaue geschossen, der FXOCDX Treiber ist ja wohl auch vom System her geladen und steht zur Verfügung?

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:47
von Tom
Wenn er das ist und man so verfährt, erzeugt man nach meinem Verständnis eine Tabelle außerhalb des DD.

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:50
von Jan
Hallo Tom,

ja, das hätte ich auch erwartet. Deswegen hatte ich die ADSDBE auch erst nicht im DbCreate() mit drin gehabt.

Und das die FOXCDX nicht funktionieren kann hatte ich irgendwie schon geahnt. Weil die ADSDBE ja nicht nur das Tabellenformat angibt sondern auch, wo die denn abgelegt sind und mit welchen Zugriffsrechten. Aber wenn alles andere nicht funktioniert, und Manfred (der ja auch mit ADS arbeitet) auch meinte das wäre mal einen Versuch wert, dann macht man sowas halt auch mal. Nur um mal was anderes ausprobiert zu haben.

Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:51
von Jan
Manfred,

ja klar. Sonst hätte der vermutlich schon vorher gemeckert und gesagt, das er die FOXCDX nicht kennen würde.

Jan

Re: dbf neu anlegen

Verfasst: Mo, 19. Sep 2022 11:51
von Manfred
@Tom. hm, da ist was dran. Ich benutze das bei mir so, übergebe dann aber den Defaulttreiber, den ich vorher ermittel. Eigentlich wollte ich wohl damit nur vorschlagen, die DBE direkt mit anzugeben und sich nicht auf das Set Default zu verlassen.

Re: dbf neu anlegen

Verfasst: Fr, 23. Sep 2022 8:35
von Jan
Moin,

ich hatte darüber eine Diskussion mit Till. Die mich ziemlich geplättet hat.

Seiner Meinung nach ist meine dbesys falsch. Ich habe den DbeSetDefault("ADSDBE") NACH den ganzen Konfigurationen eingebaut. Und damit seien die wirkungslos gewesen. Und da vor der Konfiguration der ADSDBE in der dbesys die FOXCDX erfolgt ist hätte ich die FOXCDX mit den ADS-Einstellungen durchgeführt.

Was ich dabei nicht verstehe: Warum gibt es keine Laufzeitfehler, wenn ich tatsächlich die FOXCDX mit den DbeInfo für die ads konfiguriert habe? Hätte der nicht merken müssen das ich die FOXCDX mit Werten belegen will, die zu einer anderen DBE gehören?

Und wenn ich das jetzt so umbaue wie Till das meint, also

Code: Alles auswählen

IF .NOT. Dbeload("ADSDBE", .F.)
   Alert("ADSDBE konnte nicht geladen werden!")
ENDIF
DbeSetDefault("ADSDBE")                                                                                                               // <== Hier hoch kopiert
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.)

// Standard-Datenbanktreiber setzen
//DbeSetDefault("ADSDBE")                                                                                                           // <== Auskommentiert
dann kann ich keine Datenbankoperationen mehr durchführen, wenn ich den Alias beim Öffnen anpasse. Der gibt mir einen Laufzeitfehler weil dieser Alias unbekannt sei. Der ignoriert im USE die Alias-Angabe, und nutzt statt dessen den Standard-Alias für diese Tabelle.

Allerdings läuft das wie ganz oben zu Beginn gepostet seit mehreren Jahren stabil. Obwohl der doch angeblich die ADS-Konfigurationen nicht genutzt hat. Nur jetzt das DbCreate() hatte halt nicht funktioniert.

Jan

Re: dbf neu anlegen

Verfasst: Fr, 23. Sep 2022 8:46
von Manfred
Sorry,
das hatte ich vergessen, ich meine mich erinnern zu können, das ich in diese Falle ausch schon vor ein paar Jahren getappt bin. Jetzt wo Du die dbesys angesprochen hast....