Modifier un champ d'une table contenu dans une BDD lorsque cette BDD est fermée

turlututuchapopointu Messages postés 38 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 12 août 2005 - 10 août 2005 à 15:30
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 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:

8 réponses

jhary69 Messages postés 81 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 22 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

A+

Christophe.
0
turlututuchapopointu Messages postés 38 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 12 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?
0
titto7 Messages postés 5 Date d'inscription lundi 21 janvier 2002 Statut Membre Dernière intervention 10 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 !!
0
jhary69 Messages postés 81 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 22 juillet 2007
10 août 2005 à 17:07
re,

petit exemple en DAO qui fait une requete sur une base Access :

Ajouter Microsoft DAO 3.6 (ou .5, ...) a tes references puis dans ta fonction

Dim db as DAO.Database
Dim rs as DAO.Recodset

Set db = OpenDatabase("TonFichierMdbAvecLeCheminComplet.mdb")

' Si select dans la base
Set rs = db.OpenRecordset("TA REQUETE SQL", <type d'ouverture souhaité>)

' Ensuite tu manipules le recordset pour acceder aux données de ta requete


' Si insert, update, delete on fait un execute au lieu de creer un recordset
db.Execute "TA REQUETE", dbFailOnError

Voila un petit exemple pour commencer. Pour les autres type de connections (ADO, ...) recherche des exemples sur ce forum !

A+

Christophe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
turlututuchapopointu Messages postés 38 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 12 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.)
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
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 !?
0
turlututuchapopointu Messages postés 38 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 12 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?
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
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

db.Execute ("UPDATE IllusTruc " & _
"SET Lien = '" & Me.txtAdresseAGraver.Value & "' & Mid(Lien, " & NbrCarac & ") " & _
"WHERE Lien LIKE '" & FileIllustrations & "*';")

db.Close
Set db = Nothing

End Sub

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 !?
0
Rejoignez-nous