Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Optionsgruppe kleines Problem

Begonnen von silentwolf, Januar 07, 2013, 10:27:52

⏪ vorheriges - nächstes ⏩

silentwolf

Hi an alle bin wieder mal hier :)

Schönes neues Jahr wünsch ich Euch noch!!
Zu  meinen kleinen Problem das ich nicht beheben kann.
Ich habe in einem formular eine optionsgruppe erstellt.
Diese gruppe enthält 1. dienstlich, 2. privat, 3. alle
Eine tblNutzungsart, hat dienstlich und privat als daten enthalten.
Wenn ich nun die Abfrage per button am formular laufen lasse bekomme ich dienstlich und privat ohne probleme angezeigt.
Nun zu meiner Frage wie muss ich denn die Abfrage oder die tabelle ändern sodas ich auch alle angezeigt bekommen kann.
Hoffe ich habe mich deutlich genug ausgedrückt und würde mich sehr über Eure Hilfe bedanken!


Lg
Silentwolf

daolix

Du must die where-klausel deiner abfrage anpassen, wenn dienstl /private zahlen sind dann müsste sie in etwa so ausschauen: ... where [DeinDienstl/priv-Feld]<=dieGößteZahlDieDudafürFestgelegtHast.

DF6GL

Hallo,



Die Abfrage könnte so aussehen:

Select *  from tblTabelle  where    IIf([FormS]![frmDeinFormular]![Optionsgruppe1]=3,1=1,[NutzungsartID]=[FormS]![frmDeinFormular]![Optionsgruppe1]=True)



falls "Alle" den Optionswert 3 besitzt

silentwolf

Hi Franz,

Danke für Deine Hilfe!
Weis grad nicht in welche Abfrage Spalte es eingefügt werden muss :(, Ich bekomme auch eine Fehlermeldung "die unterabfrage in diesem ausdruck hat eine fehlerhafte syntax"
Habe natürlich die abfrage mit meinen forms und optionsgruppe abgeändert.
Muss es in der Kriterienspalte von der ID oder von der Nutzungsart eingefügt werden?

Vielen Dank

Albert

silentwolf

Hallo nochmals,

hab mal den Code für meine SQL Abfrage kopiert vielleicht hilft das um den Code etwas abzuändern.
Kenne mich bei SQL leider gar nicht aus :(

SELECT tblKfz.Kfz_Id, tblKfz.Kfz_Marke, tblKfz.Kfz_Kennzeichen, tblFahrtenbuch.FB_Id, tblFahrtenbuch.FB_Datum, tblNutzArt.NutzArt_ID, tblNutzArt.Nutzungsart
FROM tblKfz INNER JOIN (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID = tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id = tblFahrtenbuch.FB_Kfz_Id
WHERE (((tblKfz.Kfz_Id)=[Forms]![frmFahrtenbuch]![cboFahrzeug]) AND ((tblFahrtenbuch.FB_Datum) Between [Forms]![frmFahrtenbuch]![txtStartdatum] And [Forms]![frmFahrtenbuch]![txtEnddatum]) AND ((tblNutzArt.NutzArt_ID)=[Forms]![frmFahrtenbuch]![fraNutzung]));

Vielen Dank

Albert

database

#5
Hallo Albert,

Zitat...die Abfrage oder die tabelle ändern sodas ich auch alle angezeigt bekommen kann

Versuch mal:

SELECT tblKfz.Kfz_Id, tblKfz.Kfz_Marke, tblKfz.Kfz_Kennzeichen, tblFahrtenbuch.FB_Id, tblFahrtenbuch.FB_Datum, tblNutzArt.NutzArt_ID, tblNutzArt.Nutzungsart
FROM tblKfz INNER JOIN (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID = tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id = tblFahrtenbuch.FB_Kfz_Id
WHERE (((tblKfz.Kfz_Id)=[Forms]![frmFahrtenbuch]![cboFahrzeug]) AND ((tblFahrtenbuch.FB_Datum) Between [Forms]![frmFahrtenbuch]![txtStartdatum] And
[Forms]![frmFahrtenbuch]![txtEnddatum]) AND ((tblNutzArt.NutzArt_ID>0));



bzw. du schränkst die Nutzungsart gar nicht ein.


SELECT tblKfz.Kfz_Id, tblKfz.Kfz_Marke, tblKfz.Kfz_Kennzeichen, tblFahrtenbuch.FB_Id, tblFahrtenbuch.FB_Datum, tblNutzArt.NutzArt_ID, tblNutzArt.Nutzungsart
FROM tblKfz INNER JOIN (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID = tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id = tblFahrtenbuch.FB_Kfz_Id
WHERE (((tblKfz.Kfz_Id)=[Forms]![frmFahrtenbuch]![cboFahrzeug]) AND ((tblFahrtenbuch.FB_Datum) Between [Forms]![frmFahrtenbuch]![txtStartdatum] And
[Forms]![frmFahrtenbuch]![txtEnddatum]);


HTH

silentwolf

Hallo Peter,
schön das Du mir wieder etwas unter meine Arme greifst :) !
Leider funktioniert es noch nicht so richtig. Der erste Code zeigt mir "alle Daten" also dienstlich und privat egal welche Auswahl ich treffe.
Der zweiter Code zeigt mir die richtigen Daten bei Auswahl von dienstlich oder privat an aber keine Daten wenn ich alle Daten auswähle.

Leider :(

Dankeschön :)


DF6GL

Hallo,

wenn bei Optionswert 3 ALLE DS angezeigt werden sollen, dann muss der gesamte Where-Ausdruck TRUE ergeben oder er muss ganz fehlen.

Insofern muss die Where Bedingung so aussehen:


SELECT tblKfz.Kfz_Id,
tblKfz.Kfz_Marke,
tblKfz.Kfz_Kennzeichen,
tblFahrtenbuch.FB_Id,
tblFahrtenbuch.FB_Datum,
tblNutzArt.NutzArt_ID,
tblNutzArt.Nutzungsart
FROM tblKfz INNER JOIN  (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID = tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id = tblFahrtenbuch.FB_Kfz_Id
WHERE IIf (
               [Forms]![frmFahrtenbuch]![OptNutzArt]=3,
               1=1 ,   
               tblKfz.Kfz_Id=[Forms]![frmFahrtenbuch]![cboFahrzeug]
               And
               (tblFahrtenbuch.FB_Datum) Between [Forms]![frmFahrtenbuch]![txtStartdatum]  And  [Forms]![frmFahrtenbuch]![txtEnddatum])
               And
               tblNutzArt.NutzArt_ID =[Forms]![frmFahrtenbuch]![OptNutzArt]
           )



(OptNutzArt =^= Name der Optionsgruppe)

silentwolf

Hi Franz,

danke für Deine Antwort! Leider bekomme ich es immer noch nicht hin :(
Hab Deinen Code ausprobiert und auch schon mehrere Optionen durchprobiert aber funktioniert leider immer noch nicht.
Meine Optionsgruppe hab ich fraNutzung benannt. Und in Deinen Code auch abgeändert.
Irgendwas ist da noch nicht ganz in Ordnung. Kann ja nicht so ein großes Problem sein oder??

Vielen Dank


Albert

DF6GL

Hallo,

WAS funktioniert denn nicht??

Was genau hast Du gemacht?

Poste mal DEINEN angepassten SQL-String...

silentwolf

Hallo,
es funktioniert die Alle Option nicht :(

SELECT tblKfz.Kfz_Id, tblKfz.Kfz_Marke, tblKfz.Kfz_Kennzeichen, tblFahrtenbuch.FB_Id, tblFahrtenbuch.FB_Datum, tblNutzArt.NutzArt_ID, tblNutzArt.Nutzungsart
FROM tblKfz INNER JOIN (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID=tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id=tblFahrtenbuch.FB_Kfz_Id
WHERE (((tblNutzArt.NutzArt_ID)=Forms!frmFahrtenbuch!fraNutzung) And ((IIf(Forms!frmFahrtenbuch!fraNutzung=3,1=1,tblKfz.Kfz_Id=Forms!frmFahrtenbuch!cboFahrzeug And (tblFahrtenbuch.FB_Datum) Between Forms!frmFahrtenbuch!txtStartdatum And Forms!frmFahrtenbuch!txtEnddatum))<>False));

Das <> False wurde von SQL angefügt ??

Danke

Albert

DF6GL

Hallo,

so hab ich das nicht geschrieben....


WHERE (((tblNutzArt.NutzArt_ID)=Forms!frmFahrtenbuch!fraNutzung) And ((IIf(Forms!frmFahrtenbuch!fraNutzung=3,1=1,tblKfz.Kfz_Id=Forms!frmFahrtenbuch!cboFahrzeug And (tblFahrtenbuch.FB_Datum) Between Forms!frmFahrtenbuch!txtStartdatum And Forms!frmFahrtenbuch!txtEnddatum))<>False));



Das rot Markierte  muss IN den 2.  If-Zweig...

database

Hallo,

Hmmm ....  irgendwie verstehe ich das G'schichtl nicht ganz.

ZitatDer erste Code zeigt mir "alle Daten" also dienstlich und privat egal welche Auswahl ich treffe
Da gehe ich davon aus, dass die Variante dann für die Auswahl 'ALLE' geeignet sein wird.

Nun sollte eine Änderung für Opt. 1 und Opt. 2 die Sache doch ordentlich zum Laufen bringen können...

Private Sub DeinButton_Click()

    Dim strSQL as String
    Dim strSQLTeil as String

    Select Case Me.fraNutzung
        Case 1
            strSQLTeil = "tblNutzArt.NutzArt_ID=1"
        Case 2
            strSQLTeil = "tblNutzArt.NutzArt_ID=2"
        Case Else
            strSQLTeil = "tblNutzArt.NutzArt_ID>0"
     End Select

     strSQL = "SELECT tblKfz.Kfz_Id, tblKfz.Kfz_Marke, tblKfz.Kfz_Kennzeichen, tblFahrtenbuch.FB_Id, tblFahrtenbuch.FB_Datum, tblNutzArt.NutzArt_ID, tblNutzArt.Nutzungsart
                    FROM tblKfz INNER JOIN (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID = tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id = tblFahrtenbuch.FB_Kfz_Id
                    WHERE (((tblKfz.Kfz_Id)=[Forms]![frmFahrtenbuch]![cboFahrzeug]) AND ((tblFahrtenbuch.FB_Datum) Between [Forms]![frmFahrtenbuch]![txtStartdatum] And
                    [Forms]![frmFahrtenbuch]![txtEnddatum]) AND " & strSQLTeil

...... Weiterer Code ....


Das sollte doch funktionieren oder?


DF6GL

#13
Hallo,


der Knackpunkt ist: bei Optgr = 3 ALLE Datensätze ohne irgendwelche Kriterien zu filtern...


deswegen (bei mir und weil das Ganze in der Abfrage geschehen soll (?) gibt es da die "True-Bedingung" 1=1, was genauso gut mit True zu machen wäre) muss mit der IIF-Bedingung ein ähnliche Case-Konstruktion nachempfunden werden:

(Syntaktisch nicht getestet!)
Private Sub DeinButton_Click()

   Dim strSQL as String
   Dim strSQLTeil as String

   Select Case Me!fraNutzung
       Case 1
           strSQLTeil = " WHERE (((tblKfz.Kfz_Id)=[Forms]![frmFahrtenbuch]![cboFahrzeug]) AND ((tblFahrtenbuch.FB_Datum) Between [Forms]![frmFahrtenbuch]![txtStartdatum] And  [Forms]![frmFahrtenbuch]![txtEnddatum])   And tblNutzArt.NutzArt_ID=1"
       Case 2
           strSQLTeil = " WHERE (((tblKfz.Kfz_Id)=[Forms]![frmFahrtenbuch]![cboFahrzeug]) AND ((tblFahrtenbuch.FB_Datum) Between [Forms]![frmFahrtenbuch]![txtStartdatum] And  [Forms]![frmFahrtenbuch]![txtEnddatum]) And tblNutzArt.NutzArt_ID=2"
       Case 3
          strSQLTeil = ""
       Case Else
           strSQLTeil = ""
    End Select


    strSQL = "SELECT tblKfz.Kfz_Id, tblKfz.Kfz_Marke, tblKfz.Kfz_Kennzeichen, tblFahrtenbuch.FB_Id, tblFahrtenbuch.FB_Datum, tblNutzArt.NutzArt_ID, tblNutzArt.Nutzungsart
                   FROM tblKfz INNER JOIN (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID = tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id = tblFahrtenbuch.FB_Kfz_Id "   & strSQLTeil




natürlich ist die Ereignisprozedur am Sichersten und Saubersten , wenn man denn nun noch auch die unglücklichen Forms-Verweise aus dem String herauswirft und den String mit den Formular-Steuerelementen zusammenbaut.



Private Sub DeinButton_Click()

    Dim strSQL as String
    Dim strSQLTeil as String

    Select Case Me!fraNutzung
        Case 1,2
            strSQLTeil = " WHERE Kfz_Id=" & Me![cboFahrzeug]  &  " AND FB_Datum Between " & Format( Me![txtStartdatum] ,"\#yyyy-mm-dd\#") & " And  " & Format(Me![txtEnddatum],"\#yyyy-mm-dd\#")   & " And tblNutzArt.NutzArt_ID= " & Me!fraNutzung
         Case 3
           strSQLTeil = ""
        Case Else
            strSQLTeil = ""
     End Select


     strSQL = "SELECT tblKfz.Kfz_Id, tblKfz.Kfz_Marke, tblKfz.Kfz_Kennzeichen, tblFahrtenbuch.FB_Id, tblFahrtenbuch.FB_Datum, tblNutzArt.NutzArt_ID, tblNutzArt.Nutzungsart
                    FROM tblKfz INNER JOIN (tblNutzArt INNER JOIN tblFahrtenbuch ON tblNutzArt.NutzArt_ID = tblFahrtenbuch.FB_NutzArt_Id) ON tblKfz.Kfz_Id = tblFahrtenbuch.FB_Kfz_Id "   & strSQLTeil


database

Hallo Franz,

Zitat...bei Optgr = 3 ALLE Datensätze ohne irgendwelche Kriterien zu filtern...
Ich bin bei meiner Variante davon ausgegangen dass in der Anfrage gemeint war 'ALLE Nutzungsarten' jedoch mit Einschränkung auf ein bestimmtes Fahrzeug in einem bestimmten Zeitraum.

Die Aufdröselung mit dem 'Select Case' - Konstrukt habe ich gewählt um Albert ein leichteres Verständnis zu ermöglichen.

Wenn das Erfordernis auf ALLES ohne jegliche Begrenzung zum Tragen kommen soll, trifft deine Variante klarerweise den Nagel auf den Kopf

@Albert
Ich habe in meiner ersten Antwort nur die Auswahl der Opt. 3 dargestellt, Opt. 1 und 2 waren dabei,
in der Annahme, daß du die Anpassung selbst realisieren wirst, NICHT berücksichtigt.