Database access 2007 con Office 365 64 bit

di il
5 risposte

Database access 2007 con Office 365 64 bit

Buongiorno a tutti,
Ho un DB sviluppato con access 2007 a 32 bit e che adesso viene utilizzato anche da colleghi con office 365 a 64 bit.
Incontro però il problema delle API che a 32 bit funzionano e a 64 bit no.
Premetto che non sono un gran conoscitore dei fondamenti teorici delle API di solito mi limito a inglobarle all'interno del mio codice alla bisogna.
Leggendo in rete comunque mi sembra di aver capito che per alcune API sia sufficiente inserire la dicitura PtrSafe mentre per altre sia necessario anche cambiare la dichiarazione di alcune variabili.
In effetti per quanto ho sperimentato sul PC di un mio collega, alcune API, premettendo la dicitura PtrSafe, sembrano funzionare ma non le ho ancora testate tutte.
Se provo ad inserire la dicitura PtrSafe sul mio PC a 32 bit il codice invece mi restituisce un errore immediato di sintassi perchè non riconosce PtrSafe come parola chiave.
Sembra quindi che non sia possibile avere una sola versione del DB di gestione dati che possa funzionare sia per le versioni a 32 che a 64 bit. è corretto?
Se così fosse non so quanto mi converrebbe cercare di riscrivere il codice perchè funzioni a 64 bit.
Come soluzione alternativa posso installare un runtime a 32bit su un PC con office 365 a 64 bit e forzare l'apertura del DB a mezzo runtime?
Ovviamente se esistesse qualche altra soluzione percorribile sono aperto ad ogni tipo di suggerimento
Ringrazio in anticipo per qualunque contributo
Andrea

5 Risposte

  • Re: Database access 2007 con Office 365 64 bit

    Se l'applicativo deve girare su ENTRAMBI, non devi mettere il PTRSAFE e basta... ma serve scrivere le chiamate con la compilazione condizionale, e conseguentemente poi COMPILARE a 32 o 64BIT...
    Non so di che API stai parlando, 9 su 10 di chi usa Access non le conosce e spesso le usa in modo non necessario... ma se si usano io ritengo sia indispensabile conoscerle BENE
    La dove ci sono ad esempio riferimenti a Variabili che da Long diventano LongPtr devi modificare il codice in tutte le parti che lo richiedono, un tipico esempio è l'estrapolazione dell'hWnd delle finestre di Windows... ecc...!
    La cosa NON è affatto banale come pensi e a seconda di quali dichiarazioni hai usato potrebbe essere necessario apportare un bel nuemro di modifiche.
    Chiaramente non posso essere più preciso, non sapendo di cosa si stia parlando...
  • Re: Database access 2007 con Office 365 64 bit

    Ciao,
    Grazie per la risposta.
    Potresti dirmi dove posso approfondire il discorso della chiamata con compilazione condizionale?
    Attualmente io ho una dichiarazione public declare delle funzioni API e poi le chiamo dalle routine associate ad eventi delle maschere.
    Non sapevo di poter dichiarare le funzioni condizionandole a qualcosa.
    Come funzionerebbe? All'apertura del DB dovrei prevedere un evento che dichiara l'una o l'altra API?
    Andrea
  • Re: Database access 2007 con Office 365 64 bit

    Ciao,
    Mi sono reso conto che due punti della tua risposta non mi erano chiari
    scrivere le chiamate con la compilazione condizionale
    COMPILARE a 32 o 64BIT
    Considera che non ho mai rilasciato DB compilati ma DB normali con la struttura protetta attraverso il richiamo ad una maschera nascosta.
    Comunque dopo un'attenta "esegesi" ho capito che mi mancava qualche tassello per capire la tua proposta.
    Ho cercato di documentarmi un pò e sono arrivato alla seguente conclusione.

    Dovrei dichiarare le API nidificandole all'interno di un'istruzione if else end. Le dovrei comunque lasciare nel modulo ad hoc in cui si trovano.
    Ho trovato in rete le costanti da testare per spiegare al programma quale dichiarazione compilare:
       If VBA7 then 
    '  Code is running in the new VBA7 editor 
         #If Win64 then 
         '  Code is running in 64-bit version of Microsoft Office 
         #Else 
         '  Code is running in 32-bit version of Microsoft Office 
         #End If 
    #Else 
    ' Code is running in VBA version 6 or earlier 
    #End If 
          
    Naturalmente dovrei indagare le API che sfrutto per individuarne le versioni a 64 bit.
    Poi dovrei compilare il DB in due versioni a 32 e a 64 bit una da distribuire ai colleghi con office 365 e una da distribuire agli altri.
    Sono sulla strada giusta?

    A livello pratico però mi pongo due problemi
    1) quando ho provato a scrivere in un modulo di access 2007 una declare con ptrsafe il codice mi ha dato errore ( la dichiarazione è diventata rossa). Se inserisco la declare all'interno di una if potrebbe non darmi errore?
    2) per testare il funzionamento del codice a 64 bit ho per forza bisogno di un office a 64 bit o posso installare un run time access 64 bit sul mio PC con access 2007?

    Grazie ancora
    Andrea
  • Re: Database access 2007 con Office 365 64 bit

    A2007 non supporta il PTRSAFE... se non ricordo male da VBA7 o A2010...

    Attenzione alla Formattazione condizionale, non interessa solo le API, ma anche i Type, ed anche le dichiarazioni delle Funzioni o variabili nel codice...!

    Es:
    
    #if VBA7 then
       Declare PtrSafe Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As LongPtr) As Long
    #else
       Declare Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As Long) As Long
    #end if
    
    Public Function NomeFunction()
    #if VBA7 then
       Dim mHwnd As LongPtr
    #else
       Dim mHwnd As Long
    #end if
    mHwnd = .... valore recuperato
    CloseWindow (mHwnd)
    ....
    End Function
    Oppure i messaggi di Windows
    
    #if VBA7 then
        Type MSG
            hwnd As LongPtr
            message As Long
            wParam As LongPtr
            lParam As LongPtr
            time As Long
            pt As POINTAPI
        End Type
    #else
        Type MSG
            hwnd As Long
            message As Long
            wParam As Long
            lParam As Long
            time As Long
            pt As POINTAPI
        End Type
    #end if
    ecc...

    Hai bisogno del 64Bit... ovviamente si altrimenti chi lo testa quel codice..?
  • Re: Database access 2007 con Office 365 64 bit

    Ciao Alex,
    ti ringrazio per gli spunti molto interessanti, purtroppo per ora non credo di riuscire ad utilizzare la compilazione condizionale.
    La mia versione di access non riconosce il ptrsafe
    Non ho un ambiente 64 bit su cui testare
    Quando cambieranno le condizioni mi ricorderò dei tuoi suggerimenti.

    Per ora mi sembra di aver tamponato installando il runtime di access 2007 sui sitemi a 64bit.

    Purtoppo sto sperimentando un altro problema con il DB che dovrebbe essere utilizzato dai colleghi di fuori sede ma andrei off topic. Aprirò un altra discussione ad hoc
Devi accedere o registrarti per scrivere nel forum
5 risposte