OVH Cloud OVH Cloud

DAO MS-Access

9 réponses
Avatar
Dominique Crétel
Bonjour,

Je suis en train d'essayer d'accéder à une base de données Microsoft
Access avec Python.

Pour cela, j'ai trouvé un bout de code que j'ai adapté et qui plante !
Le voici :

-------------------------
import win32com.client

engine = win32com.client.Dispatch("DAO.DBEngine.35")

db = engine.OpenDatabase(r"C:\Temp\test.mdb")

rs = db.OpenRecordset("SELECT * FROM table1 WHERE col1 = 'XXXX'")

while not rs.EOF:
print "col1=", rs.Fields("col1").Value
rs.MoveNext()

-------------------------

et j'obtiens tous ces message d'erreurs ???

-------------------------
Traceback (most recent call last):
File "C:\Temp\testmdb.py", line 3, in ?
engine = win32com.client.Dispatch("DAO.DBEngine.35")
File "C:\Python24\Lib\site-packages\win32com\client\__init__.py",
line 95, in
Dispatch
dispatch, userName =
dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line
91, in _
GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line
79, in _
GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx,
pythoncom.II
D_IDispatch)
pywintypes.com_error: (-2147221005, 'Cha\xeene de classe incorrecte',
None, None
)
-------------------------

Qu'est-ce qui ne va pas dans la source ????

Merci

9 réponses

Avatar
bruno at modulix
Dominique Crétel wrote:
Bonjour,

Je suis en train d'essayer d'accéder à une base de données Microsoft
Access avec Python.

Pour cela, j'ai trouvé un bout de code que j'ai adapté et qui plante !
Le voici :

-------------------------
import win32com.client

engine = win32com.client.Dispatch("DAO.DBEngine.35")

(snip)


-------------------------

et j'obtiens tous ces message d'erreurs ???

-------------------------
Traceback (most recent call last):
File "C:Temptestmdb.py", line 3, in ?
engine = win32com.client.Dispatch("DAO.DBEngine.35")
File "C:Python24Libsite-packageswin32comclient__init__.py", line
95, in
Dispatch
(snip)

pywintypes.com_error: (-2147221005, 'Chaxeene de classe incorrecte',
None, None
)
-------------------------

Qu'est-ce qui ne va pas dans la source ????


A vue de nez, "DAO.DBEngine.35" ne semble pas lui plaire. Vérifie la doc
de Dispatch et la valeur que tu lui passe - éventuellement essaie une
connection COM depuis un autre environnement (VBA ou autre)...


--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
Dominique Crétel
A vue de nez, "DAO.DBEngine.35" ne semble pas lui plaire. Vérifie la doc
de Dispatch et la valeur que tu lui passe - éventuellement essaie une
connection COM depuis un autre environnement (VBA ou autre)...


Tu as raison, je viens de faire l'essai avec "DAO.DBEngine.36" et
maintenant ça marche !!!

Pourtant, une recherche dans "C:" des fichiers de la forme "msjet*" me
donne les fichiers : msjet35.dll et msjet40.dll dans C:WINNTsystem32.

Je ne vois donc pas où il a été trouver ce 36 ???

Avatar
William Dode
On 02-02-2006, Dominique Crétel wrote:
Bonjour,

Je suis en train d'essayer d'accéder à une base de données Microsoft
Access avec Python.


T'as http://adodbapi.sourceforge.net/ qui le fait très bien...

--
William Dodé - http://flibuste.net

Avatar
jean-michel bain-cornu
William Dode wrote:
On 02-02-2006, Dominique Crétel wrote:

Bonjour,

Je suis en train d'essayer d'accéder à une base de données Microsoft
Access avec Python.



T'as http://adodbapi.sourceforge.net/ qui le fait très bien...

Il y a aussi : http://phplens.com/lens/adodb/adodb-py-docs.htm

Je ne sais pas si c'est le même que celui indiqué par William, mais en
tout cas ça marche super-top avec mySQL et/ou SQLserver, et comme c'est
prévu aussi pour access (entre autres), ça te permet de faire un code
raisonnablement portable.
A+
jm
PS: je me rappelle avoir essayé aussi avec ODBC.
rePS: j'ai testé avec Python 2.3/2.4


Avatar
bruno at modulix
Dominique Crétel wrote:
A vue de nez, "DAO.DBEngine.35" ne semble pas lui plaire. Vérifie la doc
de Dispatch et la valeur que tu lui passe - éventuellement essaie une
connection COM depuis un autre environnement (VBA ou autre)...



Tu as raison, je viens de faire l'essai avec "DAO.DBEngine.36" et
maintenant ça marche !!!

Pourtant, une recherche dans "C:" des fichiers de la forme "msjet*" me
donne les fichiers : msjet35.dll et msjet40.dll dans C:WINNTsystem32.

Je ne vois donc pas où il a été trouver ce 36 ???



Sur l'air du générique d'une série chère au neuneu qui occupe
actuellement la maison blanche:

"Windows, tes DLLs impitoyaaables !"

Bon, ok, c'est pas encore vendredi...
--> []

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"


Avatar
Michel Claveau
Bonsoir !

Je ne vois donc pas où il a été trouver ce 36 ???


Avec PythonWin, il y a deux outils très intéressants, pour trouver ce
genre d'information :
- COM Browser ;
- COM Makepy utilitie.

Ce dernier génère un (gros) script Python, qui wrappe la plupart des
méthodes et objets d'un composant COM.
Dans certains cas, c'est même mieux que la doc originale du produit.

--
@-salutations

Michel Claveau

Avatar
Dominique Crétel
merci, mais comme le « Sujet » ne l'indique pas (mes doigts on glissés),
je cherche une solution ADO (et non DAO !)
Avatar
jean-michel bain-cornu
Dominique Crétel wrote:
merci, mais comme le « Sujet » ne l'indique pas (mes doigts on glissés),
je cherche une solution ADO (et non DAO !)
Je ne m'étais jamais rendu compte que c'étaient 2 trucs différents.

Tout ça pour gérer des données ; on s'éclate chez Microsoft...

Avatar
bruno at modulix
jean-michel bain-cornu wrote:
Dominique Crétel wrote:

merci, mais comme le « Sujet » ne l'indique pas (mes doigts on
glissés), je cherche une solution ADO (et non DAO !)


Je ne m'étais jamais rendu compte que c'étaient 2 trucs différents.
Tout ça pour gérer des données ; on s'éclate chez Microsoft...


Faut bien avoir quelque chose à vendre...

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"