Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

SQL - die zweite Runde

Begonnen von Elwood, August 07, 2011, 18:21:07

⏪ vorheriges - nächstes ⏩

Elwood

Eigentlich sollte ich mir das aus meinem Letzten Thread ableiten können, aber leider geht mir grad das Hirnschmalz aus...

Ich möchte Tabellen in einer Datenbank aktualisieren mit Werten einer strukturell identischen, externen Datenbank.
Im ersten Schritt habe ich mit die Tabellen verknüpft und die entsprechenden Anfügeabfragen zusammengeklickt.
(Ich schäme mich auch ordentlich... ;-) )

Das sieht dann beispielsweise so aus:
INSERT INTO Ansprechpartner ( ID_CC, Anrede, VName, NName, [Position], [Tel-DW], email, Bemerkung )
SELECT [CC-firmen].ID, Ansprechpartner1.Anrede, Ansprechpartner1.VName, Ansprechpartner1.NName, Ansprechpartner1.Position, Ansprechpartner1.[Tel-DW], Ansprechpartner1.email, Ansprechpartner1.Bemerkung
FROM (Ansprechpartner1 INNER JOIN [CC-firmen1] ON Ansprechpartner1.ID_CC = [CC-firmen1].ID) INNER JOIN [CC-firmen] ON [CC-firmen1].Firmenname = [CC-firmen].Firmenname
WHERE (((Ansprechpartner1.neu)=True));

Nun möchte ich den Code dahingehend erweitern, dass ich die verknüften Tabellen direkt aus der Quelldatenbank aufrufe. Da brauche ich also geschickt plazierte "IN 'Pfad\Name'"
Aber wo? Mit den Joins blicke ich das nicht mehr.

Zur Abfrage selber (falls es interessiert):
In einem (hier nicht dargestellten) ersten Schritt habe ich neu angelegt Firmen in die Tabelle CC-firmen geholt.
Die ID kann von der Quelldatei abweichen, aber der Firmenname ist eindeutig. Für die Firma werden Ansprechpartner angelegt, die in obigem Code aktualisiert werden.
Dazu hole ich mit in der externen Datenbank den Firmennamen und kann mir darüber den in der hiesigen Tabelle vergebenen Schlüssel holen, den ich dann in die ID_CC des neuen Ansprechpartners einsetze.
Das klappt auch - nur wohin mit den "IN"?

database

#1
Hallo,

wenn micht nicht alles beisst sollte das wie folgt laufen:

SELECT MeineTabelle.ID, ExterneTabelle.ExternesFeld FROM [C:\DeinVerzeichnis\Access.mdb].DeineTabelle
    INNER JOIN [C:\DeinVerzeichnis\AndereDB.mdb].ExterneTabelle ON MeineTabelle.ID = ExterneTabelle.ID  ....

Wobei ich für mich nicht nachvollziehen kann warum die Verknüpfung von Tabellen nicht gewünscht wird.

Um eine Tabelle in einer fremden DB abzufragen gilt folgende Syntax:

SELECT * FROM ExternerTabelle IN 'C:\DeinVerzeichnis\ExterneDatenbank.mdb'


Verschiedene weitere Möglichkeite der Syntaxgestaltung findest du hier:
http://www.office-loesung.de/ftopic147324_0_0_asc.php

Elwood

Zitat von: database am August 07, 2011, 18:37:01
Wobei ich für mich nicht nachvollziehen kann warum die Verknüpfung von Tabellen nicht gewünscht wird.
Naja, das wäre die Alternative: Verknüpfen, verwursteln und wieder entknüpfen.
Denn wenn der Abgleich gemacht ist, wird die Quelle gelöscht.

Ich probier nachher mal weiter. (Ich dachte bisher, auf die externen Daten käme man nur mit SELEFT ... FROM...IN...?)

Aber jetzt muss ich erst mal auf Nahrungssuche gehen...

Elwood

Da fällt mir vor dem Ausprobieren noch ein:
Da sowohl externe als auch interne Tabelle identische Namen und Felder haben . braucht man da einen Alias?

Elwood

#4
So, jetzt hänge ich wieder:
INSERT INTO Ansprechpartner ( ID_CC, Anrede, VName, NName, [Position], [Tel-DW], email, Bemerkung )
SELECT [CC-firmen].ID, 'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.Ansprechpartner.Anrede, 'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.Ansprechpartner.VName, 'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.Ansprechpartner.NName, 'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.Ansprechpartner.Position, 'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.Ansprechpartner.[Tel-DW], [K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb].Ansprechpartner.email, 'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.Ansprechpartner.Bemerkung
FROM (Ansprechpartner
INNER JOIN [CC-firmen]
ON Ansprechpartner.ID_CC = [CC-firmen].ID

IN ' K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb' )
INNER JOIN [CC-firmen]
ON  'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.[CC-firmen].Firmenname = [CC-firmen].Firmenname
WHERE (( 'K:\Datenbanken\Mit Split\AkquiseXP-MW_be.mdb'.Ansprechpartner.neu)=True);

An der Stelle der IN- Klausel des ersten INNER JOIN motzt der Compiler wg. Fehler in JOIN-Operation.
Dabei entspricht das doch genau dem Beispiel aus dem Link??

Und ich frage mich natürlich, ob das mit dem 2. INNER JOIN gut geht. Der verbindet ja eine interne und eine externe Tabelle. Da kann man ja kein IN setzen.

DF6GL

Hallo,

ich frage mich, warum Du unbedingt die "IN"-Geschichte anstatt der Tabellenverknüpfungs-Methode benutzen willst...

Elwood

#6
 :D
Frag ich mich langsam auch...
Aber eigentlich müsste es doch irgendwie gehen, oder?

Na, ich werde mal sehen, ob ich die Tabellenverknüpfungen schneller zu Wege bringe.
Immerhin wäre hier
http://www.access-im-unternehmen.de/190.0.html
eine passende Funktion...

EDIT:
Damit habe ich es denn auch gemacht.