VBA mit SQL Union Abfrage

08/07/2009 - 17:19 von Thom | Report spam
Hallo liebe NG

Ich hab da ne Knacknuss bei der ich mir die Zàhne ausbeisse. Folgende
Situation. Ich habe eine Tabelle aus der ich mittels Mehrfachauswahl
Kundennamen auswàhle. Die Ausgewàhlten Namen sollen dann in zwei anderen
Tabellen gesucht und mittels bericht angezeigt werden. Dazu verwende ich
nachstehendes Scribt. Sofern ich ein Tabelle damit ansteuere funktioniert es
perfekt.

Wie muss ich vorgehen, damit ich zwei oder drei Tabellen auslesen und in die
Tabelle "tmp_200_Portefeuille_Kunde_Ergebnis" einfügen kann.

So wie ich mir es vorgestellt habe geht's leider nicht.

Dim strSQL As String
strSQL = "SELECT * INTO temp_200_Portefeuille_Kunde_Ergebnis " & _
"FROM tbl_000_resdaten_news " & _
"WHERE NAME_BASIS IN ( " & Gruppe & " )" & _
"union all"
"insert into temp_200_Portefeuille_Kunde_Ergebnis " & _
"SELECT * " & _
"FROM tbl_000_portefeuille_pub " & _
"WHERE NAME_BASIS IN ( " & Gruppe & " ) " & _
"union all"
"insert into temp_200_Portefeuille_Kunde_Ergebnis " & _
"SELECT * " & _
"FROM tbl_000_portefeuille_pub " & _
"WHERE NAME_KST IN ( " & Gruppe & " ) ;"

Kann mit jemand einen Tipp geben.

Danke schon mal im Voraus.

Gruss Thom


***Dank an den damaligen Ersteller***
Public Sub bef_200_suche_kunden_Click()

If fctTableExists("temp_200_Portefeuille_Kunde_Ergebnis") = True Then
Dim strSQL1 As String
strSQL1 = "Delete Table temp_200_Portefeuille_Kunde_Ergebnis "
CurrentDb.Execute strSQL1, dbFailOnError
Else
End If

Dim Gruppe As String
Dim i As Integer

With Me!lsb_200_kundenauswahl
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
Gruppe = Gruppe & "'" & .ItemData(i) & "',"
End If
Next i
End With

If Gruppe <> "" Then
Gruppe = Left(Gruppe, Len(Gruppe) - 1)
End If

Dim strSQL As String
strSQL = "SELECT * INTO temp_200_Portefeuille_Kunde_Ergebnis " & _
"FROM tbl_000_resdaten_news " & _
"WHERE NAME_BASIS IN ( " & Gruppe & " ) ;"

CurrentDb.Execute strSQL, dbFailOnError

DoCmd.RunMacro "m_200_Portefeuille_Bericht"
End Sub
 

Lesen sie die antworten

#1 Josef Poetzl
08/07/2009 - 17:33 | Warnen spam
Hallo!

Thom schrieb:
[..]
Wie muss ich vorgehen, damit ich zwei oder drei Tabellen auslesen und in die
Tabelle "tmp_200_Portefeuille_Kunde_Ergebnis" einfügen kann.

So wie ich mir es vorgestellt habe geht's leider nicht.
Dim strSQL As String
strSQL = "SELECT * INTO temp_200_Portefeuille_Kunde_Ergebnis " & _
"FROM tbl_000_resdaten_news " & _
"WHERE NAME_BASIS IN ( " & Gruppe & " )" & _
"union all"
"insert into temp_200_Portefeuille_Kunde_Ergebnis " & _
"SELECT * " & _
"FROM tbl_000_portefeuille_pub " & _
"WHERE NAME_BASIS IN ( " & Gruppe & " ) " & _
"union all"
"insert into temp_200_Portefeuille_Kunde_Ergebnis " & _
"SELECT * " & _
"FROM tbl_000_portefeuille_pub " & _
"WHERE NAME_KST IN ( " & Gruppe & " ) ;"




In so einem Fall müsste der Aufbau so aussehen:

select * into tempTab
FROM
(
select f1, f2, ... from Tab1
union all
select f1, f2, ... from Tab2
union all
...

) X

Da du aber anscheinend immer die gleiche Datenbasis verwendest und nur
die Filter unterschiedlich sind, könnte auch so etwas ausreichen:

select * into tempTab
FROM Tab
where
Bedingung1
or
Bedingung2
or
...

Es gibt aber einen Unterschied: wenn auf einen DS mehrere Bedingungen
zutreffen, wird er in der 2. Variante nur einmal angezeigt.


Nur zum Nachdenken:
Ist die Temp-Tabelle ist überhaupt erforderlich? Für die Anzeige in
einem Bericht würde eventuell auch eine Abfrage ausreichen.


mfg
Josef

EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/

Ähnliche fragen