MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 24.03.2006, 09:36   #1
Claus33
MOF User
MOF User
Standard Acc2002/XP - SQL - Unterabfrage schwierig

Hallo ,

Und zwar will ich in VBA eine SQL-Abfrage erstellen, die auf eine formularbasierende Unterabfrage zugreift.

Ich habe ein Formular mit diversen Feldern zum Filtern der Datensätze.
Dann habe ich eine Abfrage die auf die Unterabfrage zugreift.

Die Unterabfrage zeigt mir praktisch die Laufleistung für einen bestimmten Zeitraum. Dieser Zeitraum ist eine Filterbedingung die im Formular gesetzt wird.


Sobald ich in der Unterabfrage direkt / explizit den Zeitraum angebe lfunktioniert die Abfrage. Nur wenn ich versuche, das Filterkriterium über das Formular anzusprechen, kommt die Fehlermeldung "2 Parameter fehlen"



Zunächst einmal der Code ohne die Unterabfrage. Hier kommt logischerweise die Fehlermeldung, da dass Filterkriterium aus dem Formular nicht greift. Wie gesagt, wenn ich die Paramter in die Unterabfrage manuell einfüge (also anstatt forms!Formular!Feld den Zeitraum, dann funktioniert es:

Code:

datum1 = Format([Forms]![ÜbersichtKostenanalyse]![txtSuchenDAT], "\#yyyy\-mm\-dd\#")  
datum2 = Format([Forms]![ÜbersichtKostenanalyse]![txtSuchenDATB], "\#yyyy\-mm\-dd\#") 

' SQL-Abfragestring  sSQL = "SELECT Fahrzeugstammdaten.Kennzeichen, " & _ 
"Fahrzeugstammdaten.EZ, Fahrzeugstammdaten.Abmeldung, " & _ 
 "Fahrzeugtypen.Hersteller, " & _  "Fahrzeugtypen.Typenbezeichnung, " & _ 
 "Kostenart.Kostengruppenbezeichnung, " & _  "Sum(Rechn_Allok.Nettolohn) AS Lohn, " & _ 
 "Sum(Rechn_Allok.NettoMaterial) AS Material, " & _  
"Sum([Nettolohn]+[Nettomaterial]) AS Gesamt, " & _  
"LL_Parameter.LL, Max(Rechnung.Rechnungs_ID) AS Re_ID, " & _  "Max(Rechn_Allok.Kostenart_ID) AS Kostenart_ID, " & _  "[LLGesamt].[Maxkm] " & _  
"FROM ((((Fahrzeugstammdaten LEFT JOIN Fahrzeugtypen ON Fahrzeugstammdaten.[Fahrzeugtyp ID] = Fahrzeugtypen.Fahrzeugtyp_ID)" & _  
"LEFT JOIN [LLGesamt] ON Fahrzeugstammdaten.Fahrzeug_ID = [LLGesamt].Fahrzeug_ID) " & _  
"INNER JOIN Rechnung ON Fahrzeugstammdaten.Fahrzeug_ID = Rechnung.Fahrzeug_ID) " & _  
"INNER JOIN (Rechn_Allok INNER JOIN Kostenart ON Rechn_Allok.Kostenart_ID = Kostenart.Kostenart_ID)ON Rechnung.Rechnungs_ID = Rechn_Allok.Rechnungs_ID) " & _  
"INNER JOIN LL_Parameter ON Fahrzeugstammdaten.Fahrzeug_ID = LL_Parameter.Fahrzeug_ID " & _ 
"WHERE Rechnung.[abgeschlossene Rechnung]=Yes " & _  
"And Rechnung.Reparaturdatum Between " & datum1 & " AND " & datum2 & _
  "GROUP BY Fahrzeugstammdaten.Kennzeichen, Fahrzeugstammdaten.EZ, Fahrzeugstammdaten.Abmeldung, " & _  
"Fahrzeugtypen.Hersteller, Fahrzeugtypen.Typenbezeichnung,Kostenart.Kostengruppenbezeichnung, LL_Parameter.LL, LLGesamt.Maxkm " & _
  "HAVING Fahrzeugstammdaten.Kennzeichen Like '" & [Forms]![ÜbersichtKostenanalyse]![txtSuchenAKZ] & "'  
AND Fahrzeugtypen.Hersteller Like '" & [Forms]![ÜbersichtKostenanalyse]![txtsuchenFab] & "' AND Fahrzeugtypen.Typenbezeichnung Like '" & [Forms]![ÜbersichtKostenanalyse]![txtSuchenTYP] & "' AND Kostenart.Kostengruppenbezeichnung Like  '" & [Forms]![ÜbersichtKostenanalyse]![txtsuchenArt] & "' OR Fahrzeugtypen.Hersteller Is Null AND Fahrzeugtypen.Typenbezeichnung Is Null;"
Versuch mit der Unterabfrage
Code:

sSQL = "SELECT Fahrzeugstammdaten.Kennzeichen, " & _
"Fahrzeugstammdaten.EZ, Fahrzeugstammdaten.Abmeldung, " & _
"Fahrzeugtypen.Hersteller, " & _
"Fahrzeugtypen.Typenbezeichnung, " & _
"Kostenart.Kostengruppenbezeichnung, " & _
"Sum(Rechn_Allok.Nettolohn) AS Lohn, " & _
"Sum(Rechn_Allok.NettoMaterial) AS Material, " & _
"Sum([Nettolohn]+[Nettomaterial]) AS Gesamt, " & _
"LL_Parameter.LL, Max(Rechnung.Rechnungs_ID) AS Re_ID, " & _
"Max(Rechn_Allok.Kostenart_ID) AS Kostenart_ID, " & _
"[LLGesamt].[Maxkm] " & _
"FROM ((((Fahrzeugstammdaten LEFT JOIN Fahrzeugtypen ON Fahrzeugstammdaten.[Fahrzeugtyp ID] = Fahrzeugtypen.Fahrzeugtyp_ID)" & _
"LEFT JOIN [LLGesamt] ON Fahrzeugstammdaten.Fahrzeug_ID = [LLGesamt].Fahrzeug_ID) " & _
"INNER JOIN Rechnung ON Fahrzeugstammdaten.Fahrzeug_ID = Rechnung.Fahrzeug_ID) " & _
"INNER JOIN (Rechn_Allok INNER JOIN Kostenart ON Rechn_Allok.Kostenart_ID = Kostenart.Kostenart_ID)ON Rechnung.Rechnungs_ID = Rechn_Allok.Rechnungs_ID) " & _
"INNER JOIN LL_Parameter ON Fahrzeugstammdaten.Fahrzeug_ID = LL_Parameter.Fahrzeug_ID " & _
"WHERE Rechnung.[abgeschlossene Rechnung]=Yes " & _
"And Rechnung.Reparaturdatum Between " & datum1 & " AND " & datum2 & _
"And Exists (SELECT [km-Tabelle].Fahrzeug_ID, [maxk]-[mink] AS LL, Max([km-Tabelle].km_Stand) AS Maxk, Min([km-Tabelle].km_Stand) AS Mink " & _
"FROM Fahrzeugstammdaten INNER JOIN [km-Tabelle] ON Fahrzeugstammdaten.Fahrzeug_ID = [km-Tabelle].Fahrzeug_ID WHERE [km-Tabelle].KM_datum Between " & datum1 & " AND " & datum2 & _
"GROUP BY [km-Tabelle].Fahrzeug_ID;) " & _
"GROUP BY Fahrzeugstammdaten.Kennzeichen, Fahrzeugstammdaten.EZ, Fahrzeugstammdaten.Abmeldung, " & _
"Fahrzeugtypen.Hersteller, Fahrzeugtypen.Typenbezeichnung,Kostenart.Kostengruppenbezeichnung, LL_Parameter.LL, LLGesamt.Maxkm " & _
"HAVING Fahrzeugstammdaten.Kennzeichen Like '" & [Forms]![ÜbersichtKostenanalyse]![txtSuchenAKZ] & "'  AND Fahrzeugtypen.Hersteller Like '" & [Forms]![ÜbersichtKostenanalyse]![txtsuchenFab] & "' AND Fahrzeugtypen.Typenbezeichnung Like '" & [Forms]![ÜbersichtKostenanalyse]![txtSuchenTYP] & "' AND Kostenart.Kostengruppenbezeichnung Like  '" & [Forms]![ÜbersichtKostenanalyse]![txtsuchenArt] & "' OR Fahrzeugtypen.Hersteller Is Null AND Fahrzeugtypen.Typenbezeichnung Is Null;"
Ergänzung: Die Unterabfrage soll mir die Laufleistung aus der Kilometertabelle zu jedem Fahrzeug in Abhängigkeit des Zeitraums liefern

Kann mir geholfen werden?
Gruss

Geändert von Claus33 (24.03.2006 um 10:47 Uhr).
Claus33 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.03.2006, 10:24   #2
Claus33
Threadstarter Threadstarter
MOF User
MOF User
Standard

Habe oben die Frage noch näher ergänzt

Geändert von Claus33 (24.03.2006 um 10:28 Uhr).
Claus33 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.03.2006, 15:17   #3
Claus33
Threadstarter Threadstarter
MOF User
MOF User
Standard

Bitte helft mir

Geändert von Claus33 (25.03.2006 um 15:21 Uhr).
Claus33 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.03.2006, 15:24   #4
Arne Dieckmann
MOF Guru
MOF Guru
Standard

Auf den ersten Blick fehlen mehrere Leerzeichen: Hinter dem zweiten Datum (oder am Anfang der darauffolgenden Zeile) und bei diversen anderen Zeilen.

__________________

Gru&szlig;, Arne<br><br><u>Links</u>: <a *****"http://www.donkarl.com/FAQ/FAQStart.htm">FAQ</a> • <a *****"http://www.ardiman.de/datenbanken/grundlagen.html">Grundlagen</a> • <a *****"http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/index.htm">Relationale Datenbanken</a> • <a *****"http://www.lebans.com/">Stephen Lebans</a> • <a *****"https://dbwiki.net">DBWiki</a> <br><u>Tools</u>: <a *****"http://www.ardiman.de/datenbanken/tabtoweb.html">TabToWeb</a> • <a *****"http://www.sqlinform.com/">SQL-Formatter</a> • <a *****"/forum/vbseiten.php?page=7">Code Converter</a> • <a *****"https://regex101.com/">RegEx testen</a><br><u>System</u>: Win7 Pro 64bit, Office 20xx, div. MS-SQL Server 20xx, <a *****"http://www.firefox-browser.de/">Firefox</a><br><span style="color:#B22222">Bitte keine Fragen per Mail/PN</span> und als Neuling diese Anleitung (Code-Tags, Anhänge etc.) lesen.
Arne Dieckmann ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.03.2006, 15:48   #5
Claus33
Threadstarter Threadstarter
MOF User
MOF User
Standard

Danke Arne das Du mal drüberschaust,

Ich bin nicht so fit in SQL und habe mittels der Entwurfsabfrage das SQL Satement aufgebaut. Mit der Zeichensetzung habe ich immer meine Schwierigkeiten.

Bitte korrigiere mich wenn ich was falsches sage:

Vor Zeilenumbrüchen kommt ein Leerzeichen gefolgt von einem & einem weiteren Leerzeichen und einem Unterstrich

Am Anfang jeder Zeile steht ein "

Die Abfrage ohne die Sache mit der Unterabfrage funktioniert. Ich weiss nicht wie ich die Unterabfrage mit der Hauptabfrage verbinde und gleichzeitig das Filterkriterim aus dem Formular richtig einsetze.

Gruss
Claus
Claus33 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.03.2006, 15:52   #6
Arne Dieckmann
MOF Guru
MOF Guru
Standard

Zitat:

Bitte korrigiere mich wenn ich was falsches sage:

Vor Zeilenumbrüchen kommt ein Leerzeichen gefolgt von einem & einem weiteren Leerzeichen und einem Unterstrich

Am Anfang jeder Zeile steht ein "

Das ist alles korrekt. Allerdings musst du dafür sorgen, dass der zusammengesetzte String nachher richtig aussieht. Aus
Code:

strSQL="SELECT A,B" & _
   "FROM Tabelle"
wird "SELECT A,BFROM Tabelle"

Richtig sieht's dann so aus:
Code:

strSQL="SELECT A,B " & _
   "FROM Tabelle"

__________________

Gru&szlig;, Arne<br><br><u>Links</u>: <a *****"http://www.donkarl.com/FAQ/FAQStart.htm">FAQ</a> • <a *****"http://www.ardiman.de/datenbanken/grundlagen.html">Grundlagen</a> • <a *****"http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/index.htm">Relationale Datenbanken</a> • <a *****"http://www.lebans.com/">Stephen Lebans</a> • <a *****"https://dbwiki.net">DBWiki</a> <br><u>Tools</u>: <a *****"http://www.ardiman.de/datenbanken/tabtoweb.html">TabToWeb</a> • <a *****"http://www.sqlinform.com/">SQL-Formatter</a> • <a *****"/forum/vbseiten.php?page=7">Code Converter</a> • <a *****"https://regex101.com/">RegEx testen</a><br><u>System</u>: Win7 Pro 64bit, Office 20xx, div. MS-SQL Server 20xx, <a *****"http://www.firefox-browser.de/">Firefox</a><br><span style="color:#B22222">Bitte keine Fragen per Mail/PN</span> und als Neuling diese Anleitung (Code-Tags, Anhänge etc.) lesen.
Arne Dieckmann ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.03.2006, 16:02   #7
Claus33
Threadstarter Threadstarter
MOF User
MOF User
Standard

ok verstehe, werde das mal überarbeiten.

Danke zunächst einmal

Gruss
Claus
Claus33 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.03.2006, 16:18   #8
Claus33
Threadstarter Threadstarter
MOF User
MOF User
Standard

Irgendwie kriege ich das beim Datum nicht hin

And Rechnung.Reparaturdatum Between " & datum1 & " AND " & datum2 " & _

Hier kommt jedesmal : erwartet Anweisungsende

Wie mus das dort richtigerweise aussehen?

Geändert von Claus33 (25.03.2006 um 16:21 Uhr).
Claus33 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.03.2006, 16:25   #9
Claus33
Threadstarter Threadstarter
MOF User
MOF User
Standard

Habe es doch noch hinbekommen,
aber das Problem mit den fehlenden Parametern in der Unterabfrage hat das nix geändert.

Die Frage ist: Wie bekomme ich die Parameter vom Formular in die Unterabfrage so dass die Hauptabfrage darauf zugreifen kann

Geändert von Claus33 (25.03.2006 um 16:37 Uhr).
Claus33 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.