Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Technonick2xlc am August 19, 2011, 14:02:29

Titel: Tabellenabfrage mit Parametern aus Formular über VBA
Beitrag von: Technonick2xlc am August 19, 2011, 14:02:29
Hallo zusammen,

ich kenne mich in Excel VBA gut aus aber in Access ist das alles ein
wenig anders. Ich habe eine Access Datenbank, in der habe ich 3 Tabellen (Buchungen, Konten, Adressen). Dann
habe ich eine Abfrage, in der sind die Buchungen mit den Konten und die Buchungen mit den Adressen verbunden. Soweit so gut.
Darüber hinaus habe ich ein Formular mit 4 Textfeldern (Von Konto; Bis Konto; Von Kostenstelle bis Kostenstelle) und einen Button (Suchen).
Der Suchbutton startet onclick die Abfrage. In der Abfrage habe ich Kriterien die sich aus den Textfeldern des Formulars die Werte ziehen. Soweit auch so gut.
Jetzt werden nur die Kriterien zu lang zu unübersichtlich und zu kompliziert, das wäre mit ein paar if/else Abfragen viel eleganter und
übersichlicher zu machen.
Meine Frage daher, wie müsste in etwa der Code lauten für:

On click
Öffne Query
mit Parameter, wenn Formular!Abfrage!Textfeld1 = 0 dann Kriterium <= Formular!Abfrage!Textfeld2
usw.
Ausführen der Query und Ausgabe in der Tabelle

Für Hilfe wäre ich sehr dankbar.

Gruß
Matthias
Titel: Re: Tabellenabfrage mit Parametern aus Formular über VBA
Beitrag von: DF6GL am August 19, 2011, 14:44:30
Hallo,

"Jetzt werden nur die Kriterien zu lang zu unübersichtlich und zu kompliziert, das wäre mit ein paar if/else Abfragen viel eleganter und
übersichlicher zu machen. "

versteh ich nicht...  Das wird keinesfalls eleganter und übersichtlicher....

Es gibt doch nur zwei Bereichseinschränkungen  (Konto und Kostenstelle)


Beschreib mal, wie was und wann Du suchen willst und poste die Abfragen und  den Code etc dazu. Am Besten wäre das Hochladen der zuerst komprimierten/reparierten und anschlissend gezippten mdb-Datei

btw:  Ergebnisse in Abfrageansicht zu zeigen ist nicht optimal. Benutze dafür besser Formulare, bzw. Listenfelder oder auch Berichte...



Crosspostings sind unerwünscht:
http://forum.freeaccess.de/YaBB.pl?num=1313754193/0
Titel: Re: Tabellenabfrage mit Parametern aus Formular über VBA
Beitrag von: Technonick2xlc am August 22, 2011, 12:04:24
Anscheinend verstehen wir unter Übersichtlichkeit etwas anderes, aber
für mich ist vba code einfacher zu lesen und zu handhaben als Kriterien einer Accessabfrage die in etwa so aussehen:

Wenn(IstNull(([Formulare]![Abfrage]![TXT_KTO_V] Und [Formulare]![Abfrage]![TXT_KTO_B]);Wert([Daten GL Export TBG]![Konto]);Wenn(IstNull(([Formulare]![Abfrage]![TXT_KTO_V];<= [Formulare]![Abfrage]![TXT_KTO_B];Wenn(IstNull(([Formulare]![Abfrage]![TXT_KTO_B];>= [Formulare]![Abfrage]![TXT_KTO_V];>=[Formulare]![Abfrage]![TXT_KTO_V] Und <=[Formulare]![Abfrage]![TXT_KTO_B])

und das gleiche nochmal für die Kostenstelle udn evtl. weitere Abfragen, das wäre in VBA mit einem Array für die Abfragen und Platzhaltern einfacher.

Das Cross-Posting kam dadurch zu Stande das ich schnellere Responses gewöhnt bin aus z.B. dem Herber Excel-Forum
und erst nach dem Posting gesehen habe das in dem anderen Forum mehr los ist.

Schöne Grüße
Matthias
Titel: Re: Tabellenabfrage mit Parametern aus Formular über VBA
Beitrag von: Jonny am August 22, 2011, 15:02:51
Hallo Matthias,
dann würde ich dir vorschlagen in VBA die Record-Source durch einen SLQ-String aufzubauen.
Hier kannst Du dann mit verschachtelte IF arbeiten.

Gruß

Johann
Titel: Re: Tabellenabfrage mit Parametern aus Formular über VBA
Beitrag von: Technonick2xlc am August 26, 2011, 10:36:00
Hilf dir selbst, dann hilft dir Gott  ;D

Selbst gelöst:

Die VBA Anweisung lautet:

Private Sub BTN_Click()

    Dim frmFormular As Form_frmAbfrage
   
    Set frmFormular = Forms("frmAbfrage")

    If IsNull(frmFormular.txtKSTV) Then
        frmFormular.txtKSTV = 0
    End If
    If IsNull(frmFormular.txtKSTB) Then
        frmFormular.txtKSTB = 9999
    End If
    If IsNull(frmFormular.txtKTOV) Then
        frmFormular.txtKTOV = 0
    End If
    If IsNull(frmFormular.txtKTOB) Then
        frmFormular.txtKTOB = 9999999
    End If
   
    If frmFormular.txtKSTV = 0 And frmFormular.txtKSTB = 9999 Then
        GoTo Step2
    End If
       
    DoCmd.OpenQuery "qryBAB"
    GoTo Ende
   
Step2:
    DoCmd.OpenQuery "qryBAB2"
   
Ende:
    frmFormular.txtKSTV = Null
    frmFormular.txtKSTB = Null
    frmFormular.txtKTOV = Null
    frmFormular.txtKTOB = Null

End Sub

Und der SQL Text in der 1. Abfrage:

SELECT DISTINCT DatenGLExportTBG.[FIBU Datum], DatenGLExportTBG.Kostenstelle, DatenGLExportTBG.Konto, DatenGLExportTBG.Bezeichnung, DatenGLExportTBG.SALDO, Lieferanten.Name, TBGKontenBAB2011.[BAB-Zeile]
FROM (DatenGLExportTBG LEFT JOIN TBGKontenBAB2011 ON DatenGLExportTBG.Konto = TBGKontenBAB2011.Konto) LEFT JOIN Lieferanten ON DatenGLExportTBG.Adresse = Lieferanten.Lieferan
WHERE ((([DatenGLExportTBG.Kostenstelle])>=[Formulare]![frmAbfrage]![txtKSTV] And ([DatenGLExportTBG.Kostenstelle])<=[Formulare]![frmAbfrage]![txtKSTB]) AND (([DatenGLExportTBG.Konto])>=[Formulare]![frmAbfrage]![txtKTOV] And ([DatenGLExportTBG.Konto])<=[Formulare]![frmAbfrage]![txtKTOB]));

In der 2. Abfrage habe ich die Bedingung für die Kostenstelle weggelassen, da es auch Konten gibt, die keiner Kostenstelle zugeordnet sind und Access sonst die leeren Zeilen nicht anzeigt.