freshtoto
Goto Top

Update Befehl via MS Access auf SQL Server

Hallo zusammen,
ich versuche gerade mit Hilfe von MS Access eine Tabelle auf einem SQL Server zu aktualisieren.

Also die Ausgangslage ist folgende:
Ich habe eine Excel Tabelle mit einträgen und zwei Spalten in denen diese Einträge klassifiziert werden. Auf meinem SQL Server gibt es ebenfalls zwei Tabellen. In der einen stehen die Werte die auch
in der Excel Tabelle vorhanden sind und in der zweiten sind die Felder vorhanden in die die Klassifizierungen eingetragen werden sollen. Das dies in zwei verschiedenen Tabellen steht ist vom System so vorgegeben und lässt sich nicht ändern.
Nun möchte ich mit Hilfe von MS Access die Werte in der SQL Datenbank mit den Klassifizierungswerten aus der Excel Tabelle aktualisieren.

Habe bereits eine Join Abfrage gemacht in die mir die Werte aus Excel Tabelle und SQL DB zusammengeführt anzeigt.
Hier meine Abfrage:

SELECT [ABC Kategorisierung].*, dbo_AccountBase.*
FROM ([ABC Kategorisierung] INNER JOIN dbo_AccountBase ON [ABC Kategorisierung].Firmenname = dbo_AccountBase.Name) INNER JOIN dbo_AccountExtensionBase ON dbo_AccountBase.AccountId = dbo_AccountExtensionBase.AccountId;

Jetzt habe ich versucht diese Abfrage so zu erweitern das ein Update Befehl daraus wird und die Kategorisierungsfelder in der Tabelle AccountExtensionBase auf dem SQL Server mit den Werten aus der Excel Tabelle gefüllt werden.

UPDATE dbo_AccountBase.AccountExtensionBase
SET new_klassifizierungcons = [ABC Kategorisierung].Klassifikation Cons, new_klassifizierungrec = [ABC Kategorisierung].Klassifikation Rec
SELECT [ABC Kategorisierung].*, dbo_AccountBase.* AS Data
FROM dbo_AccountExtensionBase INNER JOIN ([ABC Kategorisierung] INNER JOIN dbo_AccountBase ON [ABC Kategorisierung].Firmenname=dbo_AccountBase.Name) ON dbo_AccountExtensionBase.AccountId=dbo_AccountBase.AccountId;

Bei dieser Abfrage bekomme ich einen Syntaxfehler. Weiß jemand wo der Fehler liegen könnte bzw. ist es überhaupt möglich das auf diese Weise zu lösen??

Bin für Tipps und Anregungen dankbar

Grüße
freshToto

Content-Key: 140448

Url: https://administrator.de/contentid/140448

Printed on: April 16, 2024 at 21:04 o'clock

Member: freshToto
freshToto Apr 13, 2010 at 08:44:29 (UTC)
Goto Top
Sorry vergesst den Update Befehl den ich gepostet habe!
Der ist totaler Mist so kann das nicht funktionieren.

Ich glaube der Ansatz ist besser...

UPDATE dbo_AccountExtensionBase
SET new_klassifizierungcons = [ABC Kategorisierung Firmen].Klassifikation Consulting, new_klassifizierungrec = [ABC Kategorisierung Firmen].Klassifikation Recruiting
WHERE dbo_AccountExtensionBase.AccountId = ...

Jetzt hakt es irgendwie nur an der WHERE Klausel. Kann ich da irgendwie den Join Befehl rein packen??
Member: freshToto
freshToto Apr 13, 2010 at 11:35:05 (UTC)
Goto Top
nochmal ein Update!
habe die Abfrage die ich bereits gepostet habe unter "Datenabfrage" gespeichert. Auf diese greife ich nun in meiner Where Klausel zu.

UPDATE dbo_AccountExtensionBase SET dbo_AccountExtensionBase.New_klassifizierungcons = Datenabfrage.[Klassifikation Consulting], dbo_AccountExtensionBase.New_klassifizierungrec = Datenabfrage.[Klassifikation Recruiting]
WHERE (((dbo_AccountExtensionBase.AccountId)=[Datenabfrage].[AccountId]));

Leider bekomme ich immer noch nicht das gewünschte Ergebnis. Hat vielleicht jemand eine Idee?
Bekomme nur Popups in denen nach Parametern für folgende Werte gefragt wird:
Datenabfrage.Klassifikation Consulting
Datenabfrage.Klassifikation Recruiting
Datenabfrage.AccountId

Hat jemand ne Idee was das zu heisen hat??

Gruß
Member: Biber
Biber Apr 15, 2010 at 18:27:34 (UTC)
Goto Top
Moin freshtoto,

der Fehler hat wahrscheinlich mehrere Ursachen - einige davon verursacht im fernen Redmond, ein durchaus nennenswerter Anteil aber vermutlich in einer Gegend, die selbst für mich mit dem Fahrrad erreichbar wäre

Ich will mal so sagen....
WENN es dir denn nicht auszureden wäre, die beiden Felder [Klassifikation Recruiting] und [Klassifikation Consulting] nun redundant auch noch in der Tabelle "AccountExtensionBase" abzulegen, was ich mit keiner mir bekannten Normalform auch nur ansatzweise in Einklang bringen kann
DANN wäre der Weg dahin:
  • Reduziere die Rückgabe-Felder der "Datenabfrage"-Query auf die drei, die du beim UPDATE benötigst (AccountID, [Klassifikation Recruiting], [Klassifikation Recruiting])
  • und ja, "nur diese drei" bedeutet, dass du das leichtfüßige "SELECT [ABC Kategorisierung].*, dbo_AccountBase.*" nicht mehr verwendest. Nix Sternchen.
  • und weiterhin, dass die beiden Felder [Klassifikation Recruiting] und [Klassifikation Recruiting] in Zukunft aus einer (per Alias konkretisierten) Tabelle kommen und nicht "irgendwo im Resultset dabei sind"
  • und, ganz wichtig, dass die unter einem neuen Namen kommen, der keine Leerzeichen mehr enthält (Z.B. "...SELECT ...AccountBase.[Klassifikation Recruiting] as KlassRec, .." etc.

Mit der Kombination von "Feldnamen mit Leerzeichen" (erzwingen eckige Klammern) UND SubSelects in Abfragen kommt Access nicht klar

Aber wie geschrieben.... alles rein hypothetisch ....unter der Bedingung "WENN es denn nötig wäre"

Nach dem, was von deinem Datenmodell zu erkennen ist, ist es NICHT sinnvoll.
Die upzudatende Tabelle wird ubgedatet mit einer Abfrage über drei Tabellen, von denen sie selbst eine ist.

(Das muss jeder dreimal lesen... der Access-SQL-Parser aber auch. Das kann und darf nicht sein...)

Poste doch einmal die Relationen und Entitäten der drei genannten Tabellen (nicht der Excel-Quellen, sondern der angelegten MDB-Tabellen).

Da ist was aus dem Ruder gelaufen.

Grüße
Biber