Mijn vraag:
Ik heb voor mijn werkgever een uitgebreide Access frontend gebouwd (VBA dymische code & plug & play) gecombineerd met een MySQL backend. NU werkt dit allemaal top, maar heb hierin een aantal design dingetjes moeten bouwen die niet handig/makkelijk zijn.
Er zitten veel datagrids in waarbij gefilterd moet kunnen worden, zoals bijvoorbeeld bij excel (top row filter). Nu heb ik als start een continues form gemaakt waarbij de filter boxen in de header staan en de datagrid in de main form. Dit werkte niet. Overigens kan ik wel filteren, maar als je in een textbox typt dan wil ik realtime filteren. Op dit moment schiet de cursor na elke filteractie weg naar de datagrid. Geen probleem uiteraard, gewoon setfocus op de betreffende txtbox -> Niet dus. het lijkt alsof het scherm "freezed", de cursor is dan weg, als ik alt-tab naar een ander scherm en dan terug dan is de cursor er weer. Ook het klikken "naast of willekeurig op het form brengt de cursor weer tot leven/terug.
Momenteel heb ik dit opgelost door een subform in de form waarbij de header nog steeds de filters bevat, maar de dataset in de subform wordt weergegeven. Hiermee blijft de cursor wel bestaan. Het liefste wil ik hier van af, want het is een hels karwei om de steeds bij winjzigingen de alligment weer te vinden.
Relevante software en hardware die ik gebruik:
- Access 2010
- Mysql (niet belangrijk voor mijn vraag)
Wat ik al gevonden of geprobeerd heb
Dit is de code die ik gebruik voor de txtbox in een form, dit werkt dus OOK niet, heb gespeeld met Doevents, met cancelevent, maar alles met hetzelfde resultaat:
Doel is een singleform textfilterbox (heb natuurlijk veel meer filters, maar als dit concept werkt, dan kan ik weer verder)
Ik heb voor mijn werkgever een uitgebreide Access frontend gebouwd (VBA dymische code & plug & play) gecombineerd met een MySQL backend. NU werkt dit allemaal top, maar heb hierin een aantal design dingetjes moeten bouwen die niet handig/makkelijk zijn.
Er zitten veel datagrids in waarbij gefilterd moet kunnen worden, zoals bijvoorbeeld bij excel (top row filter). Nu heb ik als start een continues form gemaakt waarbij de filter boxen in de header staan en de datagrid in de main form. Dit werkte niet. Overigens kan ik wel filteren, maar als je in een textbox typt dan wil ik realtime filteren. Op dit moment schiet de cursor na elke filteractie weg naar de datagrid. Geen probleem uiteraard, gewoon setfocus op de betreffende txtbox -> Niet dus. het lijkt alsof het scherm "freezed", de cursor is dan weg, als ik alt-tab naar een ander scherm en dan terug dan is de cursor er weer. Ook het klikken "naast of willekeurig op het form brengt de cursor weer tot leven/terug.
Momenteel heb ik dit opgelost door een subform in de form waarbij de header nog steeds de filters bevat, maar de dataset in de subform wordt weergegeven. Hiermee blijft de cursor wel bestaan. Het liefste wil ik hier van af, want het is een hels karwei om de steeds bij winjzigingen de alligment weer te vinden.
Relevante software en hardware die ik gebruik:
- Access 2010
- Mysql (niet belangrijk voor mijn vraag)
Wat ik al gevonden of geprobeerd heb
Dit is de code die ik gebruik voor de txtbox in een form, dit werkt dus OOK niet, heb gespeeld met Doevents, met cancelevent, maar alles met hetzelfde resultaat:
Visual Basic .NET:
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
| Option Compare Database Dim rst As New ADODB.Recordset Private Sub Form_Open(Cancel As Integer) 'Dim rst As New ADODB.Recordset Dim FormSQLString As String FormSQLString = "SELECT IDUpdateTool, " & vbCrLf & _ " UniqueExecutionID, " & vbCrLf & _ " FullName, " & vbCrLf & _ " UpdateDateTimeStart, " & vbCrLf & _ " UpdateDateTimeEnd, " & vbCrLf & _ " UpdateStatus " & vbCrLf & _ "FROM GLSUpdateTool a " & vbCrLf & _ "ORDER BY UpdateStatus ASC;" With rst Set .ActiveConnection = CurrentProject.Connection .CursorLocation = adUseClient .Source = FormSQLString .LockType = adLockOptimistic .CursorType = adOpenDynamic .Open End With If Not (rst.EOF And rst.BOF) Then Set Me.Recordset = rst ElseIf ConnectRST = True Then Set Me.Recordset = rst End If 'Set rst = Nothing End Sub Private Sub Text8_Change() Me.Text8.value = Me.Text8.Text UpdateFilter 'DoCmd.CancelEvent Me.SetFocus Me.Text8.SetFocus 'Me.SetFocus 'If (Me.Text8 Is Me.ActiveControl) Then Me!Text8.SelStart = Me!Text8.SelLength 'Me.SetFocus Me.Text0.SetFocus Me.Text8.SetFocus Me.Text8.SelStart = Me.Text8.SelLength 'If (Me.Text8 Is Me.ActiveControl) Then Me!Text8.SelStart = Me!Text8.SelLength End Sub Function UpdateFilter() 'Dim rst As New ADODB.Recordset Dim a As String Dim ctlCurrentControl As Control Dim strControlName As String ' Build a filter string based on user input ' Supplier Filter With Me ' Mat Description filter ' Mat Description filter If Not IsNull(Me.Text8) And Me.Text8 <> "" Then a = a & " AND FullName LIKE '*" & Me.Text8 & "*'" End If 'Set rst = Me.Form.Recordset.Clone With rst .Filter = adFilterNone If a <> "" Then .Filter = adFilterFetchedRecords .Filter = Right(a, Len(a) - 4) End If End With If rst.RecordCount = 0 Then Set Me.Form.Recordset = Nothing Else Set Me.Form.Recordset = rst End If End With 'Set rst = Nothing End Function |
Doel is een singleform textfilterbox (heb natuurlijk veel meer filters, maar als dit concept werkt, dan kan ik weer verder)