IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)



Formulaire Login/mot de passe
auteur : Morsi
Le formulaire login/mot de passe permettra à un utilisateur de s'identifier et à la base de le reconnaître et en décider de lui donner ou non la permission d'y accéder à la base. Pour ce fait, on aura besoin d'une table T_User et d'un formulaire " F_Connexion "

Table T_User (TRIGRAMME, NOM, PRENOM, GROUPE, PASWD) tous les champs sont de type texte. Un enregistrement exemple de cette table : T_User(SED, SEBASTIEN, DULOT, Administrateur, root)

L'évènement on_click du bouton Connexion :

Private Sub connexion_Click() Me.Requery Dim sql, User_id, User_groupe As String Dim rs As DAO.Recordset Static i As Byte sql = "SELECT * FROM T_USERS WHERE TRIGRAMME = '" & Me.txt_user & "' AND PASSWD =''"& Me.txt_pass & "';" Set rs = CurrentDb.OpenRecordset(sql) If Not rs.EOF Then DoCmd.OpenForm "F_Autre_Formulaire", acNormal, , , , acWindowNormal DoCmd.close acForm, "F_CONNEXION" User_id = rs("TRIGRAMME").value User_groupe = rs("GROUPE").value Else MsgBox "(Identifiant, Mot de Passe) incorrect ", vbInformation, "Connexion" i = i + 1 End If If i = 3 Then Msgbox "Vous avez dépassé le nombre de tentatives autorisés", vbCritical DoCmd.Quit End If End Sub

Eviter le lancement de deux instances d'une base
auteur : Morsi
Cette méthode permet d'éviter le lancement de la même base plusieurs fois en locale. Pour lancer le test vous pouvez soit créer une macro autoexec, soit créer un formulaire de démarrage soit <F_Démarrage> et qui vérifie si la base est déjà ouverte :

' -- Evenement sur ouverture du formulaire Private Sub Form_Open(Cancel As Integer) If TestDDELink(Application.CurrentDb.Name) Then MsgBox "Cette base est déja ouverte sur votre poste", VbInformation DoCmd.Quit End If End Sub Function TestDDELink(ByVal strNomApplication As String) As Integer Dim varCanalDDE As Long On Error Resume Next Application.SetOption "Ignore DDE Requests", True ' -- Ouvrir un canal entre instance de la base varCanalDDE = DDEInitiate("MSAccess", strNomApplication) ' -- Si la base n'est pas ouverte, pas de canal de communication entre deux instances If Err Then TestDDELink = 0 Else TestDDELink = 1 DDETerminate varCanalDDE DDETerminateAll End If Application.SetOption ("Ignore DDE Requests"), False End Function

Inhiber la touche MAJ au démarrage
auteur : Frank
Il est intéressant des fois d'inhiber l'effet de la touche MAJ (Ne pas exécuter les évènement de chargement de la base) pour ne pas afficher le conteneur de la base à l'utilisateur. Pour cela on dispose de deux procédures, l'une qui l'inhibe SetBypassProperty, l'autre qui l'active UnSetBypassProperty.

Sub SetBypassProperty() Const DB_Boolean As Long = 1 ChangeProperty "AllowBypassKey", DB_Boolean, False End Sub Sub UnSetBypassProperty() Const DB_Boolean As Long = 1 ChangeProperty "AllowBypassKey", DB_Boolean, True End Sub Function ChangeProperty(strPropName As String, varPropType As Long varPropValue As Variant) As Integer Dim dbs As Database prp As Variant Const conPropNotFoundError = 3270 Set dbs = CurrentDb On Error GoTo Change_Err dbs.Properties(strPropName) = varPropValue Change_Bye: Exit Function Change_Err: If Err = conPropNotFoundError Then ' Propriété non trouvée. Set prp = dbs.CreateProperty(strPropName, _ varPropType, varPropValue) dbs.Properties.Append prp Resume Next Else ' --Erreur inconnue. Resume Change_Bye End If End Function

Ouvrir une base en mode exclusif
auteur : Morsi
Function Ouvrir_Base_Exclusif() Dim Bd As Database On Error Resume Next Set Bd = DbEngine (0).OpenDatabase("C:\Ma_base.mdb", True) If Err.Number<> 0 Then Msgbox Err.Number & " Impossible d'ouvrir la base en mode Exclusif " & vbcrlf & Err.Description, VbInformation Else MsgBox "La base de données est ouverte en mode exclusif.", VbInformation End If End Function
Si on obtient le numéro d'erreur 3262, c'est que la base est ouverte en mode partagé par un autre utilisateur.


Ouvrir une table en mode exclusif
auteur : Morsi
Function Ouvrir_Table_Exclusif (Bd As Database, Ma_Table As String) As Integer Dim rcd As DAO.Recordset On Error GoTo Erreur Set rcd = Bd.OpenRecordset(Ma_Table, dbOpenTable, dbDenyRead) ' -- Mes traitemens en mode exclusif Rcd.Close Set rcd = Nothing Exit Function Erreur: Msgbox Err.Number & vbcrlf & Err.Description End Function

Lister les tables liées
auteur : Morsi
Pour savoir l'origine des tables liées, il suffit d'explorer la table MsysObjects. Vous pouvez alors créer un formulaire avec trois zone de texte dans la section détail : Nom de la table, Nom étranger de la table, Chemin de la table. Dans la source de donnée du formulaire, il faut mettre cette requête :

SELECT Name, ForeignName, Database FROM MSysObjects WHERE MSysObjects.Type=6;
N'oublier pas de renseigner la source de donnée des zones de listes.


Créer une date d’expiration pour une application
auteur : Morsi
Pour mettre une date d'expiration à la base et désactiver le run-time de votre application Access, appelez cette fonction à l'ouverture du formulaire de démarrage

Public Function DateExpirationApplication() If Date >= DateSerial(2003, 12, 31) Then MsgBox "La date d'expiration de l'application est dépassée", vbExclamation DoCmd.Quit End If End Function

Déconnecté les utilisateurs d’une base de données
auteur : Morsi
L'idée est que le formulaire principale de l'application sache quand est ce qu'il faut lancer la routine de déconnexion des utilisateurs. Pour cela, on crée une table avec un seul champs de type oui/non et un seul enregistrement : Administration(LogOff(oui/non)). L'administrateur de la base peut ensuite cacher cette table (propriété, table caché) et lui seul peut cocher la case LogOff. Il faut maintenant utiliser l'évènement minuterie du formulaire principale qui lance la vérification de la routine qui déconnectera les utilisateurs (on utilise un intervalle de 5 minutes).

Private Sub Form_Timer() On Error GoTo Err_LogOff Dim Lancer As Boolean Dim rcd As DAO.Recordset Set rcd = CurrentDb.OpenRecordset("Administration") rcd.MoveFirst Lancer = rcd.Fields(0) rstLO.Close CurrentDb.Close ' --Si la case est cochée If Lancer Then Application.Quit acQuitSaveAll Exit_LogOff: Exit Sub Err_LogOffChk: MsgBox Err.Number & vbCrLf & Err.Description, vbInformation, "Erreur" Resume Exit_LogOff End Sub

Afficher la liste des connectés à une BDD
auteur : Morsi
Pour connaître la liste des connectés à une base de données, il suffit d'explorer le fichier .ldb. Pour ce fait, on aura besoin de définir un type :

Private Type Un_Connecté ' --nom PC PC(1 To 32) As Byte ' --nom utilisateur User(1 To 32) As Byte End Type
Cette fonction renvoie alors la chaîne des connectés:

Public Function WHO_IS() As String ' -- retourne une liste séparée par des points virgules indiquant le nom de l'ordinateur ainsi que ' -- l'utilisateur connecté à la base. On Error GoTo Err_WHO_IS Dim Mon_LDB As Integer, i As Integer Dim Mon_Chemin As String Dim Mon_Log As String, Ma_Connexion As String Dim Nom_PC As String, Nom_Utilisateur As String Dim utilisateur As Un_Connecté Mon_Chemin = CurrentDb.Name CurrentDb.Close ' --Aller chercher le LDB Mon_Chemin = Left(Mon_Chemin, InStr(1, Mon_Chemin, ".")) + "LDB" Mon_LDB = FreeFile ' --Ouvrir le LDB Open Mon_Chemin For Binary Access Read Shared As Mon_LDB ' -- Lire le LDB Do While Not EOF(Mon_LDB) ' -- Chaque enregistrement lu est placé dans la variable utilisateur pour y être traité. Get Mon_LDB, , utilisateur With utilisateur i = 1 Nom_PC = "" ' -- nom du PC While .PC(i) <> 0 Nom_PC = Nom_PC & Chr(.PC(i)) i = i + 1 Wend i = 1 Nom_Utilisateur = "" ' -- nom de l'utilisateur While .User(i) <> 0 Nom_Utilisateur = Nom_Utilisateur & Chr(.User(i)) i = i + 1 Wend End With Mon_Log = Nom_PC & " | " & Nom_Utilisateur If InStr(Ma_Connexion, Mon_Log) = 0 Then Ma_Connexion = Ma_Connexion & Mon_Log & ";" End If Loop Close Mon_LDB ' --WHO_IS contient la liste des utilisateurs WHO_IS = Ma_Connexion Exit_WHO_IS: Exit Function Err_WHO_IS: MsgBox Err.Number & vbCrLf & Err.Description, vbInformation, "Erreur" Close Mon_LDB Resume Exit_WHO_IS End Function