Beim Wechsel von BDE (Paradox und dBase) zu Interbase möchte ich auch umfangreiche Datenänderungen und Auswertungen auf den Server in die Datenbanken legen. Dazu ist es nötig, dass aus der aktiven Datenbank heraus (in der die Stored Procedure liegt, die die Verarbeitung steuert) auf andere Datenbanken zugegriffen wird. Aus den Beschreibungen zu Interbase und aus Büchern kann ich nicht erkennen, dass <b>in einer Stored Procedure ein Database-Connect auf eine andere Datenbank</b> möglich ist. Kann mir jemand einen Tipp geben, wie ich das Verfahren lösen kann?
Für meinen Arbeitsablauf habe ich folgende Situation:<br>
* Die Datenbank POST enthält (prinzipiell) unveränderliche Stammdaten, nämlich PLZ, Ortsnamen und die Art der Verarbeitung.<br>
* Eine oder mehrere Datenbanken ADRESSEN_A, ADRESSEN_B enthalten (unabhängig voneinander) die eigentlichen Adressen.<br>
* Zu jeder ADRESSEN-Datenbank gibt es eine oder mehrere Datenbanken VERSAND_A_1, VERSAND_A_2 usw., die eine bestimmte aktuelle Auswertung für beliebig lange Zeit speichert.
(Die Versand-Datenbanken könnten in die jeweilige Adressen-Datenbank integriert werden. Der Endanwender soll aber freie Hand haben, sich mehrere Versand-Daten aufzuheben. Deshalb ist eine Trennung praktischer, aber nicht notwendig.)
Die Auswertung soll mit den folgenden Schritten beginnen. Nach meiner Idee soll alles innerhalb von VERSAND_A_1 durch eine Stored Procedure gesteuert werden (die folgenden Dateinamen würden als Parameter an die Stored Procedure übergeben):
CONNECT TO 'Adressen_A.gdb' AS ADR ...
CONNECT TO 'Post.gdb' AS POST ...
INSERT INTO Daten<br>
SELECT * FROM :ADR:Adressen<br>
WHERE ...
DISCONNECT ADR
<b>Der folgende Befehl soll dies mit Daten aus der Post-Datenbank verknüpfen:</b>
INSERT INTO Zaehler<br>
( Plz, Adr, Art )<br>
/* das Feld Art steuert die weitere Verarbeitung */<br>
SELECT d.plz, SUM(d.anzahl), p.art<br>
FROM Daten d<br>
JOIN :POST:PLZ p ON d.plz = p.plz<br>
GROUP BY d.plz
DISCONNECT POST
Aus dem Anwenderprogramm heraus läuft dies problemlos. (Das habe ich mit Local SQL auch schon realisiert.)
Unter Interbase ist es aber natürlich sinnvoll, die Daten vollständig auf dem Server zu behalten. Dort habe ich dies noch nicht probiert: Erst wenn ich Klarheit darüber habe, was zum Ziel führt, will ich es genauer konstruieren. Nach meinen bisherigen Kenntnissen aus den Beschreibungen habe ich starke Zweifel, ob es so funktioniert, und bitte um entsprechende Kommentierungen. Danke schön! Jürgen
Für meinen Arbeitsablauf habe ich folgende Situation:<br>
* Die Datenbank POST enthält (prinzipiell) unveränderliche Stammdaten, nämlich PLZ, Ortsnamen und die Art der Verarbeitung.<br>
* Eine oder mehrere Datenbanken ADRESSEN_A, ADRESSEN_B enthalten (unabhängig voneinander) die eigentlichen Adressen.<br>
* Zu jeder ADRESSEN-Datenbank gibt es eine oder mehrere Datenbanken VERSAND_A_1, VERSAND_A_2 usw., die eine bestimmte aktuelle Auswertung für beliebig lange Zeit speichert.
(Die Versand-Datenbanken könnten in die jeweilige Adressen-Datenbank integriert werden. Der Endanwender soll aber freie Hand haben, sich mehrere Versand-Daten aufzuheben. Deshalb ist eine Trennung praktischer, aber nicht notwendig.)
Die Auswertung soll mit den folgenden Schritten beginnen. Nach meiner Idee soll alles innerhalb von VERSAND_A_1 durch eine Stored Procedure gesteuert werden (die folgenden Dateinamen würden als Parameter an die Stored Procedure übergeben):
CONNECT TO 'Adressen_A.gdb' AS ADR ...
CONNECT TO 'Post.gdb' AS POST ...
INSERT INTO Daten<br>
SELECT * FROM :ADR:Adressen<br>
WHERE ...
DISCONNECT ADR
<b>Der folgende Befehl soll dies mit Daten aus der Post-Datenbank verknüpfen:</b>
INSERT INTO Zaehler<br>
( Plz, Adr, Art )<br>
/* das Feld Art steuert die weitere Verarbeitung */<br>
SELECT d.plz, SUM(d.anzahl), p.art<br>
FROM Daten d<br>
JOIN :POST:PLZ p ON d.plz = p.plz<br>
GROUP BY d.plz
DISCONNECT POST
Aus dem Anwenderprogramm heraus läuft dies problemlos. (Das habe ich mit Local SQL auch schon realisiert.)
Unter Interbase ist es aber natürlich sinnvoll, die Daten vollständig auf dem Server zu behalten. Dort habe ich dies noch nicht probiert: Erst wenn ich Klarheit darüber habe, was zum Ziel führt, will ich es genauer konstruieren. Nach meinen bisherigen Kenntnissen aus den Beschreibungen habe ich starke Zweifel, ob es so funktioniert, und bitte um entsprechende Kommentierungen. Danke schön! Jürgen
Comment