Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Announcement
Collapse
No announcement yet.
Wo schreibe ich das alle User die gleiche Netzwerkkontrolldatei verwenden?
HAbe die Ttable mit der Tsession verbunden, doch jetzt kommt beim Formularaufruf folgende Meldung "Im Projekt test.exe ist eine Exception der Klasse EDBEngineError aufgetreten- Meldung " Verzeichnis wird von einer anderen .Net Datei kontrolliert
Verzeichnis M:\test\
Datei \\testlaufwerk\pdoxusrs.lck
Prozeß wurde angehalten ...
wer weiß Rat?
Hat das was mit den Paradox dateien zu tun?
Warum funktioniert das nicht??
Muß ich für jede ttable eine session machen oder reicht eine für alle ttables in meinen Programm
die lck-Dateien von Paradox werden zum Sperren angelegt. Brichst Du einen Test ab oder schmiert das Programm ab, wird die lck-Datei nicht automatisch gelöscht. Bist Du der einzige Nutzer, kannst Du die alten lck-Dateien gefahrlos löschen. Dann sollte das Progrämmelchen funktionieren.
dein Weg ist soweit schon richtig. Die Datei wird in Netfiledir von TSession eingetragen, und dann die Datenbank sowie jede Tabelle mit der Session verbunden. Hierdurch kannst du jedem Programm eine eigene Netzkontrolldatei zuweisen.
Brauchst du diese Funktion nicht, kann die Einstellung auch in der BDE-Konfiguration für den Eintrag Paradox vorgenommen werden. Somit gilt es als Vorgabe für alle Programme, die die BDE benutzen.
Wichtig ist dabei, das dies auf jedem Rechner vorgenommen wird. Die Fehlermeldung, dass die Tabelle noch von einer anderen Net-Datei kontrolliert wird, bedeutet, dass noch ein Rechner ohne diese Einstellung auf eine Tabelle zugreift.
Ich habe die 3 Dateien paradox.lck pdoxusrs.net pdoxwork.cfg gelöscht bevor ich die Änderungen mit dem Session durchgeführt habe.
Ich bin die einzige die an diesem Programm programmiert.
Leider funktioniert das noch immer nicht, ich habe alle ttables mit der session verbunden, doch er "schreit" immer noch!
Wie kann ich das installierfähig machen?
Ich meine, ich weiß ja den pfad noch nicht wo die daten des kunden liegen sollen, also muß ich ihn im installationspfad angeben.
WENN ICH MIT HILFE von dem von Inprise zertifiziertes Installationsprogramm eine Installation erstelle, kann ich dort den alias/verzeichnis der daten eingeben?????
Jain. Verlaß Dich nicht darauf das Dein Alias beim Kunden immer korrekt existiert !! Mit vorliebe wird z.B. von der Schi... T-Online Software die BDE nur teilweise neu installiert, bzw. die kompletten Aliase gelöscht (CFG-Datei wird ersetzt). Da die T-Online Software nun periodisch updated, hatten wir auch periodisch Probleme mit der BDE bei Kunden, mit T-Online
Nun, Du hast schon eine TSession angelegt, fehlt nur noch eine eigene TDatabase. Diese stellt im Grunde genommen ein dynamischer Alias dar. Eine Database ermöglicht also das gleiche wie ein globaler Alias der BDE-Konfiguration, ist aber "nur" zu Laufzeit der Anwendung gültig.
In der Database wird mit Params['PATH'] = c:\DatenVerzeichniss\ das Datenverzeichniss angegeben. ALLE TTables und TQuerys sollten mit der Database verknüpft sein.
<pre>
uses BDE;
procedure InitBDE;
begin
try
// erstmal alles schließen
Database.Connected := False;
Session.Close;
// Config lesen, Daten- und Netpfad als separate Angabe
DataPath := LeseDatenPfadAusConfig;
NetPath := LeseNetPfadAusConfig;
// nun Lockfiles auf Verdacht hin löschen
// ist kein Problem, da eingeloggte Sessions die Dateien sperren
// es werden also nur MÜLL-Lockfiles gelöscht die blockieren
DeleteFile(DataPath + 'Pdoxusrs.net');
DeleteFile(DataPath + 'Pdoxusrs.lck');
DeleteFile(DataPath + 'Paradox.lck');
DeleteFile(NetPath + 'Pdoxusrs.net');
DeleteFile(NetPath + 'Pdoxusrs.lck');
DeleteFile(NetPath + 'Paradox.lck');
// Werte zuweisen und öffnen
Session.NetFileDir := NetPath;
Session.PrivateDir := GenerateNewTempDirectory;
Session.Open;
Database.AliasName := GetAliasName(DataPath);
if Database.AliasName = '' then
begin
Database.Params.Values[sPATH] := DataPath;
Database.DriverName := sSTANDARD;
end else Database.Params.Values[sPATH] := '';
Database.Open;
except
MessageBox('Kann Datenbank nicht initi....);
Halt(0);
end;
end;
</pre>
"GenerateNewTempDirectory" sollte auf dem lokalen Rechner im Temp Ordner einen neuen Unterordner anlegen. Alle Querys und temporären BDE Dateien werden dann dort abgelegt. Dies verhindert das im Netzwerkbertieb Kollisionen/Verzögerungen auftreten.
"GetAliasName()" überprüft nur ob im Pfad ein Alias gemeint ist. z.b so: "ALIAS:PFLEDI" -> GetAliasName = "PFLEDI". Damit ist es möglich anstatt einen echten Datenpfad (c:\daten\xyz\) auf einen Verweiß auf einen globalen BDE-Alias zu nutzen.
Ich bevorzuge das globale Session Object und nutze KEINE zusätzlichen Sessions.
Die Database sollte einen Namen bekommen, da dieser der interne "AliasName" darstellt mit dem die TTables verknüpft werden.
Hallo,
ich bin auch gerade dabei eine Paradox-Datenbank mit Delphi 5 zu programmieren, auf die mehrere User zugreifen müssen . Zwei Fragen hätte ich da:
1. Sehe ich das richtig, das ich diese Pfadeinstellungen mit Session machen muss, damit alle problemlos auf die Tabellen zugreifen können ? Ich dachte bisher, das würde auch so klappen, konnte es aber noch nicht ausprobieren. NetPath muss demnach für jeden User anders sein, sehe ich das richtig ?
2. Ich habe versucht meinem Database wie in der dargestellten procedure den Pfad der Datenbank zuzuweisen, da ich eigentlich auch nicht mit einem Alias arbeiten wollte. Ist bloß die (vielleicht dumme) Frage, was ist 'sPATH' und 'sSTANDARD' ? Muss mein Compiler diese Ausdrücke kennen (tut er aber nicht) oder muss ich die irgendwo definieren ???
T'schuldige, sPATH und sSTANDARD sind in der Unit BDE deklariert und sollten szPATH bzw. szSTANDARD heisen. Im Grunde handelt es sich um die Strings 'PATH' und 'STANDARD'.
Ja, aber ungern, ist eben "nur" Routine und keine "besondere" Herrausforderung.
Davon abgesehen habe ich schon "fast" überall reingerochen nach 15 Jahren )
Comment