Seite 1 von 1

File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Mo, 25. Jul 2022 13:28
von noat
Hallo zusammen,

bin neu beim Thema Xbase-Programmierung.
Versuche mich gerade an einem kleinen Test-Projekt, um in das Thema CXP rein zu kommen.
Dabei habe ich das Problem, dass ich beim Versuch, eine DBF-Datenbankdatei zu öffenen, den Fehler bekomme: "Datei kann nicht geöffnet werden".

Habe bereits sämptliche Varianten der Pfadangabe, mit und ohne Dateiendung, etc. durch - leider ohne Erfolg. Kann mir jmd. einen Hinweis geben, wo mein Problem liegt? Kann mir eigentlich nur ein Berechtigungsproblem vorstellen; weiß aber nicht an welcher Stelle.

Code: Alles auswählen

<!DOCTYPE html>
<%#code locality="page-render"%>
<%#page layout="./kontaktesite.layout" trace="yes"%>
@SECTION Body
<%
  USE (".\data\TEL_LIS.dbf") ALIAS "Kontaktdaten" 
  DbSelectArea("Kontaktdaten")
  DO WHILE !Kontaktdaten->(EOF())
%>
	<tr>
		<td>@(Kontaktdaten->NAME)</td>
		<td>@(Kontaktdaten->TELEFON)</td>
		<td>@(Kontaktdaten->HANDY)</td>
		<td>@(Kontaktdaten->EMAIL)</td>
	</tr>	
<%
    SKIP 1 IN Kontaktdaten
  ENDDO
  CLOSE DATABASE
%>
Die Datei TEL_LIS.dbf ist eine Verzeichnisebene unterhalb der CXP-Datei in einem Ordner "data".

Schon mal vielen Dank im Voraus für die Unterstützung!

Gruß
Noat

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 5:39
von ramses
Ich würde mal versuchen den Alias in der Use Zeile ohne Anfühhrungszeichen zu schreiben und Ihn auf 10 Zeichen zu kürzen,

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 6:45
von noat
Das bringt leider keinerlei Änderung. Auch wenn ich den Alias komplett weg mache, hat das keinerlei Auswirkungen.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 7:09
von Martin Altmann
Moin,
welchen neuen Aliasnamen hast Du denn versucht zu nehmen? Hast Du auch alle Vorkommen entsprechend angepasst (also nicht nur in der Zeile mit dem Wort Alias)?

Viele Grüße,
Martin

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 7:35
von noat
Morgen Martin!

Als neuen Alias habe ich Kontakt verwendet und auch alle nachfolgenden Stellen entsprechend der geänderten Bezeichnung angepasst.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 7:42
von Jan
Moin,

ist die dbesys korrekt eingestellt?

Jan

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 7:52
von noat
Habe gerade mal DbeList() ausgeführt, um zu schauen, welche DBEs geladen sind:

Code: Alles auswählen

{"FOXDBE", .F.} {"CDXDBE", .F.} {"FOXCDX", .F.}
DBF fehlt. Aber wenn ich folgendes eingebe, erhalte ich die Meldung, dass der Name der DBE ungültig sei:

Code: Alles auswählen

USE (".\data\TEL_LIS.DBF") VIA "DBFDBE" ALIAS Kontakt
ist die dbesys korrekt eingestellt?
Wo kann ich das nachschauen? Und was müsste da drin stehen?

Gruß
Noat

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 8:18
von noat
Habe die DBFDBE jetzt geladen mit DbeLoad()

Code: Alles auswählen

{"FOXDBE", .F.} {"CDXDBE", .F.} {"FOXCDX", .F.} {"DBFDBE", .T.}
Aber leider bleibt es trotzdem bei dem Fehler beim Ausführen der Zeile

Code: Alles auswählen

USE (".\data\TEL_LIS.DBF") VIA "DBFDBE" ALIAS Kontakt

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 9:13
von Jan
Bei mir sieht das z. B. so aus:

Code: Alles auswählen

FUNCTION dbeSys 

// Foxpro mit CDX
IF .NOT. DbeLoad("FOXDBE", .T.)
   Alert("Database-Engine FOXDBE nicht geladen", {"OK"})
ENDIF

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

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

// Das ist optional
DbeInfo(COMPONENT_DATA, DBFDBE_LIFETIME, 0)                                                        // Verweildauer von Records im lokalen Cache
DbeInfo(COMPONENT_ORDER, DBE_LOCKMODE, LOCKING_EXTENDED)                                           // Macht das die Massenabfertigung schneller? (29.10.2008)

DbeInfo(COMPONENT_DATA, FOXDBE_LIFETIME, 0)                                                        // Verweildauer von Records im lokalen Cache
DbeInfo(COMPONENT_ORDER, FOXDBE_LOCKMODE, LOCKING_EXTENDED)                                        // Macht das die Massenabfertigung schneller? (29.10.2008)
DbeInfo(COMPONENT_ORDER, CDXDBE_LOCKRETRY, 1000000)                                                // Lt. Aussage Till Warweg 26.08.2015 sinnvoll im Netzwerk
// Ende optionale Einstellungen

// Standard-Datenbanktreiber setzen
DbeSetDefault("FOXCDX")

RETURN NIL
Damit kannst Du Dir dann auch das "VIA" im USE sparen, weil der als Default eingetragen ist.

Ist denn die dbf sicher eine FOXCDX? Nicht das Du da versehentlich mit dem falschen Treiber darauf zugreifen willst.

Jan

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 9:24
von Manfred
muß in Deinem Fall nicht auch VIA "FOXCDX" stehen und nicht DBFDBE wenn Du eine FoxDbf öffnen möchtest?

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 10:14
von brandelh
Ist die DBF überhaupt eine FOX-DBF ?

versuche diese mal mit DBU zu öffnen.

PS: ich rate grundsätzlich von ALIAS ab und nehme numerische SELECT ... der Alias kann sich ändern, der select ist immer eindeutig.

Code: Alles auswählen

   local nDB
   USE (cDatei) NEW // öffnet in einem neuen Select-Bereich
   if neterr()
      errbox("Steuerverwaltungsdatei konnte nicht ge”ffnet werden !")
      *** Fehler melden oder protokollieren
      return self
   endif
*   set index to (cDatei)  // eventueller Index auf der Datei !

   nDB := Select()

   (nDB)->(----) Zugriff auf DBFunktionen, oder
   (nDB)->xxxx Felder

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 10:34
von Tom
Wie wäre es mal mit einer vollständigen XPPERROR.LOG? Das würde die Forensik vereinfachen. Sind Vollzugriffsrechte auf das DB-Verzeichnis erteilt?

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 10:39
von Jan
brandelh hat geschrieben: Di, 26. Jul 2022 10:14PS: ich rate grundsätzlich von ALIAS ab und nehme numerische SELECT ... der Alias kann sich ändern, der select ist immer eindeutig.
Hallo Hubert,

ich nehme NIE den numerischen Select. Weil eine Nummer immer unklar ist was das denn jetzt ist. Wenn ich wirklich mal in die Bredouille komme das der Alias unklar sein sollte mach ich nach dem Öffnen der Tabelle direkt ein cAlias := Alias(), dann habe ich den vom System verwendeten eindeutigen Alias. Und den kann ich dann ja auch verwenden mit (cAlias)->DbSonstwas()

Jan

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 12:01
von noat
Die DBF ist keine Fox-DBF, sondern eine "normale".
Hab's mal mit DbeUnload der Fox-DBEs probiert - leider ohne Erfolg.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 12:05
von noat
@ Tom
Wie wäre es mal mit einer vollständigen XPPERROR.LOG? Das würde die Forensik vereinfachen. Sind Vollzugriffsrechte auf das DB-Verzeichnis erteilt?
Wo finde ich die Logdatei? Ist ja eine Web-Applikation und ich bekomme die ganzen Meldungen im Browser angezeigt.
Bzgl. Zugriffsrechte, läuft ja im Webserver und liegt unterhalb von "C:\inetpub\wwwroot". Wüsste nicht, warum er da keinen Zugriff haben sollte.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 12:23
von brandelh
Jan hat geschrieben: Di, 26. Jul 2022 10:39
brandelh hat geschrieben: Di, 26. Jul 2022 10:14PS: ich rate grundsätzlich von ALIAS ab und nehme numerische SELECT ... der Alias kann sich ändern, der select ist immer eindeutig.
Hallo Hubert,

ich nehme NIE den numerischen Select. Weil eine Nummer immer unklar ist was das denn jetzt ist. Wenn ich wirklich mal in die Bredouille komme das der Alias unklar sein sollte mach ich nach dem Öffnen der Tabelle direkt ein cAlias := Alias(), dann habe ich den vom System verwendeten eindeutigen Alias. Und den kann ich dann ja auch verwenden mit (cAlias)->DbSonstwas()

Jan
Hallo Jan,

ich nehme natürlich nicht die Nummer direkt !!!!
sondern in einer Variable (oben nDB), in Anwendungen kann das dann z.B. nAdressen, nArtikel etc. sein ...
Ich gebe dir Recht, dass du mit deiner Abfrage des Alias() auch sicher bist :D

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 12:44
von Tom
Bzgl. Zugriffsrechte, läuft ja im Webserver und liegt unterhalb von "C:\inetpub\wwwroot". Wüsste nicht, warum er da keinen Zugriff haben sollte.
Ich auch nicht, aber es ist eine Möglichkeit, und eine Xbase++-Applikation, die lesend/schreibend/löschend/erzeugend auf eine filebasierte Datenbank zugreifen soll, braucht Vollzugriff.

Bist Du wirklich in diesem Verzeichnis? Was sagen CurDrive() und CurDir() im Fehlermoment?

Die XppError.LOG entsteht im Arbeitsverzeichnis der Applikation, oder je nach Gestaltung der ErrorSys.PRG. Du kannst dort aber auch das Fehlerobjekt abfangen und alle Eigenschaften manuell loggen. Dafür gibt es m.E. in den Samples Beispielcode.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 12:45
von Tom
ich rate grundsätzlich von ALIAS ab
Wie oft hatten wir diese Murmeltierdiskussion hier eigentlich schon? 8)

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 13:26
von brandelh
Ihm hatte ich es noch nie geschrieben 8)

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 13:38
von brandelh
noat hat geschrieben: Di, 26. Jul 2022 12:01 Die DBF ist keine Fox-DBF, sondern eine "normale".
Hab's mal mit DbeUnload der Fox-DBEs probiert - leider ohne Erfolg.
dann darf man auch keine FOXDBE etc. nutzen, sondern braucht die DBFDBE mit NTXDBE, DBFNTX - beim normalen Xbase++ ist das der Standard.
bin neu beim Thema Xbase-Programmierung.
Versuche mich gerade an einem kleinen Test-Projekt, um in das Thema CXP rein zu kommen.
Ich weiß nicht was CXP als Standard-DBE lädt, aber wenn die DBF keine Fox ist, musst du die Datenbanktreiber für DBFNTX nachladen und aktivieren.
die aktive DBE kann man auch abfragen:

Code: Alles auswählen

 ? DbeSetDefault()                 // result: DBFNTX 

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 13:41
von noat
@ Tom:
Bist Du wirklich in diesem Verzeichnis? Was sagen CurDrive() und CurDir() im Fehlermoment?
Vielen Dank für die beiden Funktionen! Die gaben mir den entscheidenden Hinweis. :D
Ich war der Auffassung, dass mein aktuelles Verzeichnis das ist, wo meine CXP-Datei liegt, aber tatsächlich ist es "C:\Program Files (x86)\Alaska Software\cxp20\bin" und nicht das Root-Verzeichnis des Webservers.
Gib es eine Funktion, die mir den Pfad der CTX-Datei liefert?

@ ALL:
Vielen Dank für die Unterstützung und zahlreichen Hinweise! Ich habe dadurch auch auf jeden Fall Einiges dazu gelernt. =D>

Gruß
Noat

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 13:45
von noat
brandelh hat geschrieben: Di, 26. Jul 2022 13:38
noat hat geschrieben: Di, 26. Jul 2022 12:01 Die DBF ist keine Fox-DBF, sondern eine "normale".
Hab's mal mit DbeUnload der Fox-DBEs probiert - leider ohne Erfolg.
dann darf man auch keine FOXDBE etc. nutzen, sondern braucht die DBFDBE mit NTXDBE, DBFNTX - beim normalen Xbase++ ist das der Standard.
bin neu beim Thema Xbase-Programmierung.
Versuche mich gerade an einem kleinen Test-Projekt, um in das Thema CXP rein zu kommen.
Ich weiß nicht was CXP als Standard-DBE lädt, aber wenn die DBF keine Fox ist, musst du die Datenbanktreiber für DBFNTX nachladen und aktivieren.
die aktive DBE kann man auch abfragen:

Code: Alles auswählen

 ? DbeSetDefault()                 // result: DBFNTX 

Funktioniert komischerweise mit Standard-DBE auch, was {"FOXDBE", .F.} {"CDXDBE", .F.} {"FOXCDX", .F.} ist.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 14:02
von brandelh
Das aktive Verzeichnis ist standardmäßig immer das der EXE, kann man natürlich im Programmlauf ändern.
Bei CXP gibt es keine EXE sondern DLLs, die von der CXP Runtime aufgerufen werden - soweit ich mich erinnere - das erklärt die von dir gelesenen Werte.

Die Installation der CXP Umgebung muss da beschrieben sein, damit kenne ich mich nicht aus.

In den Beispielen stehen aber FOX-DBF und CDX Dateien, das ist vermutlich der Standard bei CXP.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 14:07
von Tom
Mit Set(_SET_PATH,<cPath>) bzw. Set(_SET_DEFAULT,<cPath>) kann man in der Anwendung steuern, wo sie nach Datenbankdateien suchen soll. Achtung, das gilt für Dateierzeugungen (Indexe, sonstige Dateien) nicht in aller Konsequenz. Es ist nicht sinnvoll, hierfür das Arbeits-/Ausführungsverzeichnis zu wechseln, da sich darin ja die zu ladenden DLLs und sonstigen Komponenten der Anwendung befinden, die nicht in Verzeichnissen stecken, die per PATH referenziert sind.

Re: File cannot be opened bei Zugriffsversuch auf DBF-Datei

Verfasst: Di, 26. Jul 2022 14:09
von noat
@ Hubert:
Bei CXP gibt es keine EXE sondern DLLs, die von der CXP Runtime aufgerufen werden - soweit ich mich erinnere - das erklärt die von dir gelesenen Werte.
Die DLLs werden von dem Verzeichnis ""C:\inetpub\wwwroot\kontakte", wo meine CXP liegt, in einem Unterordner "cxp-application" erzeugt.