Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Doppelte Parameterabfrage bei Abfrageausführung über Formular Button

Begonnen von ReneK, Januar 04, 2016, 17:30:42

⏪ vorheriges - nächstes ⏩

ReneK

Hallo.

Ich habe ein paar Fragen, (ich arbeite mit Acc2003 und/oder Acc2013).
Ich habe eine Kreuztabellenabfrage erstellt, die ich über Parameter steuern kann.


PARAMETERS [Ab JahrMonat] Text ( 255 ), [Bis JahrMonat] Text ( 255 );
TRANSFORM Sum(Tab_Erf_Artikel.Gesamt) AS SummevonGesamt
SELECT Tab_Erf_Artikel.MODARTFB, [_ERFASSUNG].KDName, Sum(Tab_Erf_Artikel.Gesamt) AS [Gesamtsumme von Gesamt]
FROM _ERFASSUNG LEFT JOIN Tab_Erf_Artikel ON [_ERFASSUNG].VorgangID = Tab_Erf_Artikel.VorgangID
WHERE (((Tab_Erf_Artikel.RueckLiefMonat) Between [Ab JahrMonat] And [Bis JahrMonat]))
GROUP BY Tab_Erf_Artikel.MODARTFB, [_ERFASSUNG].KDName
PIVOT Tab_Erf_Artikel.RueckLiefMonat;


Führe ich die Abfrage normal aus, bekomme ich mein Ergebnis.

Diese Abfrage würde ich gern über einen Button aus einem Formular starten, und das Ergebis direkt exportieren.

Das mache ich mit

    'Access 2003
    DoCmd.TransferSpreadsheet acExport, 8, "Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle", _
                              "T:\Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle.xls", True, "tabelle1"
   
    'Access 2013
    'DoCmd.RunSavedImportExport ("Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle für Export")


Der Code für Acc2003 funktioniert soweit, ABER die Parameterabfrage kommt zweimal.
Gebe ich unterschiedliche Werte ein, bekomme ich gar kein Ergebnis.

Ich frag mich jetzt, wo die zweite Parameterabfrage herkommt.
In der Abfrage steht die nur einmal.
Im Code des Ereignisses steht schon mal gar nichts.

Der Exportcode für Acc2013 funktioniert, und hier kommt die Abfrage der Parameter auch nur einmal. Leider funktioniert dieser aber nicht unter Acc2003.

Kann mir das jemand erklären, oder schreiben wie ich das biegen muss, dass die Parameterabfrage nur einmal kommt?

Danke.

DF6GL

Hallo,

am Besten setzt Du die Parameter direkt mit VBA ein:

Dim strSQL as String, Ab as String, Bis as String

strSQl ="TRANSFORM SUM(Tab_Erf_Artikel.Gesamt) AS SummevonGesamt SELECT Tab_Erf_Artikel.MODARTFB, [_ERFASSUNG].KDName, SUM(Tab_Erf_Artikel.Gesamt) AS [Gesamtsumme von Gesamt] FROM _ERFASSUNG LEFT JOIN Tab_Erf_Artikel ON [_ERFASSUNG].VorgangID = Tab_Erf_Artikel.VorgangID WHERE (((Tab_Erf_Artikel.RueckLiefMonat) BETWEEN [Ab JahrMonat] AND [Bis JahrMonat])) GROUP BY Tab_Erf_Artikel.MODARTFB, [_ERFASSUNG].KDName PIVOT Tab_Erf_Artikel.RueckLiefMonat"

Ab = "'2015/11'"   'falls dies ein gültiger String ist
Bis = "'2015/12'"   'falls dies ein gültiger String ist

strSQl = Replace (strSQl,"[Ab JahrMonat]",Ab)
strSQl = Replace (strSQl,"[Bis JahrMonat]",Bis)

Currentdb.Querydefs("Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle").SQL = strSQL

DoCmd.TransferSpreadsheet acExport, 8, "Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle", _
                              "T:\Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle.xls", True, "tabelle1"



wobei between ... and ... auf Strings (Datentyp TEXT) angewendet ziemlich fehlerträchtig ist
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ReneK

Hallo Frauz.

Danke für die Antwort.
OK, das probiere ich.

Das heißt, wenn ich die Parameter aus der Abfrage rausnehme, dass ich dann kein Dialogfeld für eine Eingabe bekomme.
Löse ich das dann besser über ungebundene Felder im Formular, oder über eine Inputbox?
Das hab ich jetzt noch nicht so oft gemacht  ::)

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

ZitatLöse ich das dann besser über ungebundene Felder im Formular, oder über eine Inputbox?

Ich bevorzuge Formulare (Textfelder) ,weil sowieso eine Ablaufsteuerung existieren muss.  Inputboxen haben mehrere Nachteile.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ReneK


ReneK

Funktioniert spitzenmäßig  :D

Danke...


Dim strSQL As String, AbJahr_AKMK_1 As String, BisJahr_AKMK_1 As String, AKMK_1_Ort As String

strSQL = "TRANSFORM SUM(Tab_Erf_Artikel.Gesamt) AS SummevonGesamt SELECT Tab_Erf_Artikel.MODARTFB, [_ERFASSUNG].KDName, SUM(Tab_Erf_Artikel.Gesamt) AS [Gesamtsumme von Gesamt] FROM _ERFASSUNG LEFT JOIN Tab_Erf_Artikel ON [_ERFASSUNG].VorgangID = Tab_Erf_Artikel.VorgangID WHERE (((Tab_Erf_Artikel.RueckLiefMonat) BETWEEN [Ab JahrMonat] AND [Bis JahrMonat])) GROUP BY Tab_Erf_Artikel.MODARTFB, [_ERFASSUNG].KDName PIVOT Tab_Erf_Artikel.RueckLiefMonat"

AbJahr_AKMK_1 = "'" & Me.AbJahr_AKMK_1 & "'"
BisJahr_AKMK_1 = "'" & Me.BisJahr_AKMK_1 & "'"

strSQL = Replace(strSQL, "[Ab JahrMonat]", AbJahr_AKMK_1)
strSQL = Replace(strSQL, "[Bis JahrMonat]", BisJahr_AKMK_1)

CurrentDb.QueryDefs("Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle").SQL = strSQL


DoCmd.TransferSpreadsheet acExport, 8, "Tab_Erf_Artikel_Kunde_Menge_Kreuztabelle", _
                              Me.AKMK_1_Ort, True, "tabelle1"