Newsgroup: it.comp.appl.access
Titolo: ricavare la versione di access

Volevo chiedere se è possibile ricavare la ver di access da codice, questo
mi serve per quei clienti un pò " inbranati " che non mi riescono mai a dire
che ver hanno installato per potergli dare l'aggiornamento del db.
Saluti da Max .


:-)
io gli faccio aprire About box di access, e gli faccio leggere quello che c'e'
scritto :-)
Cmq, con questo codice vai a leggere la chiave di registro
'Access.Database\CurVer'.
la richiami in questo modo
 fReturnRegKeyValue(HKEY_CLASSES_ROOT, "Access.Database\CurVer", "")
la funzione ritorna (per A97)
 Access.Application.8
che puoi facilmente gestire.
Attenzione, non so come viene gestita la doppia installazione (97/2000), cioe'
non so come sono le chiavi, magari vacci a guardare.
'********Code Start**************
'This code was originally written by Terry Kreft
' and Dev Ashish.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Dev Ashish & Terry Kreft
'
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003
Private Const HKEY_PERFORMANCE_DATA = &H80000004
Private Const HKEY_CURRENT_CONFIG = &H80000005
Private Const HKEY_DYN_DATA = &H80000006
Private Const STANDARD_RIGHTS_READ = &H20000
Private Const KEY_QUERY_VALUE = &H1&
Private Const KEY_ENUMERATE_SUB_KEYS = &H8&
Private Const KEY_NOTIFY = &H10&
Private Const SYNCHRONIZE = &H100000
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
   KEY_QUERY_VALUE Or _
   KEY_ENUMERATE_SUB_KEYS Or _
   KEY_NOTIFY) And _
   (Not SYNCHRONIZE))
Private Const MAXLEN = 256
Private Const ERROR_SUCCESS = &H0&
Private Const REG_NONE = 0
Private Const REG_SZ = 1
Private Const REG_EXPAND_SZ = 2
Private Const REG_BINARY = 3
Private Const REG_DWORD = 4
Private Const REG_DWORD_LITTLE_ENDIAN = 4
Private Const REG_DWORD_BIG_ENDIAN = 5
Private Const REG_LINK = 6
Private Const REG_MULTI_SZ = 7
Private Const REG_RESOURCE_LIST = 8
Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Declare Function apiRegOpenKeyEx Lib "advapi32.dll" _
        Alias "RegOpenKeyExA" (ByVal hKey As Long, _
        ByVal lpSubKey As String, ByVal ulOptions As Long, _
        ByVal samDesired As Long, ByRef phkResult As Long) _
        As Long
Private Declare Function apiRegCloseKey Lib "advapi32.dll" _
        Alias "RegCloseKey" (ByVal hKey As Long) As Long
Private Declare Function apiRegQueryValueEx Lib "advapi32.dll" _
        Alias "RegQueryValueExA" (ByVal hKey As Long, _
        ByVal lpValueName As String, ByVal lpReserved As Long, _
        ByRef lpType As Long, lpData As Any, _
        ByRef lpcbData As Long) As Long
Private Declare Function apiRegQueryInfoKey Lib "advapi32.dll" _
        Alias "RegQueryInfoKeyA" (ByVal hKey As Long, _
        ByVal lpClass As String, ByRef lpcbClass As Long, _
        ByVal lpReserved As Long, ByRef lpcSubKeys As Long, _
        ByRef lpcbMaxSubKeyLen As Long, _
        ByRef lpcbMaxClassLen As Long, _
        ByRef lpcValues As Long, _
        ByRef lpcbMaxValueNameLen As Long, _
        ByRef lpcbMaxValueLen As Long, _
        ByRef lpcbSecurityDescriptor As Long, _
        ByRef lpftLastWriteTime As FILETIME) As Long
Function fReturnRegKeyValue(ByVal lngKeyToGet As Long, _
       ByVal strKeyName As String, _
       ByVal strValueName As String) _
       As String
Dim lnghKey As Long
Dim strClassName As String
Dim lngClassLen As Long
Dim lngReserved As Long
Dim lngSubKeys As Long
Dim lngMaxSubKeyLen As Long
Dim lngMaxClassLen As Long
Dim lngValues As Long
Dim lngMaxValueNameLen As Long
Dim lngMaxValueLen As Long
Dim lngSecurity As Long
Dim ftLastWrite As FILETIME
Dim lngType As Long
Dim lngData As Long
Dim lngTmp As Long
Dim strRet As String
Dim varRet As Variant
Dim lngRet As Long
 
    On Error GoTo fReturnRegKeyValue_Err
 
    'Open the key first
    lngTmp = apiRegOpenKeyEx(lngKeyToGet, _
                strKeyName, 0&, KEY_READ, lnghKey)
    'Are we ok?
    If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _
           lngTmp + vbObjectError
    lngReserved = 0&
    strClassName = String$(MAXLEN, 0):  lngClassLen = MAXLEN
    'Get boundary values
    lngTmp = apiRegQueryInfoKey(lnghKey, strClassName, _
        lngClassLen, lngReserved, lngSubKeys, lngMaxSubKeyLen, _
        lngMaxClassLen, lngValues, lngMaxValueNameLen, _
        lngMaxValueLen, lngSecurity, ftLastWrite)
    'How we doin?
    If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _
           lngTmp + vbObjectError
 
    'Now grab the value for the key
    strRet = String$(MAXLEN - 1, 0)
    lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _
                lngReserved, lngType, ByVal strRet, lngData)
    Select Case lngType
      Case REG_SZ
        lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _
                lngReserved, lngType, ByVal strRet, lngData)
        varRet = Left(strRet, lngData - 1)
      Case REG_DWORD
        lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _
                lngReserved, lngType, lngRet, lngData)
        varRet = lngRet
      Case REG_BINARY
        lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _
                lngReserved, lngType, ByVal strRet, lngData)
        varRet = Left(strRet, lngData)
    End Select
 
    'All quiet on the western front?
    If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _
           lngTmp + vbObjectError
fReturnRegKeyValue_Exit:
    fReturnRegKeyValue = varRet
    lngTmp = apiRegCloseKey(lnghKey)
    Exit Function
fReturnRegKeyValue_Err:
    varRet = "Error: Key or Value Not Found."
    Resume fReturnRegKeyValue_Exit
End Function
'********End code**************
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------

 ha scritto nel messaggio
news:91gju9$r15$1...@fe2.cs.interbusiness.it...

Con la funzione SysCmd (vedi help) e la costante 'AcSysCmdAccessVer' puoi
ottenere la versione...
Ciao.

 wrote in message
news:3A3DF852...@paperino.libero.it...

Un pochetto macchiavellico direi, prova SysCmd + <F1>
Bye, Ste

 ma mi restituisce sempre 7 sia su 97 che 2000.
Prova a rileggere con attenzione quello che ti ha scritto Sergio Mazza!
Riepilogo: usa la funzione SysCmd (e vai a vedere sull'help premendo sulla
tastiera F1) in combinazione con la costante AcSysCmdAccessVer.
Naturalmente, come dice la parola, la costante AcSysCmdAccessVer ha sempre
il valore (costante) 7, altrimenti che costante sarebbe...
Non farti prendere dalla fretta e dalla smania di provare andando a tentoni,
o, x lo -, fallo dopo aver dato una sbirciata sulla guida in linea. :-)
--
Silvio
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access

 --
Il problema č un'altro , č che io ci capisco molto poco e imparo piů
facilmente con un esempio, se ti va buttami un esempio che cosě capisco
meglio e piů in fretta. Saluti Max

 meglio e piů in fretta. Saluti Max
Caro mio, c'č poco da capire! Basta solo aver voglia di leggere!
Visto che non ci si riesce in altro modo, ti riporto un estratto dell'help:
Sintassi
ValoreRestituito = SysCmd(azione[, testo][, valore])
Argomento    azione
Descrizione
AcSysCmdAccessVer -> Restituisce il numero della versione di Microsoft
Access.
cioč, riportato nel tuo codice
Me!ver = SysCmd(AcSysCmdAccessVer)
oppure
Me!ver = SysCmd(7)
Dai... adesso lo puoi anche ammettere: non era difficile... ;-))
c'eri quasi... bastava leggere con attenzione e ... provare.
Ciao


 c'eri quasi... bastava leggere con attenzione e ... provare.
Mi sono perso quando leggendo  >>> ValoreRestituito = SysCmd(azione[,
testo][, valore]) non sapevo cosa dovevo indicare nei valori tra parentesi,
(azione ecc) e poi mi ero intestardito  che dovevo scrivere cosě Me!ver =
SysCmd.AcSysCmdAccessVer
e..... poi mi sono accorto di essere un incapace  cosě chiedo aiuto quŕ e mi
rendo conto che tutte le volte imparo qualche cosa. 1000 1000 grazie e
sinceri Auguri di Buone Feste. Max

 testo][, valore]) non sapevo cosa dovevo indicare nei valori tra
parentesi,
Poco male! I valori tra parentesi quadre [ ] sono opzionali.
