PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kein shared zugriff auf paradox-db möglich!



jagusch
18.05.02, 16:32
Hallo Leute,
ich habe mit delphi ein datenbankprogramm geschrieben, mit dem mehrere user von verschiedenen rechnern auf eine gemeinsame paradox-datenbank zugreifen sollen, die sich auf einem netzlaufwerk befindet. Ist die datei auf einem zum lesen und schreiben freigegebenen windows-laufwerk, funktioniert der gemeinsame zugriff, ist sie auf einem novell-server, funktioniert es auch, nur auf einem linux (samba)- server kann nur jeweils ein user gleichzeitig die datei öffnen. Das verzeichnis, in dem sich die datenbankdatei befindet hat die linux-rechte 0777, jede datei wird in diesem verzeichnis auch mit diesen rechten erstellt und ich habe das verzeichnis unter samba sogar mit "force user xxx" freigegeben, so dass jeder, der in dieses verzeichnis geht, die selbe benutzerkennung hat. Trotzdem funktioniert es nicht! Was macht linux bzw. samba noch anders als novell oder windows? Ich bin mit meinem latein am ende und hoffe auf hilfe!!!

Tschüss

Jagusch:confused:

MadB
18.05.02, 17:40
Moinsen!

Hmm, sehr eigenartig.
Wird der Zugriff auf eine Paradox-DB nicht über die BDE geregelt?
Es wundert mich etwas, dass es überhaupt funktioniert.
Nun gut, wie dem auch sei.
Wie lautet denn die Fehlermeldung, wenn ein zweiter Nutzer auf die DB zugreift? Eventuell kann man daraus ja was erkennen.

Grüße

Torsten

jagusch
19.05.02, 08:24
Hallo,

die fehlermeldung lautet einfach "Tabelle kann nicht geöffnet werden", was ich ebenfalls sehr eigenartig finde. Die BDE regelt den shared-zugriff normalerweise über zwei dateien, "paradox.lck" und "pdoxusrs.lck", die in das verzeichnis geschrieben werden, in dem auch die datenbankdatei steckt. Deshalb müssen auf dieses verzeichnis schreibrechte existieren. Unter Linux werden diese dateien auch richtig mit den rechten 777 und sogar mit dem ownername erstellt, den ich mit force-user eingestellt habe. Trotzdem kann nur ein user gleichzeitig auf die datei zugreifen. Wenn ich versuche, die datei mit einem texteditor zu öffnen erhalte ich ebenfalls die fehlermeldung, dass die datei bereits geöffnet ist und kann sie gar nicht oder (je nach editor) schreibgeschützt öffnen. Da scheint mir irgendwie das Problem zu liegen - was muss ich in der smb.conf einstellen, damit mehrere user gleichzeitig eine datei öffnen können? Denn unter Linux kann ich mit einem Texteditor die datei öffnen und editieren, während sie von windows aus geöffnet ist!

Tschüss

Jagusch

MadB
19.05.02, 10:56
Moinsen!

OK, dann zeige mir (uns) doch mal bitte Deine smb.conf
Eventuell wird daraus was erkenntlich.

Aber noch mal zur DB allgemein. Mir ist völlig unerklärlich, wie der Zugriff überhaupt erfolgt. (das hat jetzt nix mit dem eigentlichen Problem zu tun)
Der wird doch normalerweise über einen Alias geregelt. Und einen Alias auf einer Linux-Kiste habe ich noch nie gesehen.
Oder wird der Zugriff über ODBC-Treiber geregelt?

mfg

Torsten

jagusch
19.05.02, 14:44
hallo,

hier die smb.conf:
-----------------------------------snip----------------------------
# Samba config file created using SWAT
# from peters.ja.de (192.168.2.2)
# Date: 2002/05/19 15:26:37

# Global parameters
[global]
workgroup = JAGUSCH
encrypt passwords = Yes
time server = Yes
keepalive = 30
logon script = scripts\default.bat
domain logons = Yes
os level = 2
domain master = True
preload = netlogon, homes, alle, haushalt, www, cdrom
admin users = admin, root

[netlogon]
path = /home/netlogon
admin users =
read only = No
guest ok = Yes
browseable = No

[homes]
comment = Heimatverzeichnis
read only = No
create mask = 0750
browseable = No

[cdrom]
comment = Linux CD-ROM
path = /cdrom
locking = No

[printers]
comment = All Printers
path = /tmp
create mask = 0700
printable = Yes
browseable = No

[dbd]
path = /home/alle/dbd
force user = peter
force group = jagusch
read only = No
create mask = 0777
force create mode = 0777
directory mask = 0777
force directory mode = 0777
fstype = FAT
dos filemode = Yes
dos filetimes = Yes
dos filetime resolution = Yes
-----------------------------------snap----------------------------

Das Verzeichnis, um das es geht, ist das Verzeichnis "dbd".
Das mit dem alias ist kein problem, denn ich kann mit "net use" im netlogon-script dem share "dbd" einen laufwerkbuschstaben zuordnen und den dann bei der alias-vergabe benutzen. Aber nicht mal das ist nötig, wenn ich das programm, das mit der datei arbeitet ins selbe verzeichnis lege und unter delphi einfach ohne alias auf die datei zugreife. All das funktioniert wie gesagt z.B. auf einem novell-server problemlos, und der unterstützt auch nicht die bde.

Tschüss

Jagusch

MadB
19.05.02, 14:54
Moinsen!

Hmm, ich sehe gerade, dass Du mit einem Logon-Script arbeitest. Ansich sollte das kein Problem darstellen, doch sicher bin ich mir nicht.
Evnetuell ist der Zugriff bei einem Logon-Script so geregelt, dass nur ein User zugreifen kann. Damit habe ich aber keine Erfahrung.
Ich kann mir jedoch gut vorstellen, dass es daran liegt.
Gehe ich recht in der Annahme, dass dbd beim Login einen Laufwerksbuchstaben zugeordnet bekommt?
Ohne Logon-Script wird es aber erst recht nicht funktionieren, da Du dann ja keinen Pfad angeben kannst.
Verzwickte Lage.
Ich denke mal, dass ein User beim Zugriff auf die DB die Exklusivrechte dafür bekommt. Daher dann wahrscheinlich auch der Fehler.
Sorry, aber eine Lösung habe ich auch nicht.

Grüße

Torsten

MadB
20.05.02, 14:48
Moinsen!

@jagusch
Lösung gefunden?

Kleiner Tipp am Rande.
Borland hat die BDE, somit auch Paradox, zum "alten Eisen" gelegt. Somit wird in Zukunft in diese Richtung nichts mehr entwickelt/geändert.
Ich versuche mich momentan mit Interbase, da ich auch noch zwei Anwendungen mit Paradox laufen habe. Eine der Anwendungen kommt so langsam in ein Statium, in dem Paradox keinen Sinn mehr macht.

Grüße

Torsten

Hans-Georg Normann
20.05.02, 21:29
Hi,

mal bescheidene Frage, wenn x:\pfad\... geht, schon mal \\server\pfad\... probiert? auf diese Weise kann ich auch zugreifen.

Kannst du im Debugger nicht mal nachprüfen, wer wann welche Datei im Zugriff hat? Wenn Delphi Tabelle sagt, dann ist das meistens auch so. Paradoxusrs.lck Fehler sehen meines Wissens anders aus. Mit fuser -u Dateiname[n] können die Zugriffe auf eine Datei angezeigt werden.

Hat da vielleicht jemand die Datei mit Exclusivrechten geöffnet (vielleicht Defaulteinstellung deines Programmes?)?

Hans

jagusch
25.05.02, 07:25
Hallo,
der Zugriff über //server/pfad funktioniert ebenfalls, aber ebenfalls nur von einer workstation zur selben Zeit. Auch von der Delphi-Datenbankoberfläche aus kann nur ein user die Tabelle öffnen, was dagegen spricht, dass es an einem Exklusiv-Zugriff liegt - außerdem würde der gemeinsame Zugriff von der Anwendung aus dann auch auf einem Windows-Laufwerk nicht funktionieren; tut er aber. Irgendwas muss auf der Betriebssystemebene anders laufen - woher erhält die Anwendung die Information, dass die Datei bereits geöfnet ist? Diese Information ist bei Windows und Samba/Linux offenbar unterschiedlich. Aber worin liegt der Unterschied?
Ich denke auch, dass ich von der BDE Absschied nehmen muss (so ganz geheuer war sie mir ohnehin nie) und versuche mich gerade in mysql und php reinzuarbeiten. Hat jemand Erfahrung darin, wie man unter delphi auf eine sql-Datenbank auf einem Linux-Server zugreift? Für Tips wäre ich riesig dankbar. Trotzdem würde ich mein Problem mit dem Dateizugriff gern noch lösen, damit meine fertigen Programme wenigstens erstmal laufen.

Tschüss

Jagusch

MadB
25.05.02, 10:13
Moinsen!

Sorry, nun bin ich auch am Ende mit meinem Latein.
Paradox habe ich bis dato nur auf Windows-Kisten eingesetzt.
Bei anderen Betriebssystemen griff ich immer auf eine echte C/S-Datenbank zurück (meistens Interbase).
Ich kann Dir lediglich noch einen letzten guten Tipp geben.
Schau doch mal hier vorbei. www.entwickler-forum.de
Wenn man Dir da nicht helfen kann, dann nirgends. Das Forum ist wohl das beste seiner Art mit absoluten Delphi-Cracks als Mitglieder.

Grüße

Torsten

jagusch
30.06.02, 06:19
Hallo Torsten u.a.,

eine Lösung habe ich dort auch nicht gefunden, aber ich denke, ich weiß nun, warum es nicht geht. Also falls es jemanden interessiert:

Eine Datenbank im Netzwerk zu betreiben erfordert die Möglichkeit, einzelne Datensätze zu sperren. So was war jedoch bei DOS (und damit auch bei Windows) nicht vom Betriebssystem vorgesehen. Die BDE-Entwickler haben dieses Problem umgangen, indem sie in die Datei PDOXUSRS.LCK die Länge (in Byte) der Datenbankdatei eintragen und dann DOS mitteilen, dass die Datei von Byte x bis Byte y gesperrt ist. (Byteweise sperren kann DOS nämlich). Da die BDE Linux nicht unterstützt und Linux das Byteweise Sperren einer Datei anders (oder gar nicht - da bin ich überfragt) vornimmt, funktioniert dieses Verfahren nicht, wenn die Datenbankdatei auf einem Linux-System liegt.

So weit zu meiner Theorie. Vielleicht hat ja jemand noch eine Idee, wie man das Problem u.U. umgehen kann, ansonsten arbeite ich mich gerade in MySQL ein und denke, dass ich mich von der BDE verabschieden werde.

Vielen Dank boch mal für die Hilfsversuche

Jagusch

ChatErbse
01.07.02, 09:04
Dass könnte mit den Oplocks von Samba zusammenhängen, schau mal hier hinein: http://www.linuxforen.de/forums/showthread.php?s=&threadid=32527

mfg
CE