Lancement d'Access depuis VB
Exemple d’un bouton qui ouvre une BDD sous Access:
Private Sub BtnBdd_Click()
Dim MaBase As String, Tmp As String
MaBase = Data.DatabaseName
Tmp = « C:\Program Files\Microsoft Office\Office\MSACCESS.EXE » & Chr(34) & MaBase & Chr(34)
Res = Shell(Tmp, vbMaximizedFocus)
End Sub
Compactage d'une BDD
Le projet doit faire référence à un moteur de Bdd. (Déjà fait dans L’appli vide MRD).
Procédure qui compacte:
Sub CompactageBdd(MaSourceBdd as string , MaCibleBdd as string)
DBEngine.CompactDatabase MaSourceBdd, MaCibleBdd
End Sub
Attention:
- Le compactage se fait sur une base fermée.
- La base compactée (ici MaCibleBdd) ne doit pas exister.
Récupérer la description d'un champ Access
Mettre dans un module:
Function fnctGetFieldDescription(ByVal WhatField As String, Optional ByVal PropertyName As String = « Description », Optional ByVal CreateIt As Boolean = False)
Dim oDB As DAO.Database
Dim oTBL As DAO.TableDef
Dim oField As DAO.Field
Dim oPRP As DAO.Property
Dim strDescription As String
On Error GoTo L_Err_FieldDescription
strDescription = vbNullString
Set oDB = FrmDepart.Data.Database
Set oTBL = oDB.TableDefs(« Liste »)
Set oField = oTBL.Fields(WhatField)
strDescription = oField.Properties(PropertyName)
L_Ex_FieldDescription:
Set oDB = Nothing
Set oTBL = Nothing
Set oPRP = Nothing
Set oField = Nothing
fnctGetFieldDescription = strDescription
Exit Function
L_Err_FieldDescription:
If Err = 3270 Then
If CreateIt Then
Set oPRP = oField.CreateProperty(PropertyName, dbText, « Nouvelle description »)
oField.Properties.Append oPRP
MsgBox « La propriété ‘ » & PropertyName & « ‘ a été ajoutée au champ » & WhatField & « … », 48, « Propriété ajoutée à la collection »
End If
Else
MsgBox « Impossible d’avoir des information sur le champ ‘ » & WhatField & « ‘ ! » & vbCrLf & Err.Description, 48, « Erreur »
End If
Resume L_Ex_FieldDescription
End Function
Appeler la fonction:
MaDescription = fnctGetFieldDescription(.Fields(« MonChamp »))
Conversion d'une date pour compatibilité Access
Function MakeUsDate(MaDate As Variant, Optional TimeAussi As Boolean = False)
If Not IsDate(MaDate) Then Exit Function
MakeUsDate = « # » & Month(MaDate) & « / » & Day(MaDate) & « / » & Year(MaDate)
If TimeAussi Then MakeUsDate = MakeUsDate & » » & Hour(MaDate) & « : » & Minute(MaDate) & « : » & Second(MaDate)
MakeUsDate = MakeUsDate & « # »
End Function
L’utilisation dans une requète SQL se fait de la sorte:
Data.Recordset.FindFirst « Jour = » & MakeUSDate(MaFrenchDate)
Utilisation d'un Data dynamique
Le projet doit faire référence à un moteur de Bdd. (Déjà fait dans L’appli vide MRD).
Il faut déclarer les variables: (Déjà fait dans L’appli vide MRD).
Global MaTmpBdd As Database
Global MonTmpRec As Recordset
A mettre dans la procédure qui l’utilise:
Set MaTmpBdd = OpenDatabase(« Mettre le nom de la base ici »)
Set MonTmpRec = MaTmpBdd.OpenRecordset(« Mettre le nom de la table ici », dbOpenDynaset)
Conversion d'une table Access en feuille Excel
Cet exemple, pompé en 10 min d’après le prog d’arrachement, est brut et sert à créer un fichier Excel « Etiq.xls » comportant une feuille « Etiquette » contenant tous les enregistrements de la table « Etiquette » de la Bdd « Etiq.mdb ».
Attention: pour que ça fonctionne, il faut que la feuille « Etiquette » du fichier Excel n’existe pas.
Dans la zone déclaration d’une feuille (ou d’un module)
Dim Ws As Workspace
Dans la procédure d’un contrôle (par exemple)
Private Sub Command1_Click()
Dim Bdd As String
Dim Xls As String
Bdd = « D:\documents and Settings\ebap188\My Documents\etiq.mdb »
Xls = Replace(Bdd, « .mdb », « .xls »)
Dim DataBdd As Database
Dim DataXls As Database
Set Ws = Workspaces(0)
Set DataBdd = Ws.OpenDatabase(Bdd)
Set DataXls = Ws.OpenDatabase(Xls, 0, 0, « Excel 8.0; »)
‘DataBdd.Execute « SELECT * into [Excel 8.0;database= » & Xls & « ].Etiquette FROM Etiquette WHERE [Specif 1] = ’11KW/400V' »
DataBdd.Execute « SELECT * into [Excel 8.0;database= » & Xls & « ].Etiquette FROM Etiquette »
End Sub
Si l’erreur Isam apparaît, c’est qu’il faut dans l’install Office cocher le truc qui va bien dans les données (de mémoire. Faut fouiller pour plus de détail).