Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Paradox-DB-Prog Netzwerkfähig ohne BDE (https://www.delphipraxis.net/81440-paradox-db-prog-netzwerkfaehig-ohne-bde.html)

Jacuzzi 27. Nov 2006 14:10

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.

Bernhard Geyer 27. Nov 2006 14:19

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.

hoika 28. Nov 2006 08:34

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

Jacuzzi 28. Nov 2006 08:44

Re: Paradox-DB-Prog Netzwerkfähig ohne BDE
 
Zitat:

Zitat von hoika
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).
[...]

Heiko

Okay, aber Query.DataBaseName kann ich doch nur einen BDE-Eintrag zuordnen und nicht einen Pfad (wo die Tabellen liegen).

Und der BDE-Eintrag is doch statisch (kann während der Laufzeit nicht geändern werden), oder etwa doch.!?

hoika 28. Nov 2006 09:07

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

Jacuzzi 28. Nov 2006 09:17

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:

hoika 28. Nov 2006 09:31

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

Jacuzzi 28. Nov 2006 09:37

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.

hoika 28. Nov 2006 10:34

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.)

Jacuzzi 28. Nov 2006 10:40

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 23:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz