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.
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
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 ::)
Hallo Rene,
Schaust Du auch hier: http://www.donkarl.com?FAQ6.16 (http://www.donkarl.com?FAQ6.16)
gruss ekkehard
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.
Ich versuch mein Glück.
Dankeschön ! ;D
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"