PDA

Vollständige Version anzeigen : SQL Update von 2. DB in 3. DB


Hütti
30.05.2012, 23:32
Hallo,

Ich habe eine dB, die zur Steuerung dient. Jetzt möchte ich aus einer zweiten dB in einer dritten dB eine Tabelle updaten (aktualisieren).

Die Tabelle heißt in beiden dB gleich.

Mit einfügen und löschen bekomme ich den SQL String hin, aber nicht mit Update.

Kann jemand helfen?

Danke

ebs17
31.05.2012, 00:01
Die Referenz auf eine externe DB erhältst Du über die DAO-Referenz (OpenDatabase). Auf die weitere DB könntest Du innerhalb der SQL-Anweisung verweisen:
SELECT * FROM Tabelle IN "X:\Dritte.mdb"
' oder
SELECT * FROM [X:\Dritte.mdb].Tabelle
Etwas umständlicher wäre der Weg, eine oder beide Tabellen temporär in die Hauptanwendung zu verknüpfen.

Hütti
31.05.2012, 05:47
Hallo,

Ja, soweit klar, aber wie baue ich das in eine Update Funktion mit ein? Bei mir sagt er immer Fehler in SQL Syntax. Er soll ja auch in eine andere dB schreiben...

Josef P.
31.05.2012, 07:29
Hallo!

Wenn du deine SQL-Anweisung gezeigt hättest, wäre es einfacher gewesen, den Fehler zu finden. Jetzt musst du selbst suchen. ;)

Diese Syntax sollte funktionieren:
update [X:\Dritte.mdb].Tabelle set EinFeld = 'Das ist Text' where id = 1

mfg
Josef

Hütti
04.06.2012, 18:53
hallo,

ja, klar du hast recht. besser man hat ein beispiel.

was du beschrieben hast, klappt auch. ich kann in die externe db schreiben, aber ich kann leider keine daten aus einer externen db holen...

er soll in a schreiben und aus b den wert holen.... geht das?

update [d:\database\xxx2011test\014\rcauftragabruf.accdb].tbldateiinfo as a set
select * from [d:\database\2011test\014\upauftragabruf.accdb].tbldateiinfo as b
a.bstnr=b.bstnr

Thomas Möller
04.06.2012, 19:05
Hallo!

ich kann in die externe db schreiben, aber ich kann leider keine daten aus einer externen db holen...

Gibt es einen Grund, warum Du die beiden Tabellen nicht in Deine Anwendung verknüpfen kannst? Dann könntest Du Dir die Aktualisierungsabfrage im Abfrageeditor zusammenstellen.

CU

Hütti
04.06.2012, 19:08
hallo,

ja, die db, die da gerade entsteht soll eine art "update-db" sein, sie dient dazu andere db's auf einen neueren stand zu bringen und mit dem sql wollte ich rel einfach die einstellungen aus einer db in die andere transferieren.
dachte es wäre leichter das so zu machen. wahrscheinlich ist es leichter feld für feld auszulesen und dann wieder wegzuschreiben per .edit auf dem recordset....
ein löschen und anfügen tut's nicht, da einige werte eines datensatzes erhalten bleiben sollen

ebs17
04.06.2012, 19:15
Ich würde für eine externe DB eine DAO-Referenz verwenden, wie in Beitrag #2 angemerkt (und tue dies auch praktisch).

Bei einem Feld-zu-Feld brauchst Du doch für die Recordsets auch eine Verbindung zu beiden DB's (via DAO oder ADODB), und ein Update läuft doch sicherlich über ein VBA-Script ab.

Hütti
04.06.2012, 19:17
hallo,

ja, denke das wird am ende einfacher... wollte nur was "dazulernen". da ein INSERT in eine externe db geht und ein SELECT aus einer externen auch, dachte ich, man kann das für ein UPDATE irgendwie verbinden.....:)

Josef P.
05.06.2012, 11:08
da ein INSERT in eine externe db geht und ein SELECT aus einer externen auch, dachte ich, man kann das für ein UPDATE irgendwie verbinden.
Das sollte auch funktionieren - allerdings muss die Update-Syntax stimmen. Dein Beispiel würde auch nicht mit lokalen Tabellen funktionieren. ;)

update [d:\database\xxx2011test\014\rcauftragabruf.accdb].tbldateiinfo as a set
select * from [d:\database\2011test\014\upauftragabruf.accdb].tbldateiinfo as b
a.bstnr=b.bstnr

Da fehlt ein join, damit die Tabellen verbunden werden.

Prinzip:
UPDATE Tab1 AS T1 INNER JOIN Tab2 As T2 ON T1.id = T2.id
SET T1.FeldX = T2.FeldX

Somit müsste auch folgendes funktionionieren:
UPDATE [d:\database\xxx2011test\014\rcauftragabruf.accdb].tbldateiinfo AS T1
INNER JOIN [d:\database\2011test\014\upauftragabruf.accdb].tbldateiinfo As T2
ON T1.id = T2.id
SET T1.bstnr = T2.bstnr

mfg
Josef

Hütti
06.06.2012, 10:41
da war mein fehler..... gedanklich... ich habe kein feld über das ich einen join machen kann, da, obwhol der gleiche feldaufbau, die daten unterschiedlich sind..... habe es mit dao.recordset gemacht und ist deutlich einfacher.

aber trotzdem gut zu sehen, wie es gehe würde.... wieder etwas gelernt.:)

danke

Josef P.
06.06.2012, 11:15
habe es mit dao.recordset gemacht
Wie erkennst du bei der Recordset-Variante die zusammenhängenden Datensätze?
Wenn es nichts zum Vergleichen gibt, kann man doch nicht wissen, welcher Datensatz aus rcauftragabruf einem Datensatz in upauftragabruf entspricht.
Du verlässt dich hoffentlich nicht auf die Reihenfolge der Datensätze im Recordset.

mfg
Josef

Hütti
06.06.2012, 11:19
hallo josef,

nein, ich hatte ja geschrieben, das es sich hier um "Stammdaten" handelt, die nicht historisiert sind. d.h., die tabellen, die es betrifft haben immer nur 1 zeile.... ich kann gefahrlos feld an feld übertragen...