Query samenstellen in VBA met text/list input

Status
Niet open voor verdere reacties.

StudentDennis

Gebruiker
Lid geworden
13 nov 2013
Berichten
34
Beste mensen,

Ik ben bezig met een database te maken ten behoeve van het genereren van managementinformatie. De data bestaat uit rit-informatie uit TomTom Webfleet.

Ik heb inmiddel aardig onder de knie hoe je een formulier maakt een knopje er bij maakt en dan een query laat uitvoeren. Ook kan ik inmiddels uit List vakken en Text vakken de gebruiker keuzes laten maken. Ik verwijs ze dan steeds naar een eigen losse query met een eigen losse knop.

Inmiddels heb ik ook mijn eerste VBA codes gemaakt (heel simpel: if-else, open query)

Nu is de gedachte dat het slimmer is om het in plaats van 300 losse query's , 300 losse knoppen en 100 formulieren, 1 formulier te maken met 1 knop en de Text vakken en List vakken. Als er op de knop gedrukt wordt moet er gekeken worden welke velden ingevuld zijn, en of de ingevulde combinaties wel mogelijk zijn. Vervolgens wil ik het weergeven op een (simpele) manier.

Ik kwam op de gedachte om een code te maken in VBA die dus:
-kijkt welke vakken ingevuld zijn.
-kijkt of de ingevulde combinaties mogelijk zijn.
-de SQL query samenstelt
-de uitkomsten presenteert (mag op een simpele manier in dataview zijn, als de gegevens maar snel te vinden zijn voor een gebruiker)

Ik dacht dat dit me een hoop tijd kon besparen, maar inmiddels zit ik al weer een dag te proberen en te lezen en heb het nog niet werkend. Vooral het weergeven/presenteren aan de gebruiker van een SELECT query kom ik niet uit ondanks de duizende voorbeelden op het internet. en het samenstellen van de sql query moet ook eenvoudiger kunnen hoop ik.

Ik snap dat dit voor een ervaren persoon vast een belabberde code is, maar het is mijn eerste VBA code, dus ik vind het wel knap van mezelf. Het geeft misschien ook beter mijn denkwijze aan van wat ik wil bereiken. Deze code is nu dus niet uitvoerbaar, maar het is een samenvatting van wat ik heb geprobeerd en waar ik heen wil.

Code:
'============='
'COMBINED CODE'
'============='

'declare variables
'============='
Dim SiteText80 As Boolean
Dim EngineerList6 As Boolean
Dim ShurgardList10 As Boolean
Dim DateFromText21 As Boolean
Dim DateToText23 As Boolean
Dim CustomerList156 As Boolean
Dim EngineertypeList148 As Boolean

Dim Qquery As String
'Dit datatype zal waarschijnlijk moeten veranderen, ik heb verschillende types geprobeerd, maar blijf errors krijgen, of het geheel wordt uitgevoerd, maar er wordt niets weergegeven.
Dim Qselect As String
Dim Qfrom As String
Dim Qwhere As String
Dim Qoperator As String
Dim Qcondition As String

'determine if the fields are empty
'============='
If Not IsNull(Forms!frmMenuDatesSitesDriversShurgards!Text80) Then
    SiteText80 = True
ElseIf Not IsNull(Forms!frmMenuDatesSitesDriversShurgards!List6) Then
    EngineerList6 = True
ElseIf Not IsNull(Forms!frmMenuDatesSitesDriversShurgards!List20) Then
    ShurgardList10 = True
ElseIf Not IsNull(Forms!frmMenuDatesSitesDriversShurgards!Text21) Then
    DateFromText21 = True
ElseIf Not IsNull(Forms!frmMenuDatesSitesDriversShurgards!Text23) Then
    DateToText23 = True
ElseIf Not IsNull(Forms!frmMenuDatesSitesDriversShurgards!List156) Then
    CustomerList156 = True
ElseIf Not IsNull(Forms!frmMenuDatesSitesDriversShurgards!List148) Then
    EngineertypeList148 = True
End If

'check for impossibilities
'============='
If SiteText80 = True And ShurgardList10 = True Then
    MsgBox ("You cannot combine Site with Shurgard in a search.")
Else If SiteText80 = True And CustomerList156 = True Then
    MsgBox ("You cannot combine Site with Customer in a search.")
Else If EngineerList6 = True And EngineertypeList148 = True Then
    MsgBox ("You cannot combine Engineer with Engineertype in a search.")
Else If ShurgardList10 = True And CustomerList156 = True Then
    MsgBox ("You cannot combine Shurgard with Customer in a search.")
Else:

'check which query is needed
'============='
If SiteText80 = True And EngineerList6 = False And ShurgardList10 = False And DateFromText21 = False And DateToText23 = False And CustomerList156 = False And EngineertypeList148 = False Then
	'stukje SQL als variabel wat later in de eind query gecombineerd kan worden.
Else If 
SiteText80 = False And EngineerList6 = True And ShurgardList10 = False And DateFromText21 = False And DateToText23 = False And CustomerList156 = False And EngineertypeList148 = False Then
	'stukje SQL als variabel wat later in de eind query gecombineerd kan worden.
SiteText80 = False And EngineerList6 = False And ShurgardList10 = True And DateFromText21 = False And DateToText23 = False And CustomerList156 = False And EngineertypeList148 = False Then
	'stukje SQL als variabel wat later in de eind query gecombineerd kan worden.
'???
'Ik denk dat dit ook eenvoudiger kan ander krijg ik hier als nog heel veel werk aan

'execute and display query
'============='
'??? van alles geprobeerd OpenQuery/RunSQL/.execute, maar mijn kennis is nog niet hoog genoeg dit zelf uit te puzzelen.

Weet iemand (waarschijnlijk OctaFish, als hij nog tijd aan mij wil besteden :D), hoe ik een case als deze het best kan aanpakken? In grote lijnen uitleggen mag ook, maar het liefst krijg ik mijn database nu eens werkend en functioneel :) Duidelijk leesvoer met stap voor stap uitleg over dit onderwerp is ook welkom. Overnieuw beginnen is ook geen probleem.

Gr Dennis
 
Laatst bewerkt:
echt dynamisch queries opbouwen aan de hand van random uitgekozen velden al dan niet met sum/group by functionaliteiten erbij... is wel behoorlijk complex, dat doe je niet zomaar...
 
Gruwelijk ingewikkelde constructie, ben ik helemaal met namliam eens. Het gros van de checks kun je namelijk al op je formulier doen bij de verschillende tekstvakken, keuzelijsten en selectievakjes. Zodat je als je de query gaat opbouwen die checks helemaal niet meer hoeft te doen.
 
Aangezien je hier niet "echt" geholpen bent, is het misschien leuk voor toekomstige zoekers als je je eigen of elders gevonden oplossing hier ook post of linkt.
 
Ik denk niet dat het een aanvulling is op jullie forum, maar vind het wel leuk om dit te delen. De code is erg inefficient maar bevat wel veel voorbeelden voor beginners zoals ik zelf. Je ziet wel dat naarmate ik verder kwam ik ook wat slimmer en efficienter ging programeren, maar ik heb nog veel te leren. De result options werken nog niet, dat doe ik een andere keer. ook staan er erg veel msgboxen in die ik gebruikt heb voor het debuggen. Ik ben nu bezig met een dashboard. Het zijn 600 regels code. Een ervaren programeur kan dit waarschijnlijk in 60 regels. Een makkelijkere manier is waarschijnlijk subforms. Alleen wist ik op dat moment nog niet hoe dat werkte.

Code:
'Close all open datasheets
'============='
DoCmd.Close acQuery, "tmpqry", acSaveNo

Dim aob As AccessObject
With CurrentData
For Each aob In .AllQueries
If aob.IsLoaded Then
    DoCmd.Close acQuery, aob.Name, acSaveYes
    DoCmd.Close acQuery, "tmpqry", acSaveNo
End If
Next
End With

'Declare variables
'============='
Dim SiteText80 As Boolean
SiteText80 = False
Dim EngineerList6 As Boolean
EngineerList6 = False
Dim geheim3List10 As Boolean
geheim3List10 = False
Dim DateFromText21 As Boolean
DateFromText21 = False
Dim DateToText23 As Boolean
DateToText23 = False
Dim CustomerList156 As Boolean
CustomerList156 = False
Dim EngineertypeList148 As Boolean
EngineertypeList148 = False
'select part
Dim ResultoptionsList192 As Boolean
ResultoptionsList192 = False
Dim ColumnoptionsList205 As Boolean
ColumnoptionsList205 = False
Dim OrderOptionsList202 As Boolean
OrderOptionsList202 = False

Dim counter1 As Integer
Dim final As Integer
final = 0

'Determine if the fields are empty
'============='
'1 SiteText80
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text80) Then
    SiteText80 = True
    counter1 = counter1 + 1
End If
'2 EngineerList6
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List6) Then
    EngineerList6 = True
    counter1 = counter1 + 1
End If
'3 geheim3List10
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List10) Then
    geheim3List10 = True
    counter1 = counter1 + 1
End If
'4 DateFromText21
'5 DateToText23
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text21) And Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text23) Then
    DateFromText21 = True
    DateToText23 = True
    counter1 = counter1 + 2 '???
End If
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text21) And IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text23) Then
    DateFromText21 = True
    counter1 = counter1 + 1
End If
'6 CustomerList156
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List156) Then
    CustomerList156 = True
    counter1 = counter1 + 1
End If
'7 EngineertypeList148
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List148) Then
    EngineertypeList148 = True
    counter1 = counter1 + 1
End If

'select part
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List192) Then
    ResultoptionsList192 = True
End If
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List205) Then
    ColumnoptionsList205 = True
End If
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List202) Then
    OrderOptionsList202 = True
End If

MsgBox ("The counter is now: " & counter1 & ". Determination of filled in fields completed succesfull ")

'Check for impossibilities and then inform the user and clear the fields
'============='
If SiteText80 = True And geheim3List10 = True Then
    MsgBox ("You cannot combine Site with geheim3 in a search.")
    Me!Text80 = Null
    Me!List6 = Null
    Me!List10 = Null
    Me!Text21 = Null
    Me!Text23 = Null
    Me!List156 = Null
    Me!List148 = Null
    Me!List192 = Null
    Me!List205 = Null
    Me!List202 = Null
    Exit Sub
ElseIf SiteText80 = True And CustomerList156 = True Then
    MsgBox ("You cannot combine Site with Customer in a search.")
    Me!Text80 = Null
    Me!List6 = Null
    Me!List10 = Null
    Me!Text21 = Null
    Me!Text23 = Null
    Me!List156 = Null
    Me!List148 = Null
    Me!List192 = Null
    Me!List205 = Null
    Me!List202 = Null
    Exit Sub
ElseIf EngineerList6 = True And EngineertypeList148 = True Then
    MsgBox ("You cannot combine Engineer with Engineertype in a search.")
    Me!Text80 = Null
    Me!List6 = Null
    Me!List10 = Null
    Me!Text21 = Null
    Me!Text23 = Null
    Me!List156 = Null
    Me!List148 = Null
    Me!List192 = Null
    Me!List205 = Null
    Me!List202 = Null
    Exit Sub
ElseIf geheim3List10 = True And CustomerList156 = True Then
    MsgBox ("You cannot combine geheim3 with Customer in a search.")
    Me!Text80 = Null
    Me!List6 = Null
    Me!List10 = Null
    Me!Text21 = Null
    Me!Text23 = Null
    Me!List156 = Null
    Me!List148 = Null
    Me!List192 = Null
    Me!List205 = Null
    Me!List202 = Null
    Exit Sub
ElseIf DateToText23 = True And DateFromText21 = False Then
    MsgBox ("You cannot search for an end date without an start date.")
    Me!Text80 = Null
    Me!List6 = Null
    Me!List10 = Null
    Me!Text21 = Null
    Me!Text23 = Null
    Me!List156 = Null
    Me!List148 = Null
    Me!List192 = Null
    Me!List205 = Null
    Me!List202 = Null
    Exit Sub
End If

'Determine which box is the last that is filled in, to know how many ANDs you need
'============='
If (SiteText80 = True And EngineerList6 = False And geheim3List10 = False And DateFromText21 = False And CustomerList156 = False And EngineertypeList148 = False) Then
    final = 1
End If
If (EngineerList6 = True And geheim3List10 = False And DateFromText21 = False And CustomerList156 = False And EngineertypeList148 = False) Then
    final = 2
End If
If (geheim3List10 = True And DateFromText21 = False And CustomerList156 = False And EngineertypeList148 = False) Then
    final = 3
End If
If (DateFromText21 = True And CustomerList156 = False And EngineertypeList148 = False) Then
    final = 4
End If
If (CustomerList156 = True And EngineertypeList148 = False) Then
    final = 5
End If
If EngineertypeList148 = True Then
    final = 6
End If

MsgBox ("The last filled in box is box " & final & ". Determination of  final filled in fields completed succesfull ")

'Determine which parts of SQL are required
'============='
'1 SiteText80
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text80) Then
    part1 = " tomtom.end_postext LIKE '*" & Me!Text80 & "*' "
End If
'2 EngineerList6
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List6) Then
    part2 = " tomtom.drivername = '" & Me!List6 & "' "
End If
'3 geheim3List10
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List10) Then
    If Me!List10 = "All geheim3s" Then
        part3 = " end_addrno LIKE 'SH*' "
    Else
        part3 = " end_postext LIKE '" & Me!List10 & "*' "
    End If
End If
'4 DateFromText21
'5 DateToText23
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text21) And Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text23) Then
    part4 = " tomtom.end_time BETWEEN #" & Me!Text21 & "# AND #" & Me!Text23 & "# "
End If
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text21) And IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!Text23) Then
    part4 = " tomtom.end_time BETWEEN #" & Me!Text21 & "# AND #" & DateAdd("d", 1, Me!Text21) & "# "
End If
MsgBox ("part4 = " & part4)
'6 CustomerList156
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List156) Then
    If Me!List156 = "GEHEIM1" Then
        part5 = " end_addrno LIKE 'K#*' "
    End If
    If Me!List156 = "GEHEIM2" Then
        part5 = " end_addrno LIKE 'S#*' "
    End If
End If
'7 EngineertypeList148
If Not IsNull(Forms!frmMenuDatesSitesDriversgeheim3s!List148) Then
    part6 = " engineer.drivergroupname = '" & Me!List148 & "' "
End If

MsgBox ("Determination of required SQL parts completed succesfull ")

'Build SELECT part of the SQL query
'============='


'Result Options
'--------------
Dim queryselect As String
Dim counter6 As Integer
Dim counter7 As Integer
Dim numberresultsoptions As Long
Dim resultoptions As String
numberresultsoptions = Me!List192.ListCount
numberresultsoptions = numberresultsoptions - 1
Do While counter6 < numberresultsoptions
    If List192.Selected(counter6) Then
        counter7 = counter7 + 1
    End If
    counter6 = counter6 + 1
Loop
MsgBox ("The box contains " & counter6 & " items.")
MsgBox ("The box contains " & counter7 & " selected items.")
If counter7 = 0 Then
    GoTo skipresultoptions
ElseIf Not counter7 = 0 Then
    If Me!List192.Selected(0) Then
        MsgBox ("test 0")
    End If
    If Me!List192.Selected(1) Then
        MsgBox ("test 1")
    End If
    If Me!List192.Selected(2) Then
        queryselect = "COUNT(tomtom.tripid)"
        GoTo skipcolumnoptions
    End If
    If Me!List192.Selected(3) Then
        resultoptions = "DISTINCT(" & "variable" & ")"
    End If
End If
skipresultoptions:
MsgBox ("start of goto")


'Column Options
'--------------

'MsgBox Me!List205.Column(0, Me!List205.ItemsSelected(0))
'Count number of filled in fields
Dim counter4 As Integer
Dim counter5 As Integer
Do While counter4 < 35
    If Me!List205.Selected(counter4) Then
        counter5 = counter5 + 1
    End If
    counter4 = counter4 + 1
Loop
MsgBox ("You have selected " & counter5 & " items.")



If Me!List205.Selected(0) Then
    MsgBox ("selected")
End If

If counter5 > 1 And Me!List205.Selected(0) Then
    MsgBox ("You cannot combine the " & Chr(34) & "All Columns" & Chr(34) & " value with another")
ElseIf counter5 = 0 Then
    MsgBox ("mogelijkheid 1: geen select opties")
    queryselect = "tomtom.drivername, tomtom.start_time, tomtom.end_time, tomtom.start_addrno, tomtom.end_addrno, tomtom.start_postext, tomtom.end_postext, tomtom.tripid, tomtom.duration, tomtom.distance, tomtom.tripmode"
    MsgBox ("queryselect = " & queryselect)
ElseIf Me!List205.Selected(0) Then
    MsgBox ("mogelijkheid 2: ALL")
    queryselect = "*"
    MsgBox ("queryselect = " & queryselect)
'ElseIf counter5 = 1 And Not Me!List205.Selected(0) Then
    'MsgBox ("mogelijkheid 3: geen ALL maar totaal maar 1")
    'queryselect = "tomtom." & Me!List205
    'MsgBox ("queryselect = " & queryselect)
'ElseIf counter5 > 1 And Not Me!List205.Selected(0) Then
Else
    MsgBox ("mogelijkheid 3: geen all")
    Dim finalselect As Integer
    Dim queryselect2 As String
    finalselect = 0
    queryselect2 = ""
    If Me!List205.Selected(0) Then
        ml0_all_columns = True
        mlpart0 = "All Columns"
        finalselect = 1
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart0
        MsgBox ("test " & finalselect)
    End If
    If Me!List205.Selected(1) Then
        ml1_tripid = True
        mlpart1 = "tripid"
        finalselect = 2
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart1
        MsgBox ("test " & finalselect)
    End If
    If Me!List205.Selected(2) Then
        ml2_tripmode = True
        mlpart2 = "tripmode"
        finalselect = 3
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart2
        MsgBox ("test " & finalselect)
    End If
    If Me!List205.Selected(3) Then
        ml3_objectno = True
        mlpart3 = "objectno"
        finalselect = 4
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart3
        MsgBox ("test " & finalselect)
    End If
    If Me!List205.Selected(4) Then
        ml4_objectname = True
        mlpart4 = "objectname"
        finalselect = 5
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart4
        MsgBox ("test " & finalselect)
    End If
    If Me!List205.Selected(5) Then
        ml5_start_time = True
        mlpart5 = "start_time"
        finalselect = 6
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart5
    End If
    If Me!List205.Selected(6) Then
        ml6_start_odometer = True
        mlpart6 = "start_odometer"
        finalselect = 7
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart6
    End If
    If Me!List205.Selected(7) Then
        ml7_start_postext = True
        mlpart7 = "start_postext"
        finalselect = 8
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart7
    End If
    If Me!List205.Selected(8) Then
        ml8_end_time = True
        mlpart8 = "end_time"
        finalselect = 9
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart8
    End If
    If Me!List205.Selected(9) Then
        ml9_end_odometer = True
        mlpart9 = "end_odometer"
        finalselect = 10
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart9
    End If
    If Me!List205.Selected(10) Then
        ml10_end_postext = True
        mlpart10 = "end_postext"
        finalselect = 11
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart10
    End If
    If Me!List205.Selected(11) Then
        ml11_duration = True
        mlpart11 = "duration"
        finalselect = 12
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart11
    End If
    If Me!List205.Selected(12) Then
        ml12_idle_time = True
        mlpart12 = "idle_time"
        finalselect = 13
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart12
    End If
    If Me!List205.Selected(13) Then
        ml13_distance = True
        mlpart13 = "distance"
        finalselect = 14
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart13
    End If
    If Me!List205.Selected(14) Then
        ml14_avg_speed = True
        mlpart14 = "avg_speed"
        finalselect = 15
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart14
    End If
    If Me!List205.Selected(15) Then
        ml15_max_speed = True
        mlpart15 = "max_speed"
        finalselect = 16
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart15
    End If
    If Me!List205.Selected(16) Then
        ml16_fuel_usage = True
        mlpart16 = "fuel_usage"
        finalselect = 17
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart16
    End If
    If Me!List205.Selected(17) Then
        ml17_start_longitude = True
        mlpart17 = "start_longitude"
        finalselect = 18
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart17
    End If
    If Me!List205.Selected(18) Then
        ml18_start_latitude = True
        mlpart18 = "start_latitude"
        finalselect = 19
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart18
    End If
    If Me!List205.Selected(19) Then
        ml19_start_formatted_longitude = True
        mlpart19 = "start_formatted_longitude"
        finalselect = 20
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart19
    End If
    If Me!List205.Selected(20) Then
        ml20_start_formatted_latitude = True
        mlpart20 = "start_formatted_latitude"
        finalselect = 21
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart20
    End If
    If Me!List205.Selected(21) Then
        ml21_end_longitude = True
        mlpart21 = "end_longitude"
        finalselect = 22
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart21
    End If
    If Me!List205.Selected(22) Then
        ml22_end_latitude = True
        mlpart22 = "end_latitude"
        finalselect = 23
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart22
    End If
    If Me!List205.Selected(23) Then
        ml23_end_formatted_longitude = True
        mlpart23 = "end_formatted_longitude"
        finalselect = 24
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart23
    End If
    If Me!List205.Selected(24) Then
        ml24_end_formatted_latitude = True
        mlpart24 = "end_formatted_latitude"
        finalselect = 25
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart24
    End If
    If Me!List205.Selected(25) Then
        ml25_driverno = True
        mlpart25 = "driverno"
        finalselect = 26
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart25
    End If
    If Me!List205.Selected(26) Then
        ml26_drivername = True
        mlpart26 = "drivername"
        finalselect = 27
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart26
    End If
    If Me!List205.Selected(27) Then
        ml27_start_addrno = True
        mlpart27 = "start_addrno"
        finalselect = 28
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart27
    End If
    If Me!List205.Selected(28) Then
        ml28_end_addrno = True
        mlpart28 = "end_addrno"
        finalselect = 29
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart28
    End If
    If Me!List205.Selected(29) Then
        ml29_co2 = True
        mlpart29 = "co2"
        finalselect = 30
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart29
    End If
    If Me!List205.Selected(30) Then
        ml30_fueltype = True
        mlpart30 = "fueltype"
        finalselect = 31
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart30
    End If
    If Me!List205.Selected(31) Then
        ml31_ep_distance = True
        mlpart31 = "ep_distance"
        finalselect = 32
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart31
    End If
    If Me!List205.Selected(32) Then
        ml32_objectuid = True
        mlpart32 = "objectuid"
        finalselect = 33
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart32
    End If
    If Me!List205.Selected(33) Then
        ml33_externalid = True
        mlpart33 = "externalid"
        finalselect = 34
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart33
    End If
    If Me!List205.Selected(34) Then
        ml34_driveruid = True
        mlpart34 = "driveruid"
        finalselect = 35
        queryselect2 = queryselect2 & " ," & "tomtom." & mlpart34
    End If
    
    MsgBox ("queryselect2 = " & queryselect2)
    queryselect = Right(queryselect2, Len(queryselect2) - 2)
    MsgBox ("queryselect = " & queryselect)
skipcolumnoptions:
End If

'Build SQL query
'============='
If counter1 = 0 Then
    MsgBox ("Please fill in at least one value before searching.")
    Exit Sub
End If
If counter1 = 1 Then
    Qquery = "SELECT " & queryselect & " FROM engineer INNER JOIN tomtom ON engineer.objectno = tomtom.objectno WHERE " & part1 & part2 & part3 & part4 & part5 & part6 & part7
End If
If counter1 > 1 Then

    Qquery = "SELECT " & queryselect & " FROM engineer INNER JOIN tomtom ON engineer.objectno = tomtom.objectno WHERE "
    If SiteText80 = True Then
        Qquery = Qquery & part1 & " AND "
    End If
    If EngineerList6 = True Then
        Qquery = Qquery & part2
        If Not final = 2 Then
            Qquery = Qquery & " AND "
        End If
    End If
    If geheim3List10 = True Then
        Qquery = Qquery & part3
        If Not final = 3 Then
            Qquery = Qquery & " AND "
        End If
    End If
    If DateFromText21 = True Then
        Qquery = Qquery & part4
        If Not final = 4 Then
            Qquery = Qquery & " AND "
        End If
    End If
    If CustomerList156 = True Then
        Qquery = Qquery & part5
        If Not final = 5 Then
            Qquery = Qquery & " AND "
        End If
    End If
    If EngineertypeList148 = True Then
        Qquery = Qquery & part6
    End If
End If
Qquery = Qquery & ";"
MsgBox Qquery

Dim dbs As Database
Dim rs As Recordset
Dim qdf As QueryDef
Dim strSql As String

Set dbs = CurrentDb()

strSql = Qquery

Set rs = dbs.OpenRecordset(strSql, dbOpenSnapshot)

With dbs
Set qdf = .CreateQueryDef("tmpqry", strSql)
DoCmd.OpenQuery "tmpqry"
.QueryDefs.Delete "tmpqry"
End With
dbs.Close
qdf.Close

End Sub
 
Als je deze kilometer code op je formulier hebt staan, dan kan er heel wat tekst weg:
Code:
Forms!frmMenuDatesSitesDriversgeheim3s!List148
door
[/code]Me.List148[/code]
etc. En dan niet Me! gebruiken, maar Me.
Maar waarom heb ik toch nog steeds het gevoel dat het heel veel makkelijker moet kunnen? :)
 
Haha :) , dat heb ik later ook ontdekt inderdaad. Wat ik nog niet begrijp is dat ik ineens een foutmelding kreeg op een gegeven moment. Het enige wat de foutmelding verhielp was het vervangen van Me. naar Me! . Ik gebruikte eerst inderdaad Me. . Ik heb niet verder gezocht wat het verschil/oorzaak precies is.

Gr Dennis
 
Me. gebruik je als je verwijst naar eigenschappen van objecten op een formulier of rapport. Me! gebruik je als je verwijst naar leden van een collectie. Gebruik je de punt, dan heb je de Intellisense functie, die je niet hebt bij het uitroepteken. In beginsel mag het niet uitmaken wat je gebruikt, tenzij je met de namen aan het klooien bent geweest.
 
OK bedankt voor de verheldering. Ik doe niets anders dan klooien met namen dus dat zou best wel eens kunnen ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan