Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: shinoda70 am Juli 04, 2020, 15:08:14

Titel: VBA SQL-Abfrage-Filter Code
Beitrag von: shinoda70 am Juli 04, 2020, 15:08:14
Hallo Leute,

wie kann ich über eine Optionsgruppe (mit 2 Optionen) in einem Formular die Abfrage filtern (bzw. ein Abfragefeld von der Abfrage) worauf das Formular als Datensatzquelle zugreift?

Konkret habe ich in der Abfrage "WkzBegleitkarten" ein Abfragefeld "Status" mit den Einträgen "in Bearbeitung, zurückgestellte, abgeschlossen,.. usw.

Im Formular möchte ich per Optionsgruppe zwischen den abgeschlossenen und allen offenen Datensätzen filtern.

Müsste über einen SQL Abfragefilter laufen, da ich im Formular noch nebenbei zwischen zwei verschieden Abteilungen mit einem "ME.Filter" arbeite. Und zwei Filter funzen doch nicht, oder ?  ::)

Habe noch nie einen VBA SQL-Abfrage-Filter Code geschrieben  :'(  :'(  :'(
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: DF6GL am Juli 04, 2020, 15:56:18
Hallo,

um konkret das zu beantworten, solltest Du den SQL-String der Formularabfrage posten.

Wobei auch die Filterung per ME.Filter möglich wäre...


Prinzip:

.
.
.

Dim strKrit as String, strSQL as String

strSQL = "Select * from WkzBegleitkarten Where "

Select Case Me!optGruppe  'wenn die Optionswerte zu 1, 2 und 3 definiert sind

Case 1
strKrit = " [Status] ='in Bearbeitung' "

Case 2
strKrit = " [Status] ='zurückgestellte' "

Case 3
strKrit = " [Status] ='abgeschlossen' "

Case Else
strKrit = " 1=1 "

End Select

strSQL = strSQL & strKrit

Me.Recordsource = strSQL
.
.
.

btw:  der Status gehört in eine Tabelle ausgelagert (normalisiert).
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: shinoda70 am Juli 04, 2020, 19:01:51
HAllo DF6GL,

erstmal vielen Dank für Deine Antwort!

Kann sein, dass ich es schlecht beschrieben habe.
Also mein geteiltes Formular hat als Datensatzquelle eine Auswahlabfrage, Name"09_WkzBegleitkarten", die aus 3 vierschieden Tabellen besteht. Natürlich basiert das Abfragefeld "Status" aus einer Tabelle

Im Formular filtere ich über Me.Filter die Abteilungen (auch mit einem Optionsfeld über VBA).
Nun möchte ich aber, wenn zum Beispiel nach den einzelnen Abteilungen A, B oder C gefiltert ist, ebenfalls die abgeschlossenen oder alle offenen Themen in dem Tabellenfeld "Status" (welches natürlich auch in der Auswahlabfrage enthalten ist) filtern.

z.B. nach zwei Fällen... die abgeschlossenen und die offenen.
CAse 1
abgeschlossene = abgeschlossene 
CAse 2
offene = in Bearbeitung, zurückgestellt, warten auf Material

Und ich dachte mir jetzt, dass ich die AuswahlAbfrage, wo das TAbellenfeld Status enthalten ist, über einen VBA SQL filtern kann ?!?!?!?

Die Auswahlabfrage hat folgenden SQL String
SELECT [09_Wkzbegleitkarte].Werkzeugnummer, [09_Wkzbegleitkarte].Artikelbezeichnung, [09_Wkzbegleitkarte].[SAP Nummer], [09_Wkzbegleitkarte].[Werkzeug ID-Nummer], [09_Wkzbegleitkarte].Titel, [09_Wkzbegleitkarte].Änderungsverantwortlicher, [09_Wkzbegleitkarte].Formbauer, [09_Wkzbegleitkarte].Anlagen, [09_Wkzbegleitkarte].IDBegleitkarte, [09_Wkzbegleitkarte].ÄnderungsIDNummer, [09_Wkzbegleitkarte].Kostenstelle, [09_Wkzbegleitkarte].Liefertermin, [09_Wkzbegleitkarte].[Auszuführende Arbeiten], [09_Wkzbegleitkarte].[Ausgeführte Arbeiten], [09_Wkzbegleitkarte].[AA Datum], [09_Wkzbegleitkarte].Eingangsprüfung, [09_Wkzbegleitkarte].[EP Datum], [09_Wkzbegleitkarte].[ESP Prüfung], [09_Wkzbegleitkarte].[ESP Datum], [09_Wkzbegleitkarte].Status, [09_Wkzbegleitkarte].[Änderungs ID Nummer], [09_Wkzbegleitkarte].[Begleitkarten Nr]
FROM 09_Wkzbegleitkarte;
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: DF6GL am Juli 05, 2020, 11:46:02
Hallo,

in der Tat, ziemlich verwirrend, deine Beschreibung...

Ist "09_WkzBegleitkarten"   eine Abfrage oder eine Tabelle? Wo sind dann die 3 Tabellen?
Ist "09_WkzBegleitkarte"   eine Abfrage oder eine Tabelle?


Zitatin dem Tabellenfeld "Status"

welchen Datentyp hat dieses Feld?

ZitatUnd ich dachte mir jetzt, dass ich die AuswahlAbfrage, wo das TAbellenfeld Status enthalten ist, über einen VBA SQL filtern kann ?!?!?!?

Die Auswahlabfrage  IST ein SQL-String.  Wenn Du filtern willst, musst Du der Abfrage (dem SQL-String) eine Where-Condition mitgeben. (So wie vorher gezeigt). Ob über VBA oder im Abfrageentwurf oder mittels Parameter ist egal.


Zeig mal den kompletten Code (auch die Filter-Prozeduren) , keine sinnlosen Fragmente und einen Screenshot des Beziehungsfensters.

Das Ganze kann wie gesagt auch über die Filter-Eigenschaft laufen. Die Filter-Eigenschaft ist auch nichts anderes als eine Where-Condition.

Me.Filter = "Abteilung ='A' and Status= 'abgeschlossene'"
zeigt Dir alle Abteilungen "A" an, die den Status "abgeschlossene" haben.




Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: Beaker s.a. am Juli 05, 2020, 12:08:55
Hallo,
@franz
Zitatbtw:  der Status gehört in eine Tabelle ausgelagert (normalisiert).
Was heisst "btw", das ist doch essentiell.

@shinoda70
Zitatz.B. nach zwei Fällen... die abgeschlossenen und die offenen.
Zwei lassen sich auch mit einem einfachen If...Else...End If ausdrücken
If Status = "abgeschlossen" Then
    'mach was
Else   'müssen dann ja alle anderen Status sein
    'mach was anderes
End If

gruss ekkehard
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: DF6GL am Juli 05, 2020, 13:10:57
Hallo,

@Ekkehart:
ZitatWas heisst "btw"

"btw" heißt, dass ich nebenbei anmerke, dass es essentiell ist, die Tabellen zu normalisieren  :P  ;)  ;D  8)
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: shinoda70 am Juli 05, 2020, 14:36:34
Hallo Franz,

ja, Sorry wegen meiner Beschreibung. Hab das sehr verwirrend ausgedrückt.

09_WkzBegleitkarten ist eine Abfrage die ihre Daten aus einer weiteren Abfrage bezieht.
Aber Egal, denn...
DU hast mich mit Deinem ersten Beitrag auf den richtigen Weg gebracht!!
Es funktioniert mit folgendem Code

Private Sub Rahmen219_AfterUpdate()

Dim strSQL As String
Dim strKRIT As String

strSQL = "SELECT [09_Wkzbegleitkarte].Werkzeugnummer, [09_Wkzbegleitkarte].Artikelbezeichnung, [09_Wkzbegleitkarte].[SAP Nummer], [09_Wkzbegleitkarte].[Werkzeug ID-Nummer], [09_Wkzbegleitkarte].Titel, [09_Wkzbegleitkarte].?nderungsverantwortlicher, [09_Wkzbegleitkarte].Formbauer, [09_Wkzbegleitkarte].Anlagen, [09_Wkzbegleitkarte].IDBegleitkarte, [09_Wkzbegleitkarte].?nderungsIDNummer, [09_Wkzbegleitkarte].Kostenstelle, [09_Wkzbegleitkarte].Liefertermin, [09_Wkzbegleitkarte].[Auszuf?hrende Arbeiten], [09_Wkzbegleitkarte].[Ausgef?hrte Arbeiten], [09_Wkzbegleitkarte].[AA Datum], [09_Wkzbegleitkarte].Eingangspr?fung, [09_Wkzbegleitkarte].[EP Datum], [09_Wkzbegleitkarte].[ESP Pr?fung], [09_Wkzbegleitkarte].[ESP Datum], [09_Wkzbegleitkarte].Status, [09_Wkzbegleitkarte].[?nderungs ID Nummer], [09_Wkzbegleitkarte].[Begleitkarten Nr] FROM 09_Wkzbegleitkarte Where"

Select Case Me.Rahmen219
Case 1
strKRIT = "[Status] <>  'abgeschlossen'"

Case 2
strKRIT = "[Status] = 'abgeschlossen'"

End Select

strSQL = strSQL & strKRIT
Me.RecordSource = strSQL

End Sub

VIELEN DANK nochmal. Ihr Access-Profi-Jungs seid echt klasse  :)  :)  :)

Viele Grüße aus Brandenburg
Michael
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: shinoda70 am Juli 05, 2020, 14:40:27
Hallooo Ekkehard,

danke für Deinen Tip.
Hab es hinbekommen, siehe oben.

Euch allen noch einen schönen Restsonntag  :)
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: Beaker s.a. am Juli 05, 2020, 19:01:52
Hallo Franz,
Scheint ihn aber so oder so nicht zu interessieren  :o
gruss ekkehard
Titel: Re: VBA SQL-Abfrage-Filter Code
Beitrag von: DF6GL am Juli 05, 2020, 21:46:48
Hallo,

ja, das ist leider unser Schicksal hier... :'(