Verhalten Abfrage / VBA Recordset unterschiedlich ? Access 2007

02/01/2011 - 16:48 von szangs | Report spam
Hallo, habe hier ein Problem was mich zum Verzweifeln treibt. Bisher
habe ich VBA SQL Zugriffe immer in Access Abfragen getestet, den SQL
Code in VBA kopiert und dann z.B. mir recordset.open verwendet.
Klappte immer 100%. Diesmal aber nicht. Es handelt sich um 4 Tabellen
die alle 1:n verknüpft sind. Führe ich die Abfrage in Access aus
kommen die zu erwartenden Daten. Führe ich dieselbe über VBA aus kommt
nichts zurück.
Irgendeine Idee?

SQL aus Abfrage : (geht!)

SELECT Sum([anzahl_gebinde_soll]*[BR_Faktor]/[BR_Divisor]) AS
menge_eff
FROM (Abfuellauftrag_kopf LEFT JOIN Abfuellauftrag_pos ON
Abfuellauftrag_kopf.Abf_Auftrag_ID Abfuellauftrag_pos.Abfuellauftrag_pos_id) LEFT JOIN
(abfuellauftrag_pos_Bgeb_kopf LEFT JOIN Abfuellauftrag_pos_bgeb_pos ON
abfuellauftrag_pos_Bgeb_kopf.id Abfuellauftrag_pos_bgeb_pos.Abfuell_pos_Bgeb_id) ON
Abfuellauftrag_pos.id = abfuellauftrag_pos_Bgeb_kopf.Abfuellpos_id
WHERE (((Abfuellauftrag_kopf.Status)="eingeplant") AND
((Abfuellauftrag_pos_bgeb_pos.Lager)=1) AND
((Abfuellauftrag_pos_bgeb_pos.Artikelnr)="Z5041"));

######dto. Als Recordset: geht n i c h t d.h. die Summe menge_eff ist
NULL######

Public Function hole_gebbest_aus_Abfuellung(ges_artikelnr As String,
ges_Lager As Integer) As Double
Dim rs As New ADODB.Recordset

rs.Open "SELECT Sum([anzahl_gebinde_soll]*[BR_Faktor]/[BR_Divisor]) AS
menge_eff " & _
"FROM (Abfuellauftrag_kopf LEFT JOIN Abfuellauftrag_pos ON
Abfuellauftrag_kopf.Abf_Auftrag_ID Abfuellauftrag_pos.Abfuellauftrag_pos_id) LEFT JOIN
(abfuellauftrag_pos_Bgeb_kopf LEFT JOIN Abfuellauftrag_pos_bgeb_pos ON
abfuellauftrag_pos_Bgeb_kopf.id Abfuellauftrag_pos_bgeb_pos.Abfuell_pos_Bgeb_id) ON
Abfuellauftrag_pos.id = abfuellauftrag_pos_Bgeb_kopf.Abfuellpos_id " &
_
"WHERE (((Abfuellauftrag_kopf.Status)='eingeplant') AND
((Abfuellauftrag_pos_bgeb_pos.Lager)=1) AND
((Abfuellauftrag_pos_bgeb_pos.Artikelnr)='Z5041'))",
CurrentProject.Connection



Der Einzige Unterschied ist, das die Anführungszeichen für VBA
umgestellt worden sind.
Habe hier schon Stunden gesucht und nix gefunden. Eine sehr àhnliche
Abfrage aber nur mit 2 verknüpften Tabellen und ebenfalls einer Summe
geht einwandfrei.
Kann man als Workarround nicht die Abfrage verwenden die ja die
richtigen Werte liefert? Blöde Frage - wie übergebe ich dann die Werte
an die Abfrage und wir bekommen ich die Summe dann zurück ?
 

Lesen sie die antworten

#1 Karl Donaubauer
02/01/2011 - 18:28 | Warnen spam
szangs wrote:
Hallo, habe hier ein Problem was mich zum Verzweifeln treibt. Bisher
habe ich VBA SQL Zugriffe immer in Access Abfragen getestet, den SQL
Code in VBA kopiert und dann z.B. mir recordset.open verwendet.
Klappte immer 100%. Diesmal aber nicht. Es handelt sich um 4 Tabellen
die alle 1:n verknüpft sind. Führe ich die Abfrage in Access aus
kommen die zu erwartenden Daten. Führe ich dieselbe über VBA aus kommt
nichts zurück.
...
######dto. Als Recordset: geht n i c h t d.h. die Summe menge_eff ist
NULL######

Public Function hole_gebbest_aus_Abfuellung(ges_artikelnr As String,
ges_Lager As Integer) As Double
Dim rs As New ADODB.Recordset

rs.Open "SELECT Sum([anzahl_gebinde_soll]*[BR_Faktor]/[BR_Divisor]) AS
menge_eff " & _
"FROM (Abfuellauftrag_kopf LEFT JOIN Abfuellauftrag_pos ON
Abfuellauftrag_kopf.Abf_Auftrag_ID > Abfuellauftrag_pos.Abfuellauftrag_pos_id) LEFT JOIN
(abfuellauftrag_pos_Bgeb_kopf LEFT JOIN Abfuellauftrag_pos_bgeb_pos ON
abfuellauftrag_pos_Bgeb_kopf.id > Abfuellauftrag_pos_bgeb_pos.Abfuell_pos_Bgeb_id) ON
Abfuellauftrag_pos.id = abfuellauftrag_pos_Bgeb_kopf.Abfuellpos_id " &
_
"WHERE (((Abfuellauftrag_kopf.Status)='eingeplant') AND
((Abfuellauftrag_pos_bgeb_pos.Lager)=1) AND
((Abfuellauftrag_pos_bgeb_pos.Artikelnr)='Z5041'))",
CurrentProject.Connection


Der Einzige Unterschied ist, das die Anführungszeichen für VBA
umgestellt worden sind.
Habe hier schon Stunden gesucht und nix gefunden. Eine sehr àhnliche
Abfrage aber nur mit 2 verknüpften Tabellen und ebenfalls einer Summe
geht einwandfrei.
Kann man als Workarround nicht die Abfrage verwenden die ja die
richtigen Werte liefert? Blöde Frage - wie übergebe ich dann die Werte
an die Abfrage und wir bekommen ich die Summe dann zurück ?



Du hast ja nicht verraten, wie du es bisher machst, sonst hàtte
man auch gesehen, wie du auf Null als Ergebnis kommst.

Jedenfalls sollte es mit dem Abfragenamen genauso gehen, d.h. ca.

rs.Open "HierDerNameDerAbfrage", CurrentProject.Connection

MsgBox rs!menge_eff

Servus
Karl
*********
Access-FAQ: http://www.donkarl.com
4. SQL Server-Entwickler-Konferenz, 12./13.2.2011, Nürnberg

Ähnliche fragen