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

Messages postés
38
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
12 août 2005
- - Dernière réponse : cs_CanisLupus
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
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...
Afficher la suite 

8 réponses

Messages postés
81
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
22 juillet 2007
0
Merci
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.
Messages postés
38
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
12 août 2005
0
Merci
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?
Messages postés
5
Date d'inscription
lundi 21 janvier 2002
Statut
Membre
Dernière intervention
10 août 2005
0
Merci
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 !!
Messages postés
81
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
22 juillet 2007
0
Merci
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.
Messages postés
38
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
12 août 2005
0
Merci
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.)
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
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 !?
Messages postés
38
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
12 août 2005
0
Merci
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?
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
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 !?