Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
ciao Michele,
ti sconsigliavo l'invocazione delle Api perché da A2010 in poi con l'introduzione di office a 64bit la loro invocazione che è di suo già molto complicata diventa estremamente complicata.
Il FileDialog è la soluzione indipendentemente da Office 32 o 64 bit.
Per sfruttare le Api con office 64 bit non è sempre e solo necessario modificare la dichiarazione, ma spesso e volentieri oltre che a sfruttare la compilazione condizionale per rendere fruibile il database con su più piattaforme devi correttamente dichiarare le variabili.
L'argomento è molto vasto e complicato, mi fermo qua.
Se vuoi utilizzare la demo del ns grande Giorgio apporta le seguenti modifiche.
Estrai la dichiarazione Api impostale in un modulo standard :
Option Compare Database
Option Explicit
#If Win64 Then
Public Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public Type OPENFILENAME
lStructSize As Long
hwndOwner As LongPtr
hInstance As LongPtr
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 LongPtr
lpTemplateName As String
End Type
#Else
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public 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
#End If
modifica questa parte nella classe cls_cmdDialog
#If Win64 Then
OpenFile.nMaxFile = LenB(OpenFile.lpstrFile) - 1
OpenFile.lStructSize = LenB(OpenFile)
#Else
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lStructSize = Len(OpenFile)
#End If
e questa nella form abilitaDisabilita:
CmDlg.FiltroFiles = _
"Database files (*.mdb, *.mde, *.mda, *.accdb)|" & _
"*.mdb;*.mde;*.mda;*.accdb|"
ti ho convito è il fileDialog è molto meglio....?
Ora a scanso di ulteriori problemi di metto a disposizione le modifiche qui.
Ovviamente ho testato sia su office a 64 bit che a 32 bit da me tutto ok.
Facci sapere.
Ciao, Sandro.