![]() |
Datenbank: Paradox • Zugriff über: ADO
Paradox-DB-Prog Netzwerkfähig ohne BDE
Hallo!
War lange nich mehr hier, bin aber trotzdem mal wieder da :mrgreen: Ich habe eine Paradox-DB mit 6 Tabellen (insgesamt 50 MB reine Daten!). Das Programm, welches diese DB verwaltet, soll im Netzwerk von einem (Terminal-) Server laufen. Alle Nutzer sollen das Programm übers Netzwerk starten können (DB liegt auf Server). Zu meinem Problem: Die Daten aus der DB sollen "archiviert" werden. Dies soll so geschehen, dass das komplette Programm (exe + DB) seperat gesichert wird (nicht mehr benötigte Daten werden gelöscht). Man soll jetz allerdings noch ohne Veränderungen der BDE oder des Programms das "archivierte" Programm mit DB starten können. Hoffe Ihr habt das soweit verstanden :stupid: -> DB Prog soll Netzwerkfähig sein (soweit ich weiß geht das nur mit BDE-Eintrag = statische Pfade zur DB), aber das verhindert es, dass ich das archivierte Prog selbstständig starten kann (weil dafür kein BDE-Eintrag vorhanden ist). Wie könnte ich das lösen? :roteyes: Ich dachte mir das eventuell so, dass ich die Pfadangabe des BDE-Eintrags durch Script ändere, eben jeweils für das gestartete Programm (archiviertes oder aktuelles Jahr/DB). :freak: Vielen Danke soweit, Jacuzzi. |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
1, Willst Du nun wie im Text mit BDE arbeiten oder im Titel mit ADO?
2, Wie an vielen Posts zu merken ist die Lauffähigkeit von BDE im Netzwerk nicht so einfach herzustellen. Und du willst dann noch mit Terminalserver und vielen DB's arbeitn :gruebel:. Also ich würde sagen such dir erst mal 'ne pflegeleichtere DB bevor du viel Zeit investierst um die vielen Probleme der BDE zu umschiffen. |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Hallo,
sowohl mit BDE als auch mit ADO muss der Pfad nicht fest (per Alias in der BDE) gesetzt sein. Er kann auch in einer Ini stehen. Über Query.DataBaseName kann z.B. der Pfad von Hand gesetzt werden (vorher wird er z.B. aus einer Ini gelesen). Die könntest dein Program so ändern, dass es in einer Ini (in dem gleichen Verzeichnis) nach einem Pfad sucht und den verwendet. Gibt es den Pfad nicht, wird der Alias verwendet. Bei ADO hast du ja eh nen Connection-String, den kann man auch von Hand zusammenbauen. Heiko |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Zitat:
Und der BDE-Eintrag is doch statisch (kann während der Laufzeit nicht geändern werden), oder etwa doch.!? |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Hallo,
DataBaseName kann auch ein Pfad sein, zumindestens bei Paradox unter der BDE. Besser wäre allerdings, eine richtige TDataBase zu verwenden, dort kann natürlich der Pfad ebenfalls festgelegt werden. Vorteil: Man muss nicht bei jeder Query ran. Heiko |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Gut.
Database1.DatabaseName := 'tabellen\'; // Datenbank den Tabellen-Pfad zuweißen Un mit was greif ich dann auf diese Database1 zu? Bei der Query lässt sich als Databasename nicht "Database1" eintragen. Wie mach ich das, ich blick da gerade nich durch :gruebel: |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Hallo,
viell. mal die Hilfe bemühen ? Mensch ;) DataBase1.DataBaseName:= 'db'; DataBase1.Directory:= sDirName; // was auch immer du ausgelesen hast Query.DataBaseName:= DataBase1.DataBaseName; Noch ein paar Anmwerkungen: 1. keine relativen Pfaden benutzen (gibt nur Ärger, wann im WorkDir bei Windows was anderes steht) 2. Mit extractFilePath(Application.ExeName) kann der Pfad der aktuellen Anwendung einfach ermittelt werden Heiko |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Schönen Danke soweit.
Aber wie läuft es jetzt, wenn ich das Programm übers Netzwerk vom Server aus laufen lassen will? Z.B. die Paradox Einstellungen aus der BDE, wie diese blöden Sperr-Dateien (PDOXUSRS.NET und/oder PDOCUSRS.LCK). Geht das dann noch, sonst kamen da immer Zugriffsprobleme, beim gleichzeitigen Aufruf des Programms von mehreren Usern im Netz. |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Hallo,
NET DIR hat damit überhaupt nichts zu tun. Das musst du natürlich wie immer setzen, also so, dass alle Nutzer ein gemeinsames Verzeichnis haben. Für das Archiv-Programm: Das wird ja auch übers Netz gestartet, also wird das gleiche NET-Verzeichnis genommen. Für Datenbank übers Netz: Was denn nun, Terminalserver, übers Netz ??? Bitte genauer ausdrücken! :wall: :zwinker: Falls sowohl Terminalserver als auch übers Netz gearbeitet werden soll, muss NET DIR auf einen gemeinsames Verzeichnis gesetzt sein. Das kann z.B. eines auf dem eigentlichen Server sein. Bsp der Dateien auf dem Server c:\data\db -> Datenbank-Pfad c:\data\common -> Net Dir c:\data wird jetzt freigegeben und z.B. als Z verknüpft. Dann wäre z:\db der Datenbank-Pfad und z:\common das NET DIR. Beim PrivateDIR gibt es allerdings Probleme. Dass solltest du per Programm setzen. Beim Terminalserver muss jeder Nutzer ein eigenes Verzeichnis dafür haben (z.B. das TEMP). Falls die sich alle über einen den gleichen User anmelden (zu wenig Lizenzen), hast du ein Problem. Das kannst du dann nur per Codieren ändern (?). Z.B. könntest du ein Login-Form einbauen mit eindeutigen Usernamen und die Usernamen als Unterverzeichnis des Temp anlegen und dort das Private setzen. Dazu darf die DB natürlich noch nicht offen sein. Also der Terminalserver sähe dann so aus. c:\temp (als Bsp, ich weiss das dass under Dokument und bla steht). c:\temp\mueller -> privare dir mueller c:\temp\meier -> private dir meier Unterhalb des Programms würde ich das nicht anlegen, das gibt spätestens mit Vista Problem (UAC). Wie man das PrivateDir per Code setzt, steht in der Hilfe. (Ich glaube unter TSession). Heiko PS: Wie du siehst, ist das alles nicht so einfach bei Paradox. Nimm lieber ne andere DB (Firebird2 z.B.) |
Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
Danke für deine Bemühungen, aber ich glaube wir haben aneinander vorbei geredet (bzw. ich hab mich falsch ausgedrückt) *sry
Ich mach es jetzt so, dass ich den BDE Eitnrag lösche und dann einen mit richtigem Pfad wieder neu erzeuge:
Delphi-Quellcode:
DbiInit(nil);
// Erstellen eines BDE-Eintrags try DbiAddAlias(nil, 'TEST', 'paradox', 'PATH:c:\TEST', True); DbiCfgSave(nil, nil, True); except ShowMessage('BDE Fehler!'); end; // Löschhen eines BDE-Eintrags try DbideleteAlias(nil,'TEST'); DbiCfgSave(nil, nil, True); except ShowMessage('BDE Fehler!'); end; DbiExit(); btw. Eine andere DB kommt aufgrund von Kompatibilitäts-Problemen mit anderen Firmen leider nicht in Frage. Ciao Jacuzzi. :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz