none
Abfrage von MSSQL zu Access RRS feed

  • 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

    Mittwoch, 25. März 2020 11:43

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


    Sonntag, 29. März 2020 09:09
    Moderator

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


    Donnerstag, 26. März 2020 08:13
    Moderator
  • 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
    Donnerstag, 26. März 2020 11:03
  • 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.ArtikelNummer

    Das sollten die 3 "Parameter" sein.

    Das ist das Risiko bei Luftcode. ;-)

    Gruss - Peter


    Mitglied im www.dbdev.org
    Access-FAQ: www.donkarl.com


    Freitag, 27. März 2020 09:32
    Moderator
  • 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

    Freitag, 27. März 2020 09:53
  • 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

    Freitag, 27. März 2020 14:57
  • 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.ArtikelNummer

    Aber wie gesagt, lass sie weg und alles sollte gut sein.

    Gruss - Peter


    Mitglied im www.dbdev.org
    Access-FAQ: www.donkarl.com


    Freitag, 27. März 2020 16:13
    Moderator
  • 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
    Samstag, 28. März 2020 09:01
  • 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


    Sonntag, 29. März 2020 09:09
    Moderator
  • Ah Danke - so geht es
    Sonntag, 29. März 2020 09:24