Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

MS-ACCESS bloquer la bdd et afficher un sablier tant qu'Openfile ne renvoie pas de résultat

14 réponses
Avatar
technique
Bonjour,

J'ai une bdd structurée comme suit :

- une table avec des caractéristiques d'outils
- une table d'interventions sur les outils
- les deux tables sont liées (un outil a une/plusieurs interventions)

J'ai un formulaire :
- qui affiche les caractéristiques des outils
- qui comporte un sous formulaire pour afficher les interventions
concernant l'outil.

Dans le sous-formulaire des interventions j'ai intégré le code trouvé
dans la base http://access.seneque.free.fr/bases_exemples.htm n°38
pour afficher une image concernant l'intervention et choisir cette
image.

J'aimerai savoir comment empêcher l'accès au formulaire outil et son
sous-formulaire interventions afin :
- d'éviter de se déplacer dans les enregistrements
(formulaire+sous-formulaire)
- d'éviter l'ajout d'enregistrement (formulaire+sous-formulaire)
- d'éviter l'édition des données (formulaire+sous-formulaire)
quelque soit le moyen (souris, clavier, ...)
tant que la boite de dialogue OpenFile n'a pas été renseignée ou
annulée,

Est ce qu'il y a un flag dans openfile pour ça ?
Ou faut il :
- utiliser AllowEdits, AllowDeletions, NavigateButtons, ... sur les
formulaire
- créer un code d'interception des évènement clavier
- utiliser Locked sur les controles ?
Ou est ce qu'il y a une autre astuce en vba ?

Est il possible de changer le curseur en sablier tant que le boite de
dialogue openfile est ouverte et que le curseur est en dehors de
celle-ci ?

Merci d'avance,

Fabien

4 réponses

1 2
Avatar
technique
"?Lo»Paris?" wrote in message news:...
technique wrote:
"Raymond [mvp]" wrote in message
news:...
Concernant le sablier, je pensais à ce qu'il soit actif sauf dans la
boite openfile. C'est possible ?
oui, si ça sert à quelque chose:

devant l'api mettre :
DoCmd.Hourglass True
derrière l'api, mettre:
DoCmd.Hourglass False
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum



Bonjour,

Ca marche nickel !

Dernière question concernant openfile :
Est ce qu'il est possible d'appeler la boite de dialogue en
choisissant le type d'affichage :
- miniatures
- liste
- détails
- mosaïque
- icones
?

Je suis dans un environnement réseau sous windows xp / 2000, access
2000 et 2002.

Merci d'avance,

Fabien


Bonjour Fabien,

Deux adresse pour tout savoir sur l'API GetOpenFileName :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/CommonDialogBoxLibrary/CommonDialogBoxReference/CommonDialogBoxStructures/OPENFILENAME.asp

Et (pour procédure CallBack)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/CommonDialogBoxLibrary/AboutCommonDialogBoxes/OpenandSaveAsDialogBoxes.asp

Tu obtiendra la définition de toutes les valeurs applicable aux paramètres
de la boite, très intéressant.

Une autre adresse intéressante :
http://www.mangovision.com/vbapi/ref/o/openfilename.html


Bonjour,

J'avais déjà lu les docs de M$. Mais je ne suis pas un roi des api
(j'ai déjà un peu de mal avec access+vba :).

Je n'ai pas compris ou trouvé comment on dit à un dialogue openfile de
passer en mode affichage miniature.

Un exemple concret me parlera plus :-)

Merci d'avance,

Fabien




Avatar
?Lo»Paris?
technique wrote:
"?Lo»Paris?" wrote in message
news:...
technique wrote:
"Raymond [mvp]" wrote in message
news:...
Concernant le sablier, je pensais à ce qu'il soit actif sauf dans
la
boite openfile. C'est possible ?
oui, si ça sert à quelque chose:

devant l'api mettre :
DoCmd.Hourglass True
derrière l'api, mettre:
DoCmd.Hourglass False
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum



Bonjour,

Ca marche nickel !

Dernière question concernant openfile :
Est ce qu'il est possible d'appeler la boite de dialogue en
choisissant le type d'affichage :
- miniatures
- liste
- détails
- mosaïque
- icones
?

Je suis dans un environnement réseau sous windows xp / 2000, access
2000 et 2002.

Merci d'avance,

Fabien


Bonjour Fabien,

Deux adresse pour tout savoir sur l'API GetOpenFileName :


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/CommonDialogBoxLibrary/CommonDialogBoxReference/CommonDialogBoxStructures/OPENFILENAME.asp



Et (pour procédure CallBack)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/CommonDialogBoxLibrary/AboutCommonDialogBoxes/OpenandSaveAsDialogBoxes.asp



Tu obtiendra la définition de toutes les valeurs applicable aux
paramètres
de la boite, très intéressant.

Une autre adresse intéressante :
http://www.mangovision.com/vbapi/ref/o/openfilename.html


Bonjour,

J'avais déjà lu les docs de M$. Mais je ne suis pas un roi des api
(j'ai déjà un peu de mal avec access+vba :).

Je n'ai pas compris ou trouvé comment on dit à un dialogue openfile de
passer en mode affichage miniature.

Un exemple concret me parlera plus :-)

Merci d'avance,

Fabien
================================= Salut Fabien,


Voici un petit exemple de base que je t'ai préparé, j'ai simplifié pour que
le fonctionnement soit plus apparent, à toi d'appliquer les différent mode
de fonctionnement que tu souhaite appliquer à la boite.

Le principe c'est d'intercepté les messages envoyés par la boite à Windows
(CallBack avec la proc 'OFNHookProc').
Ici on intercepte (si message WM_NOTIFY) le changement de dossier et on
envoi un message à la boite pour lui indiquer le style d'affichage quelle
doit appliquer.

Voir dans le code les différent style applicable (contantes
FCIDM_SHVIEW_xxxxx), note que 'LARGEICON' et 'SMALLICON' sont identique, je
ne sais pas trop pourquoi, enfin j'ai pas chercher à approfondir, on verra
cela plus tard.

Le détail du fonctionnement est expliquer dans le code.

Tu colle le tout dans un module et tu appel la procédure
gfn_OuvreBoiteFichier, par exemple :

sTmp = gfn_OuvreBoiteFichier(Me.hwnd, "c:", 28716) '// Style [Détail]
(FCIDM_SHVIEW_REPORT)

Le code :

*****************************************
Option Compare Database
Option Explicit

Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" _
(ByRef pOpenfilename As OPENFILENAME) As Long

Private Declare Function SendMessage Lib "user32.dll" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long

Private Declare Sub CopyMemory Lib "kernel32.dll" _
Alias "RtlMoveMemory" _
( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long _
)

Private Declare Function GetParent Lib "user32.dll" _
(ByVal hwnd As Long) As Long

Private Declare Function FindWindowEx Lib "user32.dll" _
Alias "FindWindowExA" _
( _
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String _
) As Long

'// API pour verifier la verion de Comdlg32.dll.


' Private Declare Function VerQueryValue Lib "Version.dll" _
' Alias "VerQueryValueA" _
' ( _
' ByRef pBlock As Any, _
' ByVal lpSubBlock As String, _
' ByVal lplpBuffer As Long, _
' ByRef puLen As Long _
' ) As Long

'// Structure pour l'API GetFileName.
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

'// Style affichage des fichier dans la boite.
Private Const FCIDM_SHVIEW_LARGEICON As Long = &H7029&
Private Const FCIDM_SHVIEW_SMALLICON As Long = &H702A&
Private Const FCIDM_SHVIEW_LIST As Long = &H702B&
Private Const FCIDM_SHVIEW_REPORT As Long = &H702C&
Private Const FCIDM_SHVIEW_THUMBNAIL As Long = &H702D&
Private Const FCIDM_SHVIEW_TILE As Long = &H702E&

'// Command SendMessage.
Private Const WM_COMMAND As Long = &H111&

'// Message intercepté par la proc CallBack(OFNHookProc).
Private Const WM_NOTIFY As Long = &H4E&

'// Notification changement de status de la boite.
Private Const CDN_FIRST As Long = (0& - 601&)
Private Const CDN_LAST As Long = (0& - 699&)
Private Const CDN_INITDONE As Long = (CDN_FIRST - &H0&)
Private Const CDN_SELCHANGE As Long = (CDN_FIRST - &H1&)
Private Const CDN_FOLDERCHANGE As Long = (CDN_FIRST - &H2&)
Private Const CDN_SHAREVIOLATION As Long = (CDN_FIRST - &H3&)
Private Const CDN_HELP As Long = (CDN_FIRST - &H4&)
Private Const CDN_FILEOK As Long = (CDN_FIRST - &H5&)
Private Const CDN_TYPECHANGE As Long = (CDN_FIRST - &H6&)
Private Const CDN_INCLUDEITEM As Long = (CDN_FIRST - &H7&)

'// Valeurs pour flag structure openFileName.
Private Const OFN_ALLOWMULTISELECT As Long = &H200
Private Const OFN_CREATEPROMPT As Long = &H2000
Private Const OFN_ENABLEHOOK As Long = &H20
Private Const OFN_ENABLETEMPLATEHANDLE As Long = &H80
Private Const OFN_EXTENSIONDIFFERENT As Long = &H400
Private Const OFN_FILEMUSTEXIST As Long = &H1000
Private Const OFN_HIDEREADONLY As Long = &H4
Private Const OFN_NOCHANGEDIR As Long = &H8
Private Const OFN_NOLONGNAMES As Long = &H40000
Private Const OFN_NONETWORKBUTTON As Long = &H20000
Private Const OFN_NOREADONLYRETURN As Long = &H8000
Private Const OFN_EXPLORER As Long = &H80000
Private Const OFN_NOTESTFILECREATE As Long = &H10000
Private Const OFN_ENABLESIZING As Long = &H800000
Private Const OFN_FORCESHOWHIDDEN As Long = &H10000000
Private Const OFN_NOVALIDATE As Long = &H100
Private Const OFN_OVERWRITEPROMPT As Long = &H2
Private Const OFN_PATHMUSTEXIST As Long = &H800
Private Const OFN_READONLY As Long = &H1
Private Const OFN_SHAREAWARE As Long = &H4000
Private Const OFN_SHAREWARN As Long = 0
Private Const OFN_SHARENOWARN As Long = 1
Private Const OFN_SHAREFALLTHROUGH As Long = 2
Private Const OFN_SHOWHELP As Long = &H10
Private Const OFS_MAXPATHNAME As Long = 128

'// Structure pour copyMemory.
Private Type TY_DEST
hwndFrom As Long
idfrom As Long
code As Long
End Type

'// Stock le style à utiliser.
Private mlStyle As Long

Public Function gfn_OuvreBoiteFichier _
(hwnd As Long, ByVal sRepDep, Optional lStyle As Long = False) As String
'//-----------------------------------------------------------
'// ENTRE <-
'// hwnd : Handler du formulaire appelant la boite.
'// sRepDep : Dossier de départ pour la boite.
'// lStyle : Style d'affichage des dossiers.
'// SORT ->
'// Le nom du fichier sélectionné, ou une chaîne vide.
'//-----------------------------------------------------------

Dim OF As OPENFILENAME
Dim sFich As String
Dim lPos As Long

'// Initialisation de la structure.
With OF
.lStructSize = Len(OF)
.hwndOwner = hwnd
'// Fitre 'Tous fichier".
.lpstrFilter = "Tous fichiers (*.*)" & vbNullChar & "*.*" & vbNullChar
& vbNullChar
.lpstrFile = Space(256) & vbNullChar
.nMaxFile = Len(.lpstrFile)
.lpstrFileTitle = Space(256) & vbNullChar
.nMaxFileTitle = Len(.lpstrFileTitle)
.lpstrInitialDir = sRepDep
.lpstrTitle = "Open A File"
.flags = OFN_EXTENSIONDIFFERENT Or OFN_NOCHANGEDIR Or
OFN_OVERWRITEPROMPT Or _
OFN_HIDEREADONLY Or OFN_EXPLORER Or OFN_ENABLESIZING Or
OFN_FORCESHOWHIDDEN

''// Si un style d'affichage est indiquer, on active l'appel
'// à la procédure callBack (OFNHookProc).
If lStyle Then
mlStyle = lStyle
.flags = .flags Or OFN_ENABLEHOOK
.lpfnHook = AdresseProc(AddressOf MD_OpenFileName.OFNHookProc)
End If
End With

'// Retourne le fichier sélectionné.
If GetOpenFileName(OF) Then
sFich = OF.lpstrFile
lPos = InStr(sFich, vbNullChar)
sFich = Left$(sFich, lPos - 1)
If lPos > 1 Then
gfn_OuvreBoiteFichier = sFich
Else
gfn_OuvreBoiteFichier = vbNullString
End If
Else
gfn_OuvreBoiteFichier = vbNullString
End If

End Function

Public Function OFNHookProc(ByVal hDlg&, ByVal nMsg&, ByVal wParam&, ByVal
lParam&) As Long
'// Procédure CallBack de la boite fichier, appellée par
'// la boite sur certaines actions de celle-ci.

Dim lWnd As Long
Dim lpDest As TY_DEST

Select Case nMsg
'// Interception message WM_NOTIFY, et définir le style
'// d'affichage des fichier quand CDN_FOLDERCHANGE est envoyer
'// et avant que la boite soit afficher.
Case WM_NOTIFY
CopyMemory lpDest, ByVal lParam, Len(lpDest)

Select Case lpDest.code
'// Interception changement de dossier.
Case CDN_FOLDERCHANGE

'// Obtenir le Handler de la fenêtre (class name
SHELLDLL_DefView).
lWnd = FindWindowEx(GetParent(hDlg), 0, "SHELLDLL_DefView",
vbNullString)

If lWnd Then
'// Envoi notification style affichage des fichiers.
Call SendMessage(lWnd, WM_COMMAND, ByVal mlStyle, ByVal
0&)
End If

End Select

End Select

End Function

Private Function AdresseProc(ByVal lpProc&) As Long
'// Retourne l'adresse de la procédure hook.
AdresseProc = lpProc
End Function
*********************************************

°Laurent°





Avatar
Arnaud [lwa]
Bonjour Laurent ,

Dans le message http://groups.google.com/groups?selm=%,

| Voici un petit exemple de base que je t'ai préparé

Ah ça nous manquait ce genre de réponses !
J'espère que tu t'empresseras de ne plus t'expatrier maintenant ;-))

Content de te relire en tout cas

--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
?Lo»Paris?
Arnaud [lwa] wrote:

J'espère que tu t'empresseras de ne plus t'expatrier maintenant ;-))


Salut Arnaud !

Maintenant que j'ai goûté au haut débit, hésite :o)

A bientôt Arnaud

°Laurent°

1 2