Forms: Déterminer quel enregistrements sont choisis, en vue "données" |
Author(s) Dev Ashish |
|
Déterminer quel enregistrements sont choisis, en vue "données".
(Q) Je désire entreprendre des procédures selon le choix
des enregistrements actuellement choisis par l'utilisateur qui se trouve en un
mode de visionnent dit datasheet view (form/subform). Mais comment
déterminer quels enregistrements sont choisis?
(A) Depuis Access 95, les propriétés SelTop,
SelWidth, SelHeight, et SelLeft sont maintenant disponibles pour cet usage, en
particulier, ici SelTop et SelHeight.
Malheureusement, ces propriétés ne sont valides que si
les données possèdent le focus. On ne peut penser à cliquer sur un bouton, le
fait de positionner le curseur de souris sur le bouton et de le cliquer
invaliderait l'information contenue dans les donnés précédemment
"choisies". Un solution est donc d'utiliser un Timer sous le
formulaire, ou sur un toolbar fait-maison.
Comme exemple, utilisant la procédure événementielle
OnTimer, nous imprimerons les enregistrements choisis (en utilisant un état
qu'on suppose prédéfini).
' Créer une variable ayantla forme comme étedue.
Dim mfPrint As Boolean
Put following code in Form's Open Event
Private Sub Form_Open(Cancel As Integer)
mfPrint = False
End Sub
Assigner la valeur 5000 à la propriété TimerInterval du formulaire, puis
copier-coller le code suivant dans la procédure événementielle
Private Sub Form_Timer()
Dim i As Long
Dim strSQL As String
Dim loqd As QueryDef
If Me.SelHeight = 0 Or mfPrint Then Exit Sub
strSQL = "SELECT * FROM [" & Me.RecordSource _
& "] WHERE "
With Me.RecordsetClone
.MoveFirst
.Move Me.SelTop - 1
For i = 1 To Me.SelHeight
strSQL = strSQL & "ProductID = " & _
![ProductID] & _
" OR "
.MoveNext
Next i
strSQL = Left$(strSQL, Len(strSQL) - 3)
If MsgBox("Prêt pour imprimer maintenant?", _
vbQuestion + vbYesNo, _
"Confirmation requise") = vbYes Then
Set loqd = CurrentDb.QueryDefs("qryProducts")
loqd.SQL = strSQL
loqd.Close
mfPrint = True
End If
End With
Set loqd = Nothing
End Sub
|