ODBC - VB/VBA/VBS - Programmation
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)
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
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.
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.
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
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...
Marsh Posté le 13-11-2003 à 16:02:21
tu pourrais activer la trace du connecteur ODBC pour savoir quel appel a échoué exactement ??
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
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