Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Versione di un file MDB

Mi servirebbe conoscere da codice la versione di un file MDB dato il
percorso e il nome del file stesso.
Qui c'è un (quasi) ottimo esempio per fare la cosa con DAO:
http://tinyurl.com/2vhse
Purtroppo, se chiamato più volte e in presenza di un'istanza di Access,
comincia a dare diversi problemi nella fase di creazione del workspace
(applicazione disconnessa?)
Qualcuno conosce modi alternativi?
termoPilucco

 Qualcuno conosce modi alternativi?
Vedi sopra e vedi ES... (Occhio, mai creato un WorkSpace in vita mia...)

 Version, non AccessVersion
Thanks, ho scoperto perchè il codice che ho indicato mi dava errore quando
girava insieme ad un istanza di Access:
l'istruzione
Set wrk = DBEngine.CreateWorkspace("CheckVersion", _
                             "Admin", vbNullString, dbUseJet)
va modificata in
Set wrk = DAO.DBEngine.CreateWorkspace("CheckVersion", _
                             "Admin", vbNullString, dbUseJet)
perchè DBEngine è membro sia di DAO che di ACCESS e io nei riferimenti avevo
sia uno che l'altro.
termoPilucco

> Version, non AccessVersion
Noto che un database versione 97 riparato e compattato con la (DAO)
CompactDatabase e dbVersion40 riporta correttamente la Version a "4.0", ma
la Properties.AccessVersion resta a "07.53", come quella di un nativo 97...

la Properties.AccessVersion resta a "07.53", come quella di un nativo 97...
hummm, quindi hai un DB formato 2000 (ottenuto da un 97 via codice) che però
risulta avere come version quella di un 97...
Forse è proprio da questo che nasce il bug che ti dicevo nell'altro thread
riguardante la CompactDatabase di Access.
termoPilucco

 termoPilucco

"Lupo"  ha scritto:
[circa conversioni Acces97 --> Access 2000]
Hmm... ho fatto una prova:
Dim db As DAO.Database
Set db = DBEngine(0).OpenDatabase(App.Path & "\test97.mdb")
Debug.Print "JET: " & db.Version & " version: " &
Val(db.Properties("AccessVersion"))
db.Close
Set db = Nothing
DBEngine.CompactDatabase App.Path & "\test97.mdb", _
 App.Path & "\test2000.mdb", _
 dbLangGeneral, dbVersion40, dbLangGeneral
Set db = DBEngine(0).OpenDatabase(App.Path & "\test2000.mdb")
Debug.Print "JET: " & db.Version & " version: " &
Val(db.Properties("AccessVersion"))
db.Close
Set db = Nothing
End Sub
Come dici tu,
Il DB originale 97 ha le caratteristiche JET: 3.0 version: 7,53
mentre quello "convertito" in formato 2000 ha JET: 4.0 version: 7,53
Quindi Version sembra dare l'informazione corretta mentre AccessVersion no.
Quello che invece dico io è che, proprio per il fatto che
db.Properties("AccessVersion") è sbagliato, Access stesso si "confonde":
infatti se apro il DB test2000.mdb con Access 97 ottengo, come atteso,
"formato non riconosciuto".
Se lo apro con Access2000 ottengo "il db è stato creato con una versione
precedente di Access".
Ma fra Access97 e 2000 non ci sono versioni intermedie.
Se lo apro con Access2002 ottengo lo stesso messaggio del 2000.
Se forzo l'apertura senza conversione con Access 2002 viene riportata la
versione del DB (secondo Access 2002): 2000
In pratica sembra che la cosa confonda un po' tutti i motori di Access ma
non JET (infatti da codice l'acceso ai dati funziona correttamente).
termoPilucco

  ma non JET (infatti da codice l'acceso ai dati funziona correttamente).
Ma lol, era come pensavo:
Access stesso si confonde perchč testa il valore Properties("AccessVersion")
:)
essendo in lettura/scrittura l'ho impostato 'di forza' alla versione
corretta cosě:
db.Properties("AccessVersion")="08.50"
Adesso Access 2000 e 2002 lo aprono senza problemi.
termoPilucco, cin cin

 essendo in lettura/scrittura
ecco, ci stavo pensando alla possibilità di scriverla. Bravo!

[Lupo = 
circa_LupoOrm...@libero.it
 in
c1hukv$1irmld$
1...@ID-174464.news.uni-berlin.de
] ha scritto:
Robe da matti, non ho cambiato niente, ma i database creati con ESP0DAMA
(uso in ogni caso DAO e la CreateDatabase) oggi non espongono più la
Properties("AccessVersion")... I database che già avevo (pur creati con
ESP0DAMA), sì... :-(

[Lupo = 
circa_LupoOrm...@libero.it
 in
c1i2ej$1iod83$
1...@ID-174464.news.uni-berlin.de
] ha scritto:

Volevo inserire in ESP0DAMA la possibilità di assegnare anche la
AccessVersion...
Ho fatto delle prove, giusto per escludere qualche problema in ESP0DAMA:
-Ho creato un database con il mio applicativo (sempre DAO)
-Ho creato un database con VisData (vers.5 con DAO 3.6), sia 97 che 2000
In entrambi i casi, la Properties("AccessVersion") non è esposta (nemmeno
nella finestra delle espressioni)
-Ho creato un database con MsAccess97
La AccessVersion è disponibile...
Ora pare evidente la "stranezza" del post precedente (evidentemente quel
database di prova l'avevo creato con Accss) e altrettanto evidente che la
proprietà AccessVersion è _aggiunta_ all'insieme delle Properties solo da
MsAccess.
Fermo restando che la proprietà, se disponibile, appare in
lettura/scrittura, com'è possibile aggiungere un elemento a un insieme
(presumo "proprietario" di DAO e/o Jet)?

 (presumo "proprietario" di DAO e/o Jet)?
Questa è un'altra bella domanda :)
Veloce veloce ho trovato:
db.Properties.Append db.CreateProperty("pippo", 10, "ciao")
ma non funziona bene (10 dovrebbe stare per 'testo') ma viene salvato uno 0
e non "ciao"
termoPilucco

 uno 0 e non "ciao"
Ah no, funziona... ero io che avevo lasciato un val di troppo...
termoPilucco

[termoPilucco = 
circa_ter...@hotmail.com
 in
c1iclo$1hfs59$
1...@ID-188026.news.uni-berlin.de
] ha scritto:

Bingo!
Molte grazie.
Ho modificato ESP0DAMA e inviato al WM del SC.