Modifier un champ d'une table contenu dans une BDD lorsque cette BDD est fermée
turlututuchapopointu
Messages postés38Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention12 août 2005
-
10 août 2005 à 15:30
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 2006
-
10 août 2005 à 18:51
Bonjour,
Je voudrais savoir comment appliquer une requête sur une BDD fermée? Est-il nécessaire de l'ouvrir pour effectuer cette requête?
Merci d'avance du coup de main...
A voir également:
Modifier un champ d'une table contenu dans une BDD lorsque cette BDD est fermée
jhary69
Messages postés81Date d'inscriptionjeudi 29 juillet 2004StatutMembreDernière intervention22 juillet 2007 10 août 2005 à 16:10
salut,
pour ma part je te répondrais qu'il faut que ta BdD soit ouverte pour pouvoir faire une requete dessus.
Ca peut etre via ADO, DAO, ODBC, ... et de maniere totalement transparente pour l'utilisateur mais oui il faut ouvrir la BdD ... à moins d'aller ecrire directement dans le fichier BdD mais là c'est carrement une autre histoire
turlututuchapopointu
Messages postés38Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention12 août 2005 10 août 2005 à 16:26
Excuse mon niveau encore faible en VB mais je ne sais pas encore utiliser ces outils (ADO, DAO, ODBC).
Ca peut etre via ADO, DAO, ODBC, ... Comment tu fais ça?
et de maniere totalement transparente pour l'utilisateur mais oui il faut ouvrir la BdD ...et ça?
titto7
Messages postés5Date d'inscriptionlundi 21 janvier 2002StatutMembreDernière intervention10 août 2005 10 août 2005 à 16:47
slt,
tu programmes en ado lorsque tes declarations d'appel de ta base est automatique via les propriétés de ton ado (recordsource et connectionstring) et tu code en DAO lorsque tu declare "manuellement" la connection et les requetes.
et pr faire un appel de requete sur une base, il faut qu'elle soit obligatoirement ouverte puisque ta requete manipule des champs de ? ---> la base !!
turlututuchapopointu
Messages postés38Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention12 août 2005 10 août 2005 à 17:32
Comment fait-on pour ajouter une référence Microsoft DAO 3.6 à du code VBA d'une autre BDD?
(En fait, je suis en train de développer une BDD et je souhaite modifier l'autre BDD à partir de la première.)
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 10 août 2005 à 17:43
Salut, il y a une astuce :
en DAO il faut qu'une base, même bidon soit ouverte (pas testé en ADO mais c'est surement possible aussi puisque les ordres sont en sql).
'référence 'microsoft DAO xx.x .....' coché dans les références du projet
Dim rs As Recordset
Dim db As Database
Set db = OpenDatabase("c:\temp\bd1.mdb") 'ouverture de la base bidon
Ensuite, il faut savoir ce que tu veux faire.
Ouvrir un recordset dans une autre base ?
Set rs = db.OpenRecordset("SELECT * FROM table1 IN 'c:\temp\bd2.mdb'")
Ensuite tu opères les actions que tu veux sur ce recordset.
Mettre à jour un champ d'une table dans une autre base ?
db.Execute ("UPDATE table1 IN 'c:\temp\bd2.mdb' SET toto = 'xx' WHERE toto = 'bb'")
etc...
Avec ces exemples, la base (bd2.mdb) ne sera pas ouverte en tant qu'objet par VB mais par le moteur Access.
C'est donc une possiblité un peu compliquée. Pour ton cas, la méthode la plus simple est celle proposée par <jhary69>.
Enfin, c'est à toi de choisir.
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
turlututuchapopointu
Messages postés38Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention12 août 2005 10 août 2005 à 18:07
Ta réponse (CanisLupus) me plaît plus. Ouais, bon, je sais: pourquoi faire simple quand on peut faire compliqué?
Honnêtement, il ne suffit que de rajouter aux requêtes une précision sur le fichier .mdb.
J'ai tenté et ça a buggué. Normal quoi.
Pourtant j'ai bien mis la référence à DAO 3.6.
Je n'ai pas un message d'erreur normal avec un chiffre: au moment où je lance mon formulaire (dont le un bouton exécute notre affaire), j'ai un message du genre pas drôle, qui ne fourni aucune explication:
"L'expression sur chargement entrée comme paramètre de la propriété de type évènmenet est à l'origine d'une erreur. Type défini par l'utilisateur non défini"
Voilà mon code:
Private Sub ModifierAdresse(strAdresse As tring)
Dim rs As Recordset
Dim db As Database
Set db = OpenDatabase(strAdresse) 'ouverture de la base à corriger
'Ouvrir un recordset dans une autre base ?
Set rs = db.OpenRecordset("SELECT * FROM Illustrations IN '" & strAdresse & "'")
'Mettre à jour un champ d'une table dans une autre base
db.Execute ("UPDATE IllusTruc IN '" & strAdresse & "' " & _
"SET Lien = '" & Me.txtAdresseAGraver.Value & "' & Mid(Lien, " & NbrCarac & ") " & _
"WHERE Lien LIKE '" & FileIllustrations & "*';")
'"UPDATE table1 IN 'c:\temp\bd2.mdb' SET toto = 'xx' WHERE toto = 'bb'")
End Sub
Je pense que ça doit venir de Dim rs As Recordset et Dim db As Database. Malgré ma référence à DAO 3.6, il ne me manque rien?
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 10 août 2005 à 18:51
1 - Private Sub ModifierAdresse(strAdresse As tring) ??
c'est String et non tring
2 - strAdresse est bien le chemin complet de la base à modifier ?
3 - Comme j'ai dit plus haut la méthode la plus simple pour ton cas :
Private Sub ModifierAdresse(strAdresse As String)
Dim db As Database
Set db = OpenDatabase(strAdresse) 'ouverture de la base à corriger
4 - l'astuce que j'ai présentée précédemment suppose que tu as déjà une base d'ouverte par ton prog et que tu t'en sers pour atteindre d'autres bases sans créer de nouvel objet Database. Dans le cas présent, c'est inutile.
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?