ODBC

ODBC - VB/VBA/VBS - Programmation

Marsh Posté le 07-11-2003 à 16:21:46    

Salut
 
J?ai developpé un module qui se connecte à une base access  dans un espace Microsoft Jet.
La connection s?etablit de la facon suivante :
 
Set Wrkjet = CreateWorkspace("", "Admin", "", dbUseJet)
Set GlobalDB = Wrkjet.OpenDatabase(Cheminbase & "/" & Nombase)
 
Je souhaiterais maintenant travailler avec une base MySQL.
 
J?ai donc utilisé le code suivant pour travailler dans un espace ODBC :
 
Set Wrkjet = CreateWorkspace("", "Admin", "", dbUseODBC)
 Set GlobalDB = Wrkjet.OpenDatabase(database, _
        dbDriverNoPrompt, , _
        "ODBC;DATABASE=" & database & ";UID=" & UID & ";PWD=;DSN=" & DSN & "" )
 
J?arrive bien à me connecter à la base et à executer des requètes mais j?ai quelques problèmes. J?arrive à les contourner mais malheureusement, il faut que je modifie le code. Je voulais savoir si il y avait pas un autre moyen.
 
 
Je debute dans le domaine et j?espère que vous pourrez m?aider :
 
 
1°/ J?utilisait la propriété Recordcount pour savoir si la requete avait des resultats or depuis que j?utilise la liaison odbc, Recordcount vaut toujours ?1. Est ce que c?est normal ?
 
2°/ Avec Microsoft Jet, les requetes de MAJ pouvait  se faire de cette  facon :
 
Set Rec=GlobalDB.openRecordset(«Table »)
Rec.Edit
Rec!Champs1=val1
Rec !Champs2=Val2
Rec.update
Rec.close
 
Avec ODBC, j?ai une erreur du type l?objet n?est pas disponible en Ecriture.
Je dois faire de cette facon :
 
Set Rec=GlobalDB.openRecordset(«Update Table Set ?? »)
 
merci

Reply

Marsh Posté le 07-11-2003 à 16:21:46   

Reply

Marsh Posté le 10-11-2003 à 09:04:40    

Pas d'idée ???

Reply

Marsh Posté le 10-11-2003 à 10:39:14    

j'ai aucune expérience Jet/ODBC et je serais plutôt pour l'emploi d'ADO qui est la seule API qui va survivre à long terme (tu emploies DAO qui est spécifique Access mais qui est progressivement abandonné depuis Access 2000). Le portage n'est pas très difficile car DAO et ADO se ressemblent pas mal au point de vue interface (c'est ce qui se cache derrière qui diffère un peu)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 10-11-2003 à 14:22:23    

Merci pour les infos.

Reply

Marsh Posté le 10-11-2003 à 16:04:57    

J'ai trouvé quelque chose sur un forum concernant l'eereur avec les edit (erreur 3027 "Mise à jour impossible. La base de données ou l'objet est en lecture seule." ) : . L'erreur pourrait venir d'un problème de configuration de la source ODBC. Est ce qu'il y a une option à cocher ou quelque chose à mettre pour lui indiquer que la base est en lecture/ecriture

Reply

Marsh Posté le 10-11-2003 à 17:36:45    

Bon vu que t'arrives à lancer un update en SQL, c'est pas un problème de source ODBC ni de connexion, plutôt la manière dont tu ouvres ton recordset.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 12-11-2003 à 19:23:22    

ton recordset n'est pas en read only par hasard ?

Reply

Marsh Posté le 13-11-2003 à 09:07:37    

Si je met :  
Set rs = conn.OpenRecordset("my_dao", dbOpenDynamic, dbExecDirect, dbOptimistic)
ca me met encore l'erreur. Je pense pas que c'est ca.
Merci quand meme.

Reply

Marsh Posté le 13-11-2003 à 12:39:12    

Bonjour,
 
je pencherais pour la manière dont tu attaques la base. Ta chaine de connexion ne contient pas de driver spécifique pour parler à la base (style "MS Access driver" ). Je ne sais pas si pour MySQL ca existe...
 
Par contre, j'ai une petite expérience comme ça avec une Base de Données à la c.. dont je n'avais pas le driver pour ouvrir en ADO. ca me faisait la même erreur -1 sur l'utilisation de recordcount. c'est en modifiant ma chaine de connexion que j'avais résolu le problème.
 
ça t'aidera peut-être...
 
bon courage

Reply

Marsh Posté le 13-11-2003 à 15:20:06    

Merci pour votre aide.
J'ai enlevé le dbUseODBC au moment de la création du Workspace et ca marche ! Enfin presque.
Je fais des ecritures et certaines fois ca plante et j'ai le message : ODBC L'appel a echoué. Err 3146
Je sais pas pourquoi.Si vous comprenez...

Reply

Marsh Posté le 13-11-2003 à 15:20:06   

Reply

Marsh Posté le 13-11-2003 à 16:02:21    

tu pourrais activer la trace du connecteur ODBC pour savoir quel appel a échoué exactement ??

Reply

Marsh Posté le 13-11-2003 à 18:14:08    

essaye de creer un fichier udl et tu ensuites
rs.ConnectionString = "file name=" & App.Path & "maConnection.udl" , en plus comme ca t'as plus a rentrer ds le code pour changer la connection :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed