Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage starten mit mehreren InputBoxen

Begonnen von KaterRamses, August 04, 2016, 13:59:13

⏪ vorheriges - nächstes ⏩

KaterRamses

Hallo
ich habe eine Tabellel in der Name, Strasse, PLZ, Ort gespeichert sind. nun möchte ich über eine Abfrage und entsprechenden InputBoxen erreichen, dass wenn in der ersten Inputbox eine Orteingegeben wird auch die Inputboxen für den zweiten und dritten Ort angesprochen werden.
Wird jedoch in der ersten Inputbox ein "*" eingegeben so sollen alle Datensätze ausgegeben werden, ansonsten die Orte die durch die Eingaben angefragt wurden. Leider bekomme ich den SQL dazu nicht auf die Reihe

Hier mein Ansatz

Sub Abfrage()
Dim Box1 As String
Dim Box2 As String
Dim Box3 As String

Box1 = InputBox("Bitte geben Sie den ersten Ort ein:", "Erste Ortseingrenzung", "*")
   
If Box1 ="*" select *from tbl.stammdaten

else
select *from tbl.stammdaten where Ort in (Box1, Box2, Box3)
end if
end sub

Hat jemand für mich eine Lösung?



el_gomero

Hallo,

lass das mit den Inputboxen und nimm ein Formular mit ungebundenen Textfeldern um die Daten einzusammeln. Alternativ dazu kannst du Kombiboxen verwenden, die abhängig vorgefiltert werden - vgl http://www.donkarl.com?FAQ4.36
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

KaterRamses

Hallo Jürgen,
danke für die schnelle Antwort. Das mit dem Formular habe ich noch nicht ganz verstanden. Im Grunde soll die Abfrage ja als Vorbereitung auf einen Bericht dienen. Der User soll wenn er schon bei der ersten Ortsabfrage einen * eingibt die Abfrage auslösen und den Bericht mit allen Datensätzen füllen.

Nur wenn ein Ortsname eingegeben wird sollen die weiteren Eingabemöglichkeiten kommen. Somit war für mich der Ansatz über die Inputbox

Gruß Dirk

MaggieMay

Hallo,

den Einsatz von abhängigen Kombifeldern sehe ich hier nicht, du willst ja nur nach bis zu drei verschiedenen Orten suchen. Dazu kannst du ein Formular mit drei Textfeldern (-> txtOrt1, txtOrt2, txtOrt3) anlegen und einen Button drauf packen zum Öffnen des Berichts.

Die Abfrage dazu könnte folgendermaßen aussehen:
Select *from tbl_stammdaten Where
Ort = Forms!formanme!txtOrt1 OR Forms!formanme!txtOrt1 IS NULL OR
Ort = Forms!formanme!txtOrt2 OR Forms!formanme!txtOrt2 IS NULL OR
Ort = Forms!formanme!txtOrt3 OR Forms!formanme!txtOrt3 IS NULL

Du gibst also entweder einen Ort ein oder nichts.
Freundliche Grüße
MaggieMay

KaterRamses

Hallo MaggyMay,
deine Ausführung hat mich schon einiges weiter gebracht. Aber ein Problem habe ich immer noch.
Wenn ich im ersten Textfeld z.B. Hamburg eintrage und in den restlichen Textfeldern gar nichts so werden mir alle Datensätze angezeigt. Genau das möchte ich verhindern. Daher war meine Überlegung ob es die Möglichkeit gibt dies durch ein If Then zu steuern. Also wenn erste Orteingabe leer oder * dann gib alle aus sonst frag nach dem zweiten und dritten ort.

Hättest du dazu vielleicht auch eine Lösungsidee

MaggieMay

Ok, dann musst du das Kriterium dynamisch erstellen, aus dem Formular heraus ist das ja nun kein Problem.

Beispiel:
Private Sub btn_OpenReport_Click()
    Dim strFilter As String
    If IsNull(Me!txtOrt1) Or Me!txtOrt1 = "*" Then
    Else
        strFilter = strFilter & ",'" & Me!txtOrt1 & "'"
        If Not IsNull(Me!txtOrt2) Then
            strFilter = strFilter & ",'" & Me!txtOrt2 & "'"
        End If 
        If Not IsNull(Me!txtOrt3) Then
            strFilter = strFilter & ",'" & Me!txtOrt3 & "'"
        End If
    End If
    If Len(strFilter) > 0 Then
        strFilter = "Ort IN (" & Mid(strFilter, 2) & ")"
    End If   
    DoCmd.OpenReport "repname", acViewPreview, , strFilter
End Sub

Das Kriterium in der Abfrage für den Bericht wird dann entfernt.

Die Überprüfung der Eingabefelder kann man natürlich noch verfeinern.
Freundliche Grüße
MaggieMay

KaterRamses

Hallo MaggieMay,
vielen Dank für deine Hilfe. Hat alles super funktioniert.

Viele Grüße
Dirk

KaterRamses

Hallo,
ich würde gerne nochmal mein Herausforderung aufnehmen. Wenn ich eine ähnlichen Bericht erzeugen möchte soll dieser aber vorher Werte aus Kombiboxen übernehmen. Mit den Textfeldern klappt der Bericht dank MaggieMay's SQL hervorragend. Wenn ich das ganze mit einer Kombibox erzeugen möchte, geht es natürlich nicht. Kann mir jemand sagen wie ich den SQL in so einem Fall anpassen muss.

Vielen Dank für eure Hilfe

el_gomero

Hallo,

warum sollte das nicht funktionieren? Wie sieht dein angepasster Code jetzt aus?

Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

KaterRamses

Hallo,
die Anpassung bereitet mir die Probleme. Problem von Neulingen, aber man lernt ja nie aus


Private Sub btn_OpenReport_Click()
    Dim strFilter As String
    If IsNull(Me!cmbOrt1) Or Me!cmbOrt1 = "*" Then
    Else
        strFilter = strFilter & ",'" & Me!cmbOrt1 & "'"
        If Not IsNull(Me!cmbOrt2) Then
            strFilter = strFilter & ",'" & Me!cmbOrt2 & "'"
        End If 
        If Not IsNull(Me!cmbOrt3) Then
            strFilter = strFilter & ",'" & Me!cmbOrt3 & "'"
        End If
    End If
    If Len(strFilter) > 0 Then
        strFilter = "Firmenname IN (" & Mid(strFilter, 2) & ")"
    End If   
    DoCmd.OpenReport "repname", acViewPreview, , strFilter

Im Formular habe ich Kombiboxen erstellt die ungebunden Sind. Die Einträge entnimmt er aus der Tabelle Firma, 2 Spalten.
Spalte 1 enthält die ID als Primärschlüssel
Spalte 2 den entsprechenden Firmennamen

el_gomero

Zitat
Spalte 2 den entsprechenden Firmennamen
yepp und wenn du den übergeben willst musst du die Spalte mitgeben:


    strFirmenname = Me!kmbFeld.Column(1)

Mich irritiert allerdings, dass der Filter unten über Orte aufgebaut wird und du jetzt vom Firmennamen sprichst!?
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

KaterRamses

Hallo,
mit der Column() Angabe funktioniert es. Das der Ort noch drin stand war weil ich den Zwischenspeicher genutzt habe. Da war noch die Abfrage mit dem Ort drin.

Vielen Dank