Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBA] 2x klikken voordat nieuwe string wordt gegenereerd

Pagina: 1
Acties:

  • apophis4u
  • Registratie: Oktober 2002
  • Laatst online: 24-11 07:41
In MS access heb ik een zoekformulier gemaakt waarbij ik met VBA de querycode genereer. Doel hiervan is dat dit formulier object onafhankelijk wordt en ik alleen de bron tabel erbij hoef te koppelen over het netwerk.

Als ik op mijn knop 'zoeken' klik roept hij de functie 'IDBzoeken' aan om de SQL zoekstring op te bouwen.
De functie werkt prima, behalve dat ik 2 keer moet klikken voordat hij het filter daadwerkelijk uitvoert.

Bijvoorbeeld; ik voer een bedrijfsnaam in, klik op zoeken en moet vervolgens wéér op zoeken klikken voor hij daadwerkelijk filtert.
Nog vreemder is: als ik een bedrijfsnaam invoer, op zoeken klik, bedrijfsnaam leeg maak en wederom op zoeken klik, hij evengoed het zoek commando uitvoert. Klik ik gelijk weer op zoeken, laat hij weer alles zien.

Iets wat er volgens mij mee te maken kan hebben is dat standaard een veld in het formulier Null is; vergelijking met "" gaat dan niet op. Na invoeren van een zoekstring in een veld en deze verwijderen; komt dit wél overeen met "" en niet meer met Null.


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
Private Sub Zoeken_Click()

Call IDBzoeken

Me.Form.Requery

End Sub

Function IDBzoeken()
    Dim strSQL As String
    Dim zkWhere As String, zkEnd As String

    If IsNull(Me.ZIGHnr) Then
    Else
        zkWhere = "WHERE ("
        zkWhere = zkWhere & "((intermediairdatabase.IGHnr) Like '*' & '" & Me.ZIGHnr & "' & '*')"
        zkEnd = ") "
    End If
    
    If IsNull(Me.Zighseg) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.ighseg) Like '*' & '" & Me.Zighseg & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.ighseg) Like '*' & '" & Me.Zighseg & "' & '*')"
            zkEnd = ") "
        End If
    End If
    
    If IsNull(Me.Zniveau3) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.niveau3) Like '*' & '" & Me.Zniveau3 & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.niveau3) Like '*' & '" & Me.Zniveau3 & "' & '*')"
            zkEnd = ") "
        End If
    End If
    
    If IsNull(Me.Zbedrijfsnaam) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.bedrnaam) Like '*' & '" & Me.Zbedrijfsnaam & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.bedrnaam) Like '*' & '" & Me.Zbedrijfsnaam & "' & '*')"
            zkEnd = ") "
        End If
    End If
    
    If IsNull(Me.Zholding) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.holding) Like '*' & '" & Me.Zholding & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.holding) Like '*' & '" & Me.Zholding & "' & '*')"
            zkEnd = ") "
        End If
    End If

    If IsNull(Me.zSTRAATNM) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.STRAATNM) Like '*' & '" & Me.zSTRAATNM & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.STRAATNM) Like '*' & '" & Me.zSTRAATNM & "' & '*')"
            zkEnd = ") "
        End If
    End If

    If IsNull(Me.Zhuisnumm) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.huisnumm) Like '*' & '" & Me.Zhuisnumm & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.huisnumm) Like '*' & '" & Me.Zhuisnumm & "' & '*')"
            zkEnd = ") "
        End If
    End If
        
    If IsNull(Me.Zpostcode) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.postcode) Like '*' & '" & Me.Zpostcode & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.postcode) Like '*' & '" & Me.Zpostcode & "' & '*')"
            zkEnd = ") "
        End If
    End If

    If IsNull(Me.Ztelefoon) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.telefoon) Like '*' & '" & Me.Ztelefoon & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.telefoon) Like '*' & '" & Me.Ztelefoon & "' & '*')"
            zkEnd = ") "
        End If
    End If

    If IsNull(Me.Zplaats) Then
    Else
        If (zkWhere = "") Then
            zkWhere = "WHERE ("
            zkWhere = zkWhere & "((intermediairdatabase.wnplaats) Like '*' & '" & Me.Zplaats & "' & '*')"
            zkEnd = ") "
        Else
            zkWhere = zkWhere & " AND ((intermediairdatabase.wnplaats) Like '*' & '" & Me.Zplaats & "' & '*')"
            zkEnd = ") "
        End If
    End If
    
    strSQL = "SELECT intermediairdatabase.IGHNR, " & _
        "intermediairdatabase.IGHSEG, intermediairdatabase.NIVEAU3, " & _
        "intermediairdatabase.HOLDING, intermediairdatabase.BEDRNAAM, " & _
        "intermediairdatabase.STRAATNM, intermediairdatabase.HUISNUMM, " & _
        "intermediairdatabase.POSTCODE, intermediairdatabase.WNPLAATS, " & _
        "intermediairdatabase.TELEFOON " & _
        "FROM intermediairdatabase " & zkWhere & zkEnd & _
        "ORDER BY intermediairdatabase.WNPLAATS;"
    
    Me.Form.RecordSource = strSQL
    
    strSQL = ""
    zkWhere = ""
    zkEnd = ""
           
End Function

Een specialist weet veel van weinig en leert steeds meer van steeds minder, tot hij uiteindelijk alles weet van niets.


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 16:56
Zet er eens een breakpoint in zou ik zeggen, basic debuggen...
In c# zou ik string.IsNullOrEmpty() gebruiken, weet niet of vba zoiets heeft?

Roomba E5 te koop


  • apophis4u
  • Registratie: Oktober 2002
  • Laatst online: 24-11 07:41
Hoe werkt een breakpoint? (ben geen echte programmeur en maak pragmatisch wat dingen ini VBA)

Een goede vergelijking van Is Null Or Empty zou ik in ieder geval veel aan hebben.

Een specialist weet veel van weinig en leert steeds meer van steeds minder, tot hij uiteindelijk alles weet van niets.


Verwijderd

apophis4u schreef op dinsdag 29 april 2008 @ 15:24:Na invoeren van een zoekstring in een veld en deze verwijderen; komt dit wél overeen met "" en niet meer met Null.
na verwijderen van een waarde zou dit veld toch wel opnieuw Null moeten zijn, tenzij je ergens in de standaard waarde iets eigenaardigs hebt ingesteld.
om toch rekening te houden met een lege string kan de voorwaarde bv. als volgt aangepast worden:
Visual Basic:
1
2
3
4
5
6
7
If (not IsNull(Me.ZIGHnr)) Then
  if (""<>Me.ZIGHnr) then
        zkWhere = "WHERE ("
        zkWhere = zkWhere & "((intermediairdatabase.IGHnr) Like '*' & '" & Me.ZIGHnr & "' & '*')"
        zkEnd = ") "
  endif
End If 

enz..
debuggen doe je door bij de gewenste codelijn in de grijze marge te klikken in de vb editor, er verschijnt dan een rood bolletje. als je dit bv. doet op lijn 137 van je code dan kan de waarde van strsql bekeken worden door de muis over de variabelenaam te houden of door het direct venster op te roepen met ctrl+g als je in de vbeditor bent en dan ? strsql te typen. in debug mode kan de code kan lijn per lijn afgehandeld worden met F8 of volledig verder laten doorlopen met F5.

  • apophis4u
  • Registratie: Oktober 2002
  • Laatst online: 24-11 07:41
bedankt voor de reactie heretic!

Inmiddels heb ik hem opgelost:

Op het moment dat ik criteria in de velden van mijn formulier in tik, dan staan deze voor het formulier er nog niet 'echt' in. Nadat het requery commando is gegeven zet hij deze waarden er wél in, maar is de nieuwe SQL dus al gegenereerd.

Ik heb het nu opgelost door vóórdat ik de nieuwe SQL ga opbouwen eerst het formulier te refreshen (me.form.refresh). Op dat moment zet hij de waarde in zijn veld objecten en kan ik die met VBA ophalen.

Dat debuggen ga ik eens mee experimenteren. THX!

Een specialist weet veel van weinig en leert steeds meer van steeds minder, tot hij uiteindelijk alles weet van niets.