Anzeige
Archiv - Navigation
948to952
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
948to952
948to952
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten aus Access DB holen - SQL Problem ...

Daten aus Access DB holen - SQL Problem ...
13.02.2008 07:22:00
Dirk
Hallo zusammen,
ich bin jetzt bald am verzweifeln.
Ich möchte aus einem Excel Makro auf Daten aus einer Access DB zugreifen
und habe mit der SQL Formulierung ein Problem.
Folgender Code funktioniert:
Code:
strSQL = "SELECT ITEMS.ITM_ID, " _
& "ITEMS.ITM_NAME, " _
& UnitSelection(i - 1) & ", " _
& "Sum(([ITV_VALUE]/[CRM_RATE])) AS Expr1, " _
& "CURRENCY_MATRIX.CRM_TYPE " _
& "FROM ([PARAMETERS] INNER JOIN " _
& "ITEMS ON PARAMETERS.PAR_ID = ITEMS.ITM_PAR_ID) INNER JOIN " _
& "((UNITS INNER JOIN (PACKAGES INNER JOIN " _
& "(ITEM_VALUES INNER JOIN " _
& "CURRENCY_MATRIX ON ITEM_VALUES.ITV_CUR_ID = CURRENCY_MATRIX.CRM_CUR_ID) " _
& "ON (PACKAGES.PCK_ID = ITEM_VALUES.ITV_PCK_ID) " _
& "AND (PACKAGES.PCK_PER_ID = CURRENCY_MATRIX.CRM_PER_ID)) ON " _
& "UNITS.UNT_ID = PACKAGES.PCK_UNT_ID) INNER JOIN " _
& "UNIT_HIERARCHY ON UNITS.UNT_ID = UNIT_HIERARCHY.UNH_UNT_ID) ON " _
& "ITEMS.ITM_ID = ITEM_VALUES.ITV_ITM_ID " _
& "WHERE (((ITEMS.ITM_PAR_ID)= " & Param_Pos & ") " _
& "AND ((PACKAGES.PCK_PER_ID)= " & Period & ") " _
& "AND ((PACKAGES.PCK_CAT_ID)= " & DataCat & ") " _
& "AND ((CURRENCY_MATRIX.CRM_CUR_ID_BASE)=" & KonsCur & ") " _
& "AND ((UNIT_HIERARCHY.UNH_PAR_ID)=" & Param_Unit & ") " _
& "AND ((UNIT_HIERARCHY.UNH_PARENT_NODE) " & ParentNode & ")) " _
& "GROUP BY ITEMS.ITM_ID, ITEMS.ITM_NAME, " & Having(i - 1) & "CURRENCY_MATRIX.CRM_TYPE " _
& "HAVING (((ITEMS.ITM_NAME) " & Criteria(i - 1) & "" _
& ") AND ((Sum(([ITV_VALUE]/[CRM_RATE])))0))"
Set rec = dbCurrent.OpenRecordset(strSQL, dbOpenForwardOnly)
Das funzt wie gesagt astrein.
Nun möchte ich ein weiteres Ausschlusskriterium einbauen:
((UNITS.UNT_CODE) NOT Like " & SelCriteria(i - 1)
Wenn ich ihn wie folgt einbaue bekomme ich einen Fehler:
Laufzeitfehler 3075
Sytaxfehler (fehlender Operator)
Code:
For i = 1 To 2
strSQL = "SELECT ITEMS.ITM_ID, " _
& "ITEMS.ITM_NAME, " _
& UnitSelection(i - 1) & ", " _
& "Sum(([ITV_VALUE]/[CRM_RATE])) AS Expr1, " _
& "CURRENCY_MATRIX.CRM_TYPE " _
& "FROM ([PARAMETERS] INNER JOIN " _
& "ITEMS ON PARAMETERS.PAR_ID = ITEMS.ITM_PAR_ID) INNER JOIN " _
& "((UNITS INNER JOIN (PACKAGES INNER JOIN " _
& "(ITEM_VALUES INNER JOIN " _
& "CURRENCY_MATRIX ON ITEM_VALUES.ITV_CUR_ID = CURRENCY_MATRIX.CRM_CUR_ID) " _
& "ON (PACKAGES.PCK_ID = ITEM_VALUES.ITV_PCK_ID) " _
& "AND (PACKAGES.PCK_PER_ID = CURRENCY_MATRIX.CRM_PER_ID)) ON " _
& "UNITS.UNT_ID = PACKAGES.PCK_UNT_ID) INNER JOIN " _
& "UNIT_HIERARCHY ON UNITS.UNT_ID = UNIT_HIERARCHY.UNH_UNT_ID) ON " _
& "ITEMS.ITM_ID = ITEM_VALUES.ITV_ITM_ID " _
& "WHERE [b](((UNITS.UNT_CODE) NOT Like " & SelCriteria(i - 1) & ") " _
& "AND((ITEMS.ITM_PAR_ID)= " & Param_Pos & ") " _
& "AND ((PACKAGES.PCK_PER_ID)= " & Period & ") " _
& "AND ((PACKAGES.PCK_CAT_ID)= " & DataCat & ") " _
& "AND ((CURRENCY_MATRIX.CRM_CUR_ID_BASE)=" & KonsCur & ") " _
& "AND ((UNIT_HIERARCHY.UNH_PAR_ID)=" & Param_Unit & ") " _
& "AND ((UNIT_HIERARCHY.UNH_PARENT_NODE) " & ParentNode & ") " _
& "GROUP BY ITEMS.ITM_ID, ITEMS.ITM_NAME, " & Having(i - 1) & "CURRENCY_MATRIX.CRM_TYPE " _
& "HAVING (((ITEMS.ITM_NAME) " & Criteria(i - 1) & "" _
& ") AND ((Sum(([ITV_VALUE]/[CRM_RATE])))0))"
Set rec = dbCurrent.OpenRecordset(strSQL, dbOpenForwardOnly)
Im Array SelCriteria steht z.B. 3214 HGSE (als String)
So langsam verzweifle ich.
Wäre super wenn mir hier jemand helfen könnte.....
Viele Grüße,
Dirk

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Access DB holen - SQL Problem ...
13.02.2008 08:39:00
Luschi
Hallo Dirk,
Werte für Textfelder müssen maskiert werden mit doppelten oder einfachen Hochkommas:
"doppelt
"WHERE (((UNITS.UNT_CODE) NOT Like " & Chr(13) & SelCriteria(i - 1) & Chr(13) & ") " _
oder so:
'Einfach
"WHERE [b](((UNITS.UNT_CODE) NOT Like '" & SelCriteria(i - 1) & "') " _
Gruß von Luschi
aus klein-Paris

AW: Daten aus Access DB holen - SQL Problem ...
13.02.2008 10:25:00
Dirk
Hi Luschi,
vielen Dank für Deine Antwort,
das hat super funktioniert.
Manchmal sieht man den Wald vor lauter Bäumen nicht mehr......
Nachdem das nun funktioniert, erhalte ich bei der nächsten
SQL Anweisung ne andere Fehlermeldung:
Laufzeitfehler - Überzählig
auch hier finde ich nix.....
Hier mal der Code:
strSQL = "SELECT ITEMS.ITM_NAME, " & _
"Sum([ITV_VALUE]/[CRM_RATE]) AS ERG " & _
"FROM (UNITS INNER JOIN " & _
"([PARAMETERS] INNER JOIN " & _
"(ITEMS INNER JOIN " & _
"(PACKAGES INNER JOIN " & _
"(ITEM_VALUES INNER JOIN " & _
"CURRENCY_MATRIX ON ITEM_VALUES.ITV_CUR_ID=CURRENCY_MATRIX.CRM_CUR_ID) " & _
"ON (PACKAGES.PCK_ID=ITEM_VALUES.ITV_PCK_ID) AND (PACKAGES.PCK_PER_ID=CURRENCY_MATRIX.CRM_PER_ID)) " & _
"ON ITEMS.ITM_ID=ITEM_VALUES.ITV_ITM_ID) " & _
"ON PARAMETERS.PAR_ID=ITEMS.ITM_PAR_ID) " & _
"ON UNITS.UNT_ID=PACKAGES.PCK_UNT_ID) INNER JOIN UNIT_HIERARCHY " & _
"ON UNITS.UNT_ID=UNIT_HIERARCHY.UNH_UNT_ID " & _
"WHERE ((UNITS.UNT_CODE) NOT Like '" & SelCriteria(0) & "') " & _
" AND (ITEMS.ITM_PAR_ID) = " & Param_Pos & _
" AND (PACKAGES.PCK_PER_ID) = " & Period & _
" AND (PACKAGES.PCK_CAT_ID) = " & DataCat & _
" AND (CURRENCY_MATRIX.CRM_CUR_ID_BASE) = " & KonsCur & _
" AND (UNIT_HIERARCHY.UNH_PAR_ID) = " & Param_Unit & _
" AND (UNIT_HIERARCHY.UNH_PARENT_NODE) " & ParentNode & _
" AND (ITEMS.ITM_NAME " & Criteria(i) & i + 1 & """)" & _
") GROUP BY ITEMS.ITM_NAME;"
Set rec = dbCurrent.OpenRecordset(strSQL, dbOpenForwardOnly)
Achso, in der Fehlermeldung zeigt er mir die SQL Anweisung ab WHERE an....
Überzählig ? Was heisst das genau ?

Anzeige
AW: Daten aus Access DB holen - SQL Problem ...
13.02.2008 09:24:32
Renee
Hi Dirk,
1. Ich verstehe den Zweck des For-Loops nicht. Willst Du 2mal den SELECT absetzen? Wenn nicht, wird einfach 2mal der SQL-String abgefüllt und beim Execute nur der 2te ausgeführt, was auch wenig Sinn machen würde.
2. Im Ausdruck (((UNITS.UNT_CODE) NOT Like " & SelCriteria(i - 1) & ") " fehlen meines Erachtens
2.1. die umschliessenden Hochkomma, wenn es sich um einen String handelt. Also
(((UNITS.UNT_CODE) NOT Like '" & SelCriteria(i - 1) & "') "
2.2. ein Wildcard-Zeichen, weil sonst statt NOT Like einfach != geschrieben werden könnte. Also
entweder (((UNITS.UNT_CODE) NOT Like '" & SelCriteria(i - 1) & "%') "
oder (((UNITS.UNT_CODE) != '" & SelCriteria(i - 1) & "') "
2.3. das Schliessen einer offenen Klammer, oder kommt diese später ? Also
(((UNITS.UNT_CODE) NOT Like '" & SelCriteria(i - 1) & "%'))"
GreetZ Renée
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige