OVH Cloud OVH Cloud

Création d'une base compatible Access

7 réponses
Avatar
Gloops
Bonjour tout le monde,

Je souhaite créer sous VB6 une base qui puisse être lue sous Access 95.

J'ai fait ça avec DAO 3.51, avec CreateDatabase et le reste.

Une fois que la base a été ouverte par Access, elle est reconnue comme
une base Access, tout baigne.

Le problème, c'est si avec Access je l'ouvre la première fois en lecture
seule : le type de base n'est pas reconnu. Il faut l'ouvrir une fois
avec modification autorisée, et là ce qu'il faut est ajouté. Il y a bien
deux propriétés de plus indiquant le type, mais je soupçonne que la
simple création des propriétés ne suffira pas. ça serait quand même bien
que dès la création sous VB6, la base puisse avoir le type voulu.

Si quelqu'un peut me sortir ça d'un chapeau, ça risque de m'économiser
un paquet d'heures de recherche.

Merci.

7 réponses

Avatar
parci
On Sun, 27 Nov 2005 20:34:52 +0100, Gloops wrote:

Bonjour tout le monde,

Je souhaite créer sous VB6 une base qui puisse être lue sous Access 95.

J'ai fait ça avec DAO 3.51, avec CreateDatabase et le reste.

Une fois que la base a été ouverte par Access, elle est reconnue comme
une base Access, tout baigne.

Le problème, c'est si avec Access je l'ouvre la première fois en lecture
seule : le type de base n'est pas reconnu. Il faut l'ouvrir une fois
avec modification autorisée, et là ce qu'il faut est ajouté. Il y a bien
deux propriétés de plus indiquant le type, mais je soupçonne que la
simple création des propriétés ne suffira pas. ça serait quand même bien
que dès la création sous VB6, la base puisse avoir le type voulu.



Avec ADOX, on peut jouer sur le paramètre Jet OLEDB:Engine Type pour
créer une base Access au format 95, 97 ou 2000 (valeurs respectives 3,
4 et 5).

Avec DAO, j'ai l'impression que le paramètres options de
CreateDatabase permet la même chose, dbVersion30 pour une base Access
95 (si je ne me trompe pas).

Je n'utilise pas DAO et n'ai pas Access 95 pour tester, mais avec
ADOX, ça donnerait :

Sub CreateAccessDB95(maBase As String)

Dim cat As New ADOX.Catalog
Dim sConnect As String

sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;"
sConnect = sConnect & "Data Source=" & maBase & ";"
sConnect = sConnect & "Jet OLEDB:Engine Type=3;"

cat.Create sConnect

End Sub
Avatar
Gloops
Eh bien merci, c'était bien essayé, hélas j'obtiens le même résultat, je
le crains. Bien entendu, avec DAO j'avais essayé toutes les valeurs
proposées du paramètre Option.

Bon, peut-être va-t-il falloir que j'aille dépioter les tables système,
pour voir si en initialisant les bonnes valeurs là-dedans ça permet de
donner à la base le type Access 95.

Dommage, sur le papier ça paraissait bien.

C'est vrai qu'il y a une autre méthode, c'est de lancer Access pour
qu'il crée la base, mais enfin bon, ça donne un peu l'impression de
tricher ...
____________________________________
parci a écrit, le 28/11/2005 21:39 :
On Sun, 27 Nov 2005 20:34:52 +0100, Gloops wrote:
Avec ADOX, on peut jouer sur le paramètre Jet OLEDB:Engine Type pour
créer une base Access au format 95, 97 ou 2000 (valeurs respectives 3,
4 et 5).

Avec DAO, j'ai l'impression que le paramètres options de
CreateDatabase permet la même chose, dbVersion30 pour une base Access
95 (si je ne me trompe pas).

Je n'utilise pas DAO et n'ai pas Access 95 pour tester, mais avec
ADOX, ça donnerait :

Sub CreateAccessDB95(maBase As String)

Dim cat As New ADOX.Catalog
Dim sConnect As String

sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;"
sConnect = sConnect & "Data Source=" & maBase & ";"
sConnect = sConnect & "Jet OLEDB:Engine Type=3;"

cat.Create sConnect

End Sub



Avatar
Gloops
Au fait, il existe moultes versions d'ADO.
Crois-tu qu'en les essayant toutes j'ai des chances de tomber sur une
qui fera ça mieux ?

Gloops a écrit, le 29/11/2005 17:59 :

Eh bien merci, c'était bien essayé, hélas j'obtiens le même résultat, je
le crains. Bien entendu, avec DAO j'avais essayé toutes les valeurs
proposées du paramètre Option.

Bon, peut-être va-t-il falloir que j'aille dépioter les tables système,
pour voir si en initialisant les bonnes valeurs là-dedans ça permet de
donner à la base le type Access 95.

Dommage, sur le papier ça paraissait bien.

C'est vrai qu'il y a une autre méthode, c'est de lancer Access pour
qu'il crée la base, mais enfin bon, ça donne un peu l'impression de
tricher ...


Avatar
parci
On Tue, 29 Nov 2005 18:23:43 +0100, Gloops wrote:

Au fait, il existe moultes versions d'ADO.
Crois-tu qu'en les essayant toutes j'ai des chances de tomber sur une
qui fera ça mieux ?



Je ne sais pas. Mais puisque tu utilises DAO, tu pourrais essayer avec
la version Microsoft DAO 2.5/.3.0 Compatibility.

Ceci dit je ne crois pas que ça fonctionnera mieux car d'après MSDN :
"Databases created in Microsoft Access 97 and Microsoft Access 95 have
the same file format. Therefore, the Version property of a Database
object returns 3.0 for databases created in or converted to either
Microsoft Access 97 or Microsoft Access 95."

Eh bien merci, c'était bien essayé, hélas j'obtiens le même résultat, je
le crains. Bien entendu, avec DAO j'avais essayé toutes les valeurs
proposées du paramètre Option.

Bon, peut-être va-t-il falloir que j'aille dépioter les tables système,
pour voir si en initialisant les bonnes valeurs là-dedans ça permet de
donner à la base le type Access 95.

Dommage, sur le papier ça paraissait bien.

C'est vrai qu'il y a une autre méthode, c'est de lancer Access pour
qu'il crée la base, mais enfin bon, ça donne un peu l'impression de
tricher ...





Ca me semble le plus simple ici puisque les formats des bases de
données (version 95 et 97) sont identiques, la distinction est
spécifique à Access.
Avatar
Gloops
parci a écrit, le 29/11/2005 21:49 :

Ceci dit je ne crois pas que ça fonctionnera mieux car d'après MSDN :
"Databases created in Microsoft Access 97 and Microsoft Access 95 have
the same file format.



Oh, ça, d'expérience, je peux te dire que c'est du pipeau.
Si tu as créé une base sous Access 95, en l'ouvrant sous Access 97 tu as
le choix entre valider et convertir. Si la base contient des modules, la
conversion ne peut se faire que si le code respecte certaines
contraintes, ce qui implique quelques semaines de développement
complémentaire si on en a pris conscience tardivement. Pour bien faire,
quand on débute il faut ouvrir sa base chaque jour sous Access 97 (le
développement se faisant toujours dans la version la plus ancienne),
histoire de voir si une erreur est signalée à l'ouverture, afin de
corriger sa syntaxe. ça permet d'en tenir compte en développant les
autres modules.

Si tu as créé une base sous Access 97, tu ne peux carrément pas l'ouvrir
sous Access 95. Je crois bien qu'Access 2000 permet d'enregistrer sous
les formats précédents, mais ça fait deux ans que je n'y ai plus touché.

Il y a aussi des contraintes de développement pour pouvoir ouvrir la
base sous Access 2000, mais c'est plus vite torché que pour passer de 95
à 97.

Therefore, the Version property of a Database
object returns 3.0 for databases created in or converted to either
Microsoft Access 97 or Microsoft Access 95."



Voilà probablement l'explication : on croit créer une base d'une
version, et on la crée dans une autre version.
Avatar
parci
On Wed, 30 Nov 2005 06:58:53 +0100, Gloops wrote:

parci a écrit, le 29/11/2005 21:49 :

Ceci dit je ne crois pas que ça fonctionnera mieux car d'après MSDN :
"Databases created in Microsoft Access 97 and Microsoft Access 95 have
the same file format.



Oh, ça, d'expérience, je peux te dire que c'est du pipeau.



Je crois que ça signifie que bien que les formats de fichiers soient
identiques, il y des différences entre une base Access 95 et une base
Access 97 qui sont spécifiques et crées par Access lui même (objets
différents etc ...). Ce qui ne t'arrange pas vraiment.
Avatar
Gloops
Comme tu dis.
Pour épuiser la question on dirait qu'il faudrait afficher tout ce qu'il
y a dans les tables système, et probablement se gratter la tête un moment.

Un jour, peut-être.
____________________________________
parci a écrit, le 30/11/2005 22:19 :

Je crois que ça signifie que bien que les formats de fichiers soient
identiques, il y des différences entre une base Access 95 et une base
Access 97 qui sont spécifiques et crées par Access lui même (objets
différents etc ...). Ce qui ne t'arrange pas vraiment.