Database Engines

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

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Database Engines

Beitrag von Manfred »

Hallo,

mal wieder etwas, das mir schon länger auf der Seele liegt und ich nicht richtig verstanden habe.

Ich habe eine Anwendung, die normale DBF Dateien und Textdateien nutzt. In die DBF Dateien werden entsprechend Daten geschrieben und die TXT Dateien werden genutzt um Protokolle, oder sonstwas zu schreiben, was später ausgedruckt wird, oder zumindest über einen einfachen Texteditor angesehen werden kann/soll.
Zur Zeit bearbeite ich die Textdateien immer mit den Lowlevel Funktionen fcreate() fopen() usw. Es wird zeilenweise reingeschrieben. Nachdem ich nun die ganze Beschreibung über die Xbase++ Database Engines gelesen habe, bin ich aber nicht wirklich schlauer geworden :cry:

Es ist doch dann möglich mit der entsprechenden Erzeugung einer Compound DBE (ich glaube so war das doch) auch Textdateien mehr oder weniger wie normale Datenbanken zu behandeln, wenn es um die einfachen Grundstrukturen geht wie öffnen, lesen, schreiben, speichern, schließen. Hat jemand von euch damit schon seine Erfahrungen gesammelt, ob es wirklich so geht, wie es von Alaska beschrieben wird?

Nächste Frage:

So wie ich es verstanden habe, kann ich doch mehrere Compund DBE erzeugen und damit mir die Möglichkeit schaffen in einem Programm verschiedene Typen von Datenbanken und Indexdateien zu benutzen? Oder habe ich das schon falsch verstanden?

Ich möchte gerne wie oben beschrieben Textdateien, DBF-Dateien, NTX und CDX gleichermaßen nutzen. Alles unter Xbase++, keine CLipperanwendungen im Mischbetrieb. Die Dateien würden dann über VIA entsprechend geöffnet, bzw. über die Angabe, welcher Treiber als cDBE in DbUseArea().

Geht das wirklich so? Und wenn ja, wie müßte ich dann so einen Treiber Anfangs zusammenbauen?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
ich nutze das, um Daten aus einer Textdatei in eine DBF-Datei zu importieren. Anbei mal einige Codefragmente - hoffe, es hilft ein wenig:

Code: Alles auswählen

#include "DelDbe.ch"
....
select 1
use xumwandl
go top
select 2
DbeSetDefault( "DELDBE" )
DbeInfo( COMPONENT_DATA, DELDBE_DELIMITER_TOKEN, chr( 0 ) )
DbeInfo( COMPONENT_DATA, DELDBE_FIELD_TOKEN, ';' )
DbeInfo( COMPONENT_DATA, DELDBE_FIELD_TYPES, "CCCCCCCCCCCCCCCCC" )   // geändert am 15.12.2005
use ( ausdatei ) via ("DELDBE")
go top
select 3
DbeInfo( COMPONENT_DATA, DELDBE_FIELD_TYPES, "CCCCCCCCCCCCCCC" )   // geändert am 15.12.2005
use ( hunddatei ) via ("DELDBE")
select 2
do while .not. eof()
	nr := ConvToOEMCp( field->field2 )
	bna := ConvToOEMCp( alltrim( left( field->field3, 50 ) ) )

....
	select 3
	go top
	do while .not. eof()
		if field->field2 == nr
			select 1
			append blank
			select 3
			replace xumwandl->BESITZERNA with bna
			replace xumwandl->BESITZERVO with bvo
...
			replace xumwandl->MELDTAG with val( field->field3 )
			replace xumwandl->STATUS with 0
			do case
				case field->field4 == "1"
					replace xumwandl->HUNDEKLASS with "N"
				case field->field4 == "2"
					replace xumwandl->HUNDEKLASS with "J"
...
			endcase
			replace xumwandl->HUNDENAMEN with ConvToOEMCp( alltrim( field->field7 ) )
			replace xumwandl->CODEN with val( field->field5 )
			replace xumwandl->GESCHLECHT with iif( field->field6 == "1", "R", "H" )
...
			if len( alltrim( field->field11 ) ) == 10
				replace xumwandl->GEBDATUM with ConvToOEMCp( left( alltrim( field->field11 ), 2 ) + substr( alltrim( field->field11 ), 4, 2 ) + right( alltrim( field->field11 ), 4 ) )
			elseif len( alltrim( field->field11 ) ) == 8
				st := val( right( alltrim( field->field11 ), 2 ) )
				if st < 80
					st += 2000
				else
					st += 1900
				endif
				replace xumwandl->GEBDATUM with ConvToOEMCp( left( alltrim( field->field11 ), 2 ) + substr( alltrim( field->field11 ), 4, 2 ) + str( st, 4 ) )
			endif
			replace xumwandl->VATER with ConvToOEMCp( alltrim( field->field12 ) )
			replace xumwandl->MUTTER with ConvToOEMCp( alltrim( field->field13 ) )
			replace xumwandl->ZUECHTER with ConvToOEMCp( alltrim( field->field14 ) )
			replace xumwandl->ZUORTMELDE with ConvToOEMCp( alltrim( field->field15 ) )
			st := val( left( time(), 2 ) ) * 100        // Die Systemzeit ermitteln und als
			mn := val( substr( time(), 4, 2 ) )         // Zahl ablegen
			st += mn
			replace xumwandl->syszeit with st
			replace xumwandl->sysdatum with val( dtos( date() ) )
		endif
		skip
	enddo
	select 2
	skip
enddo
select 2
use
select 3
use
select 1
use
DbeSetDefault( "DBFNTX" )
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hallo Martin,

das habe ich schon so mehr oder weniger verstanden und auch im Einsatz, was die Möglichkeit betrifft, von einer Textdatei in eine DBF Datei zu kopieren.

Meine Frage ging dahin, ob ich diese Konstruktion von CDX und NTX parallel benutzen kann und wie ich die Treiber alle dafür Anfangs zusammenbauen müßte, ob eine Textdatei dann wirklich wie eine mehr oder weniger normale DBF Datei behandelt werden kann. (Ich mir somit die ganzen Lowlevel Funktionen spare) Und ob es genügt - wenn es denn so einfach geht - nur zu sagen: Die DBF wird mit CDX geöffnet und die DBF wird mit NTX geöffnet. Und jetzt arbeitet mal schon in Frieden zusammen.

Trotzdem Danke für Deinen schnellen Einsatz
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Ah - OK. Sorry!!
Nun, was spricht denn dagegen, Dir die jeweiligen DBEs zu basteln und zu benutzen?

Code: Alles auswählen

IF ! DbeLoad( "DBFDBE", .T.)
   Alert( "Database-Engine DBFDBE nicht geladen" , {"OK"} )
ENDIF
IF ! DbeLoad( "NTXDBE", .T.)
   Alert( "Database-Engine NTXDBE nicht geladen" , {"OK"} )
ENDIF
IF ! DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" )
   Alert( "DBFNTX Database-Engine;konnte nicht erzeugt werden" , {"OK"} )
ENDIF

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( "DBFNTX" )
Nachdem nun die DBFNTX als Standard definiert ist, solltes Du doch - wie oben im anderen Beispiel mittels der Anagbe des zu nutzenden Treibers beim Öffnen ("VIA....") ohne Probleme damit arbeiten können - oder?
Allerdings wirst Du keinen Vorteil davon haben, Deine Logdatei statt wie bisher nun über die Datenbankoperationen zu beschreiben - zumindest sehe ich keinen!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

ich merke schon wieder, ich habe ein Brett vor dem Kopf, aber von der breitesten Sorte. Das ist alles?

Hm, so steht es auch in der Anleitung. Aber was habe ich mir denn dann aus dem Beispiel in der dbesys.prg zusammengestrickt?
Allerdings wirst Du keinen Vorteil davon haben, Deine Logdatei statt wie bisher nun über die Datenbankoperationen zu beschreiben - zumindest sehe ich keinen!
Meinst Du nicht? Hm, muß ich mir nochmal durch den Kopf gehen lassen, wie ich es zur Zeit mache und wie ich es mir anders vorstelle und was es bringen würde.
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben:Meinst Du nicht? Hm, muß ich mir nochmal durch den Kopf gehen lassen, wie ich es zur Zeit mache und wie ich es mir anders vorstelle und was es bringen würde.
nun - auch in diesem Fall würde zeilenweise geschrieben werden, da ein Datensatz in der Textdatei aus einer Zeile (= einem Feld) besteht.
Wenn es in Deiner Situation machbar ist, nutze doch den Alternate-Befehl, um die Logdatei zu schreiben:

Code: Alles auswählen

Set Alternate to C:\.......\log.txt
Set Alternate on
Set Console off
....
? "Hier kommt eine Zeile ins Log"
? "hier noch eine"
?? " (und das hier kommt an die vorherige Zeile ran)"
....
Set Alternate off
Set Alternate to
Set Console on
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

also jetzt treibt es mir doch den Frust in die Backen.....

Woher weißt Du das, bzw. woher wißt ihr das alles? Einmal, oder andauernd das Handbuch rauf und runter gelesen und dann gesagt:" Au prima, genau das habe ich gesucht"? Oder aus irgendwelchen anderen Quellen?
Ich habe die "Schwarte" schon mehrmals gelesen, aber diese ganzen"Tricks", die ich manchmal höre, oder lese, da wäre ich nie drauf gekommen.
Im Nachhinein betrachtet sagt man sich auch: "Klar, kann ja nur so sein." Aber wie kommt man auf sowas? Oder muß man für sowas ein Feeling haben?

Langsam überlege ich wirklich, ob ich nicht Gärtner hätte werden sollen. :cry: :?: :(
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben:Einmal, oder andauernd das Handbuch rauf und runter gelesen und dann gesagt:" Au prima, genau das habe ich gesucht"?
Im Prinzip ja - ich hatte mir damals so ein kleines Taschenhandbuch für Clipper Sommer '87 gekauft und häufiger darin geschmökert. :study:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin
Martin Altmann hat geschrieben:Ah - OK. Sorry!!
Nun, was spricht denn dagegen, Dir die jeweiligen DBEs zu basteln und zu benutzen?

IF ! DbeLoad( "DBFDBE", .T.)
Alert( "Database-Engine DBFDBE nicht geladen" , {"OK"} )
ENDIF
IF ! DbeLoad( "NTXDBE", .T.)
Alert( "Database-Engine NTXDBE nicht geladen" , {"OK"} )
ENDIF
IF ! DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" )
Alert( "DBFNTX Database-Engine;konnte nicht erzeugt werden" , {"OK"} )
ENDIF
jetzt weiß ich was es damals war, das ich das nicht so gemacht habe:

Es kommt die Fehlermeldung: Invalid DLL name for DBE

Im Moment stehe ich wie ein Ox vorm Berg.
Was fehlt bei mir?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben:Was fehlt bei mir?
na die entsprechende DLL ;-)
Um welche Zeile geht es denn in Deiner DBESYS()? Zeig doch mal Deinen Code...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

das habe ich auch gedacht, ich habe alle in Frage kommenden DLL ins Verzeichnis kopiert.

Es ist genau das, was ich eine Meldung höher gezeigt habe. Mehr ist auch nicht drin, weil es nur die Zeilen, nebst Dbusearea() ist.

Es ist genau die zeile, in der versucht wird die DBFDBE zu laden
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Stop,

dbesys() ?

Hm, ich glaube ich weiß woran es liegt.

Werde nochmals eben testen....
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Du hast in Deinem Posting aber meinen Text zitiert - hast Du es auch genauso in Deinem Listing stehen?
Hast Du diese Zeilen in der Prozedur DbeSys()?
An DLL-Dateien brauchst Du
  • DBFDBE.DLL
  • NTXDBE.DLL
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi,

Fehler gefunden, ich Doof. Ich muß das Teil natürlich in die DBESYS.PRG einbinden. Jetzt klappt es.

Hm, warum eigentlich? Ich kann mich jetzt nicht direkt daran erinnern, es in der Doku gelesen zu haben. :cyclopsani:
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben:Ich kann mich jetzt nicht direkt daran erinnern, es in der Doku gelesen zu haben. :cyclopsani:
wenn Du in der Hilfe unter dem Punkt Grundlagen zu DatabaseEngines schaust, findest Du im letzten Abschnitt (Hinweise) im ersten Absatz den entsprechenden Vermerk.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Mallo Martin,

ja Danke, entweder habe ich nie so weit gelesen, oder es jedesmal ausgeblendet.

jaja....
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hm,

klappt ja alles jetzt prima. 2 Engines geladen und über die Angabe cDBE, oder VIA wird die DB geöffnet. Aber wie es aussieht merkt der Index bei einer Erzeugung nicht welche Engine er nehmen muß? Dann muß wohl DbSetDefault(cDbe) gesetzt werden, oder wie sehe ich das.
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben:Aber wie es aussieht merkt der Index bei einer Erzeugung nicht welche Engine er nehmen muß?
:?: :?:
Beim Öffnen der Datenbank gibst Du doch mittels der Anweisung VIA an, welche DBEs zu verwenden sind - für Index- und Datenbankzugriffe! Und dadurch wird auch definiert, welche Art von Index für die Datenbank in der Workarea zu nutzen ist.

Code: Alles auswählen

USE [ <cFileName> ; 
      [ INDEX <cIndexFiles,...> ] ; 
      [ ALIAS <cAlias> ] ; 
      [ VIA   <cDbeName> ] ; 
      [ NEW ] ; 
      [ READONLY ] ; 
      [ EXCLUSIVE | SHARED ] ; 
    ]
Wenn Du die VIA-Anweisung weglässt, wird natürlich die per DbeSetDefault(...) als Standard definierte Zugriffsmethode benutzt!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

wie sagt Atze immer? Nee, alles klar.

Ich glaube ich schalte die Kiste jetzt ab, oder spiele noch ein bisschen.

Ich habe jetzt den ganzen Sermon umgedreht und die Sache mit dem Default gemacht, aber der Fehler bleibt trotzdem. Nun, ich dachte bisher immer, dass die Indexdatei mit jedem Index on NEU gemacht wird. Aber irgendwie wird immer alles hinten dran gepeppt. Und das erzeugt den Fehler. Sobald ich die Datei von Hand weglösche, läuft alles prima, so wie Du auch beschrieben und ich es gemacht habe. Ich muß wohl nochmals etwas lesen.
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
sorry - mir aber nicht (von wegen Atze und so ;-))
Zeig doch mal bitte ein wenig Code!
Was ist denn der Fehler? Index on (bei NTX!!) erzeugt die Indexdatei immer(!) neu - bei CDX nicht, da in der bereits bestehenden Datei (wie Du so schön sagst) hinten angepeppt wird!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

das mit CDX habe ich gelesen. Verdammt, wo steht das denn. Ich glaube es ist genug für heute....

Code: Alles auswählen

PROCEDURE dbeSys()
/*
 *   The lHidden parameter is set to .T. for all database engines
 *   which will be combined to a new abstract database engine.
 */

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

//          IF ! DbeLoad( "DBFDBE", .T.)
//             Alert( "Database-Engine DBFDBE nicht geladen" , {"OK"} )
//          ENDIF
          IF ! DbeLoad( "NTXDBE", .T.)
             Alert( "Database-Engine CDXDBE nicht geladen" , {"OK"} )
          ENDIF
          IF ! DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" )
             Alert( "DBFCDX Database-Engine;konnte nicht erzeugt werden" , {"OK"} )
          ENDIF

          RETURN

PROCEDURE main()
          LOCAL bSaveError := ErrorBlock()
          LOCAL oError
          LOCAL lNewArea := lShared := .T., lReadOnly := .F.
          LOCAL cDBE, cAlias, cText
          LOCAL n := 1

          DO WHILE .T.
             ErrorBlock( {|e| BREAK(e)})
             BEGIN SEQUENCE
                   IF n = 1
                      cDBE := "DBFNTX"
//                      DbeSetDefault(cDBE)
                   ELSE
                      cDBE := "DBFCDX"
//                      DbeSetDefault(cDBE)
                   ENDIF
                   DBUSEAREA(lNewArea,cDBE,"test",cAlias,lShared,lReadOnly)
                   IF cDBE == "DBFNTX"
                      INDEX ON UPPER(v_titel) TO test
                   ELSE
                      INDEX ON UPPER(v_titel) TAG titel TO test
                   ENDIF
             RECOVER USING oError
                   ErrorBlock( bSaveError)
                   IF fehlerbehandlung(oError)
                      BREAK
                   ENDIF
                   LOOP
             END SEQUENCE
             ErrorBlock( bSaveError)
             EXIT
          ENDDO .T.
          RETURN
********************************************************************************
FUNCTION fehlerbehandlung(oError)
         LOCAL lSuccess := .T.
         IF oError:osCode = 32
            cTExt := "Ungültige Shareoption"
         ENDIF
         IF ! oError:canRetry
            lSuccess := .F.
         ENDIF
         RETURN(lSuccess)
Aber trotzdem kommt eine Fehlermeldung ab dem 2.Durchlauf. Aber erst nach der Erzeugung/Erweiterung des Index. File can not be created
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmm,
also entweder hast DU zu viel weggelöscht, oder mir ist das jetzt auch schon zu spät ;-)
Du hast eine Endlosschleife, in der immer wieder die selbe Datenbank in einer neuen Workarea geöffnet würde - in jedem Fall wird immer wieder die selbe Indexdatei (in Deinem Test ja als NTX) erneut erzeugt - an der selben Stelle, was sicherlich nicht geht, da die alte (vom vorherigen Durchlauf) ja dort existiert und in Benutzung ist!
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

nee keine Endlosschleife. Ich gehe step by step mit dem debugger durch und das klappt schon. Nur sobald ich am Index ankomme knallt es.

Es ist nur ein Test, mehr Code gibt es nicht.

Aber wie gesagt, ich stoppe jetzt und schaue mir das morgen nochmals in aller Ruhe an. Ich sehe nur noch kleine Mexikaner im Zimmer. :sleepy1: :sleepy2:
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
also eine Endlosschleife, die Du manuell durchläufst. OK - dann zitiere ich mich zur Abwechslung mal selber:
Martin Altmann hat geschrieben:- in jedem Fall wird immer wieder die selbe Indexdatei (in Deinem Test ja als NTX) erneut erzeugt - an der selben Stelle, was sicherlich nicht geht, da die alte (vom vorherigen Durchlauf) ja dort existiert und in Benutzung ist!
Genau das ist Dein Problem - darum knallt er auch, sobald er die Indexdatei zum zweiten Mal erzeugen soll!
Du mußt also prüfen, ob es die Indexdatei schon gibt. Wenn nein, dann so wie Du es jetzt tust, erzeugen, ansonsten öffnen!
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

ich muß Dich leider enttäuschen. Jedesmal wird das Programm neu gestartet und somit ist die Datei nicht geöffnet.

Bei dem 1.Durchlauf, sprich beim 1.Aufruf des Programmes klappt alles prima.
Nachdem die Indexdatei erzeugt wurde, verläßt das PRG die Begin Seq und kommt zum RETURN und beendet sich.
Dann rufe ich mit F8 wieder auf und starte es neu.

Weißt Du was? ich habe gerade parallel das PRG nochmals getestet. Jetzt scheint es wohl zu klappen.

Wie gesagt. Es ist spät und ........

Ich geh jetzt pennen. Wer weiß was hier sonst noch passiert.

Bis Morgen, oder so..

Besten Dank für die Hilfe..
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!!
Antworten