Benutzer mit den meisten Antworten
Abfrage von MSSQL zu Access

Frage
-
Hallo - hoffe allen geht es soweit gut
ich habe eine Abfrage im MMS vom MSSQL Server gebaut - die auf diesem auch läuft
nun habe ich versucht diese in die Access DB zu übertagen - bekomme es aber leider nicht hin
Access meldet Fehler bei FROM (beim ersten) - kann mir jemand sage wie oder was ich anpassen müsste für Access
UPDATE tblArtikel SET tblArtikel.AktBest = tblArtikelLagerort_Que.Summe_AktBest, tblArtikel.VerBest = tblArtikelLagerort_Que.Summe_VerBest FROM ( SELECT tblArtikelLagerort.ArtikelNummer, SUM(tblArtikelLagerort.AktBest) AS Summe_AktBest, SUM(tblArtikelLagerort.VerBest) AS Summe_VerBest FROM tblArtikelLagerort GROUP BY tblArtikelLagerort.ArtikelNummer) AS tblArtikelLagerort_Que WHERE tblArtikelLagerort_Que.ArtikelNummer = tblArtikel.ArtikelNummer
Antworten
-
Hallo,
Die DemoDB war hilfreich. ;-)
UPDATE tblArtikel AS A SET A.AktBest = DSum("AktBest","tblArtikelLagerort","ArtikelNummer=" & [A].[ArtikelNummer]), A.VerBest = DSum("VerBest","tblArtikelLagerort","ArtikelNummer=" & [A].[ArtikelNummer]);
Geht leider nur mit DSum, weil Jet-SQL hier für den Update stärkere Restriktionen als z.B. T-SQL hat.
Gruss - Peter
Mitglied im www.dbdev.org
Access-FAQ: www.donkarl.com- Bearbeitet Peter DoeringMVP, Moderator Sonntag, 29. März 2020 09:09
- Als Antwort markiert MCDPone Sonntag, 29. März 2020 09:25
Alle Antworten
-
Hallo,
Die Syntax funktioniert so in Access nicht. Wenn du das Statement nicht per PassThrough an den Server schicken, sondern lokal ausführen willst, musst du es sinngemäß so umbauen, dass die Tabellen / Verknüpfungen zwischen den Schlüsselwörtern UPDATE und SET angeordnet sind.
Luftcode:
UPDATE tblArtikel AS A INNER JOIN (SELECT SUM(tblArtikelLagerort.AktBest) AS Summe_AktBest, SUM(tblArtikelLagerort.VerBest) AS Summe_VerBest FROM tblArtikelLagerort AS AL WHERE AL.ArtikelNummer = A.ArtikelNummer GROUP BY AL.ArtikelLagerort ) AS tblArtikelLagerort_Que ON A.ArtikelNummer = tblArtikelLagerort_Que.ArtikelNummer SET A.AktBest = tblArtikelLagerort_Que.Summe_AktBest, A.VerBest = tblArtikelLagerort_Que.Summe_VerBest
Gruss - Peter
Mitglied im www.dbdev.org
Access-FAQ: www.donkarl.com- Bearbeitet Peter DoeringMVP, Moderator Donnerstag, 26. März 2020 08:13
- Als Antwort markiert MCDPone Donnerstag, 26. März 2020 11:03
- Tag als Antwort aufgehoben Peter DoeringMVP, Moderator Sonntag, 29. März 2020 15:10
-
Danke erst einmal
So wie dein "Luftcode" ist funktioniert er nicht (3 x Parameter Abfrage beim ausführen) - werde ihn aber für mich versuchen "richtig" anzupassen und das ergebniss dann hier 1 x zurück Schreiben
müsste
GROUP BY AL.ArtikelLagerort
nicht auch
GROUP BY AL.ArtikelNummer
sein?
Vielen Dank Peter
Michael
- Bearbeitet MCDPone Donnerstag, 26. März 2020 11:06
-
Hallo,
Ja, es müsste AL.ArtikelNummer heißen, und 2 weitere Copy/Paste-Fehler hab ich auch gefunden:
Alt: SUM(tblArtikelLagerort.AktBest)
Neu: SUM(AL.AktBest)Alt: SUM(tblArtikelLagerort.VerBest)
Neu: SUM(AL.VerBest)Alt: GROUP BY AL.ArtikelLagerort
Neu: GROUP BY AL.ArtikelNummerDas sollten die 3 "Parameter" sein.
Das ist das Risiko bei Luftcode. ;-)
Gruss - Peter
Mitglied im www.dbdev.org
Access-FAQ: www.donkarl.com- Bearbeitet Peter DoeringMVP, Moderator Freitag, 27. März 2020 09:32
-
Hallo Peter
noch nicht ganz
So sieht es aus
UPDATE tblArtikel AS A INNER JOIN (SELECT SUM(AL.AktBest) AS Summe_AktBest, SUM(AL.VerBest) AS Summe_VerBest FROM tblArtikelLagerort AS AL WHERE AL.ArtikelNummer = A.ArtikelNummer GROUP BY AL.ArtikelNummer ) AS tblArtikelLagerort_Que ON A.ArtikelNummer = tblArtikelLagerort_Que.ArtikelNummer SET A.AktBest = tblArtikelLagerort_Que.Summe_AktBest, A.VerBest = tblArtikelLagerort_Que.Summe_VerBest
er meckert aber noch die Verbindung an
ON A.ArtikelNummer = tblArtikelLagerort_Que.ArtikelNummer
-
Hallo!
So luftmäßig sehe ich 2 Fehler. Die angemeckerte Artikelnummer muss in das SELECT der Unterabfrage und die Referenz auf A... im WHERE der Unterabfrage ist doppelt gemoppelt und dürfte eh einen Fehler schmeißen. Luftergebnis wäre dann:
UPDATE tblArtikel AS A INNER JOIN
(SELECT
AL.Artikelnummer,
SUM(AL.AktBest) AS Summe_AktBest,
SUM(AL.VerBest) AS Summe_VerBest
FROM tblArtikelLagerort AS AL
GROUP BY AL.ArtikelNummer ) AS tblArtikelLagerort_Que
ON A.ArtikelNummer = tblArtikelLagerort_Que.ArtikelNummer
SET
A.AktBest = tblArtikelLagerort_Que.Summe_AktBest,
A.VerBest = tblArtikelLagerort_Que.Summe_VerBest
Karl
Access-FAQ: http://www.donkarl.com- Bearbeitet Karl DonaubauerMVP Freitag, 27. März 2020 14:59
-
Hallo,
Karl hat Recht, die WHERE-Bedingung ist doppelt gemoppelt. Der saubere Weg ist, sie einfach rauszunehmen.
Würde man meinen Luft-Erguss hypothetisch mit WHERE-Bedingung zum Laufen bringen wollen, müsste man tblArtikel in die Unterabfragen aufnehmen:
FROM tblArtikelLagerort AS AL INNER JOIN tblArtikel AS A
ON AL.Artikelnummer = A.ArtikelNummer WHERE AL.ArtikelNummer = A.ArtikelNummerAber wie gesagt, lass sie weg und alles sollte gut sein.
Gruss - Peter
Mitglied im www.dbdev.org
Access-FAQ: www.donkarl.com- Bearbeitet Peter DoeringMVP, Moderator Freitag, 27. März 2020 16:13
-
Hallo und danke erst einmal
Jetzt bekomme ich keine Parameter abfrage mehr aber die Abfrage schmeisst mir ein
"Operation muss eine aktualisierbare Abfrage verwenden"
raus
leider auch wenn ich die Abfrage mir mit einzel Abfragen unter Access zusammen baue
was ich gerade überhaupt nicht verstehe
Ich dachte erst das es am ODBC treiber liegt aber das ergebnis beim zugriff auf eine Access DB ist genau das gleiche
- Bearbeitet MCDPone Sonntag, 29. März 2020 09:25 löschen externer daten
-
Hallo,
Die DemoDB war hilfreich. ;-)
UPDATE tblArtikel AS A SET A.AktBest = DSum("AktBest","tblArtikelLagerort","ArtikelNummer=" & [A].[ArtikelNummer]), A.VerBest = DSum("VerBest","tblArtikelLagerort","ArtikelNummer=" & [A].[ArtikelNummer]);
Geht leider nur mit DSum, weil Jet-SQL hier für den Update stärkere Restriktionen als z.B. T-SQL hat.
Gruss - Peter
Mitglied im www.dbdev.org
Access-FAQ: www.donkarl.com- Bearbeitet Peter DoeringMVP, Moderator Sonntag, 29. März 2020 09:09
- Als Antwort markiert MCDPone Sonntag, 29. März 2020 09:25