Seite 1 von 2

SQLITE und Netzwerkpfad

Verfasst: 04.05.2014 19:20
von shim
Hallo!

Nun dachte ich mir, ich mache mal meine ersten Versuche, eine Datenbank über das Netzwerk anzusprechen. Klappt aber bei mir nicht.

Ich habe mit dem Beispielcode angefangen.

Code: Alles auswählen

UseSQLiteDatabase()
Procedure CheckDatabaseUpdate(Database, Query$)
   Result = DatabaseUpdate(Database, Query$)
   If Result = 0
      Debug DatabaseError()
   EndIf
   ProcedureReturn Result
 EndProcedure
 InitialPath$ = "C:\"   ; anfänglichen Pfad für die Anzeige festlegen (kann auch leer sein)
  Path$ = PathRequester("Bitte wählen Sie einen Pfad aus", InitialPath$)
  If Path$
    MessageRequester("Information", "Sie haben folgenden Pfad ausgewählt:"+Chr(10)+Path$, 0)
  Else
    MessageRequester("Information", "Der Requester wurde abgebrochen.", 0) 
  EndIf

  a$=path$ ; Nur um den Pfad direkt auswählen zu können...
DatabaseFile$ = a$+"Database.sqlite"
If CreateFile(0, DatabaseFile$)
   CloseFile(0)
   If OpenDatabase(0, DatabaseFile$, "", "")
      CheckDatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), weight INT)")
      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
      If DatabaseQuery(0, "SELECT * FROM food WHERE weight > 7")
         While NextDatabaseRow(0)
            Debug GetDatabaseString(0, 0)
         Wend
         FinishDatabaseQuery(0)
       Else
         DatabaseError()
      EndIf
      CloseDatabase(0)
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf

Bei mir passiert folgendes:
Die Datenbank wird geöffnet, aber die Select-Abfrage endet mit einem "Disk I/O Error".
Geht das generell nicht oder liegt hier bei mir das Problem?

Viele Grüße

Re: SQLITE und Netzwerkpfad

Verfasst: 05.05.2014 13:05
von bobobo
mach mal mit unc (\\servernamen\freigabe\... )

damit sollte es gehen, insofern du dort schreiben darfst.

Re: SQLITE und Netzwerkpfad

Verfasst: 05.05.2014 16:03
von shim
Also, ich habe jetzt mit dem "normalen" Netzwerkpfad (der z.B. per PathRequester geliefert wird)

CreateFile(1,"/Volumes/192.168.1.22/xampp/htdocs/telefon/"+"xyz123.txt")

problemlos eine Datei anlegen können. Schreibrechte sollten also verfügbar sein.

Mit CreateFile(1,"//192.168.1.22/xampp/htdocs/telefon/"+"xyz123.txt") wird keine Datei angelegt.

Es muß also noch ein anderes Problem existieren.

Re: SQLITE und Netzwerkpfad

Verfasst: 05.05.2014 22:25
von TroaX
Vielleicht hilft dir das ja weiter: http://support.apple.com/kb/PH10774?viewlocale=de_DE

Denn der Mac beherscht von Haus aus verschiedene Freigabeprotokolle. Je nachdem, wie du die Freigabe erstellt hast solltest du es mit dem passenden Protokoll versuchen.

Ich denke damit sollte es dann funzen.

Re: SQLITE und Netzwerkpfad

Verfasst: 06.05.2014 00:52
von shim
OK, ich erkläre es mal Schritt für Schritt:

Der Server läßt sich einwandfrei mounten. (SMB)
Der Zugriff funktioniert.

Auch das Anlegen einer Datei funktioniert (ohne smb:// davor...).
; a= CreateFile(#PB_Any,"/Volumes/192.168.1.22/xampp/htdocs/telefon/"+"xyz123.txt")
; WriteString(a,"Hallo")
; closefile(a)

Auch beim Öffnen der Datei (SQLite) erscheint noch kein Fehler.
Erst bei der anschließenden "select"-Abfrage erscheint der "disk I/O error".
Nun meine Frage, die ich evtl. nicht ganz klar formuliert habe: Ist jemand hier im Forum der dieses Verhalten bestätigen kann?

Ich erwarte folgendes:
Wenn ich mir einen Pfad über den Pathrequester hole, eine Datei anhänge und diese dann benutzen möchte, sollte doch genau das funktionieren. Die ganzen Protokolle liefert der Requester nicht mit, es wäre also vollkommen unmöglich auf unterschiedlich gemountete Verzeichnisse per SQLite zuzugreifen.

Re: SQLITE und Netzwerkpfad

Verfasst: 06.05.2014 08:26
von TroaX
Wenn ich mir einen Pfad über den Pathrequester hole, eine Datei anhänge und diese dann benutzen möchte, sollte doch genau das funktionieren. Die ganzen Protokolle liefert der Requester nicht mit, es wäre also vollkommen unmöglich auf unterschiedlich gemountete Verzeichnisse per SQLite zuzugreifen.
Der Patchrequester liefert im Grunde nur den Pfad zurück, den er vom OS beim Zugriff auf die Dateien/Ordner zurückgeliefert bekommt. Ich weiß nicht, wie MacOS tickt. Da du aber anscheinend die Dateien anlegen kannst, dürfte das Problem nicht an dem liegen.

Nutzt du eine virtuelle Maschine? Das kann bei solchen Sachen auch gerne Probleme machen, da der Virtualisierungskontext gerne mal mit den Eigenarten des Host-Dateisystems kollidiert.

Ich gehe mal nicht davon aus, das du die SQLite-Datei noch in einem SQLite-Manager gelinkt hast. Das wäre dann der Excel-Effekt. Alle wollen eine Exceldatei bearbeiten. Aber so lange einer sie offen hat, schauen alle anderen in die Röhre. Das läuft natürlich auch mit SQLite so ab :lol:

Bekommst du denn nur "Disk I/O Error" oder noch eine Nummer mit dabei? Vom logischen her würde ich die Meldung als "Datenträger Eingabe/Ausgabe Fehler" interpretieren und als erstes natürlich ein Problem mit der Datei vermuten.

Vielleicht ist es aber auch etwas ganz banales. Zum Beispiel der Datentyp CHAR. Den gibt es nämlich meines erachtens in SQLite garnicht. Du solltest es dann eher mit VARCHAR probieren.

Scheust du: http://sqlite.org/datatype3.html

Es kann also noch an so vielem liegen ;)

Re: SQLITE und Netzwerkpfad

Verfasst: 10.05.2014 21:14
von shim
Vielleicht nochmal kurz die Frage:

Läuft der Zugriff auf SQLite-Dateien über ein lokales Netzwerk bei Mac OS generell nicht?

Kann das bestätigt werden (Beispielcode aus der Hilfe) oder sind meine Mac's kaputt.

Vielen Dank für die Hinweise.

Übrigens: SQLite verhält sich beim Zugriff mehrerer Benutzer lange nicht so wie Office-Dateien.

Re: SQLITE und Netzwerkpfad

Verfasst: 10.05.2014 21:55
von mk-soft
Dein Mac ist nicht kaputt.

Also... Dateien anlegen und schreiben über "smb" und "afp" funktioniert.
Muss also an den Datenbanktreiber liegen.

Re: SQLITE und Netzwerkpfad

Verfasst: 10.05.2014 22:14
von ts-soft
shim hat geschrieben:Übrigens: SQLite verhält sich beim Zugriff mehrerer Benutzer lange nicht so wie Office-Dateien.
SQLite ist ja auch nicht für die Nutzung mehrerer User gleichzeitig ausgelegt und enthält auch keinerlei entsprechende Mechanismen.

Re: SQLITE und Netzwerkpfad

Verfasst: 10.05.2014 22:33
von mk-soft
Habe es einmal mit Firefox SQLite-Manager getestet. Geht auch über Netzwerk nicht.
Liegt also nicht an PB.