Origine tables liées DAO/ADO [Résolu]

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 22 oct. 2004 à 21:35 - Dernière réponse :
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 25 oct. 2004 à 18:38
Salut le forum

Ca fait un moment que je n'ai pas posé de question alors en voici une à laquelle je n'ai pas trouvé de solution.

J'ai des bases ACCESS (ver : 97 par obligation de compatibilité) qui contiennent des liens vers des tables se situant dans d'autres bases.

CONTRAINTE : le chemin des bases d'origine des tables liées peut changer pour différentes causes (changement ou réorg des serveurs).
SOLUTION A LA CON : refaire à la mano tous les liens dans X bases. Impensable.
SOLUTION ACTUELLE : avec DAO on peut lire et modifier la propriété CONNECT d'une table liée en passant par les TABLEDEFS donc jusque là, pas de problème, on peut automatiser. Cool.

Le PROBLEME c'est la migration de DAO vers ADO !
Donc QUESTION : comment faire la même chose avec ADO ? hein ?

Un exemple qui fonctionne en DAO pour juste lister la chaine de connexion :

Sub cnx_DAO()
Dim db As Database
Dim tbl As TableDef

Set db = OpenDatabase("c:\temp\bd1.mdb")

For Each tbl In db.TableDefs
If tbl.Connect <> "" Then
List1.AddItem tbl.Name & " = " & tbl.Connect
End If
Next

End Sub

En ADO je ne peux faire que :

Sub cnx_ADO()
Dim cnx As New ADODB.Connection
Dim mycat As New ADOX.Catalog
Dim tbl As New ADOX.Table

cnx.Provider = "Microsoft.Jet.Oledb.3.51"
cnx.ConnectionString = "C:\temp\bd1.mdb"
cnx.Open

mycat.ActiveConnection = cnx

For Each tbl In mycat.Tables
If tbl.Type = "LINK" Then
List1.AddItem tbl.Name
End If
Next

End Sub

Bon, OK, je peux lister les tables liées mais le tbl.Connect de DAO c'est quoi en ADO ?

J'ai essayé les Properties, les Atributes, ..... RIEN.
J'ai parcourru la MSDN ........... RIEN.
J'ai fait des recherches sur le web ........... RIEN.
J'ai essayé plein de trucs bizarres ........ RIEN.

Si quelqu'un pouvait m'aider à trouver une solution viable, je lui en serai reconnaissant.

Sinon, je continuerai à penser ce que je pense : ADO est une régression de DAO et non pas une évolution.

Merci d'avance à ceux et celles qui répondront.

Cordialement, CanisLupus
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
19 novembre 2008
- 23 oct. 2004 à 01:08
3
Merci
Salut,

en ado, ont utiliser Properties

tbl.Properties(6) = chemin
tbl.Properties(4) = nom table


Dim cnx As New ADODB.Connection
Dim mycat As New ADOX.Catalog
Dim tbl As New ADOX.Table
List1.Clear
cnx.Provider = "Microsoft.Jet.Oledb.3.51"
cnx.ConnectionString = "C:\temp\bd1.mdb"
cnx.Open

mycat.ActiveConnection = cnx

For Each tbl In mycat.Tables
If tbl.Type = "LINK" Then
List1.AddItem tbl.Properties(4) & " " & tbl.Properties(6)
End If
Next



Bonne continuation.

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)

Membre du club CodeS-SourceS

Merci cs_frop01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Meilleure réponse
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
19 novembre 2008
- 23 oct. 2004 à 15:06
3
Merci
Moi je l'ai essayer et ca marche nickel à la seul difference que j'utilise Microsoft.Jet.Oledb.4.0 (access 2000).

Peut être ca vient de la !

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)

Membre du club CodeS-SourceS

Merci cs_frop01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Meilleure réponse
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
19 novembre 2008
- 25 oct. 2004 à 01:32
3
Merci
Je viens tout juste de faire un essai sur une base de donnée Access 97 et ca marche bien .

La référence Microsoft.Jet.Oledb.4.0 concu pour Access 2000 peut parfaitement ouvrir une base d'une ancienne version tel que Access 97 Donc on utilisant la version 4.0 du Moteur MS Jet on peut utiliser ADO pour les propriete du LINK.

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)

Membre du club CodeS-SourceS

Merci cs_frop01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
8 janvier 2014
- 22 oct. 2004 à 22:28
0
Merci
Salut CanisLupus, bien j'ai pensé que pour stocké le chemin de la base, tu pourrais le mettre dans la base de registre.

Bien pour ADO : je sait le faire avec un controle Adodc.
La difference entre DAO et ADO c'est la méthode d'accès.
Si tu utilise une base avec un Mot de passe tu va surement avoir comme erreur : "Pilote ISAM introuvable" ou "Base déjà utiliser en mode Exclusif", ça c'est car la méthode d'ouverture est fausse.

Dans la form je place un control ADOdc nommé Adodc1

Look :

sub Form_Load
Adodc1.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};Dbq=essai.mdb;Uid=Administrateur;Pwd=Password;"
Adodc1.RecordSource = "Select * From MaTable"
Adodc1.Refresh
end sub


La première ligne permet d'ouvrir la base avec un mot de passe, mais la partie ";Pwd=Password;" est facultative si ta base n'a pas de mot de passe.
Ensuite Uid c'est l'utilisateur à utiliser pour ouvrir la Base.
Dbq le chemin de la base
Driver c'est le driver d'ouverture.

La 2nd Ligne c'est le fameux "Select"

La 3ème l'éxécution avec la mode d'éxécution du "Select" enfin du moins le texte de RecordSource

La 4ème met à jour l'affichage des infos.

A partir de là tu peux lié cet ADOdc directement avec un TextBox, ComboBox, etc... DataGrid....

Je suis passer sur les AdoDC la semaine dernière et je doit dire que c'est vachement plus simple de lié des controles avec la base directement que de noter : text1.text= rs.fields("toto")

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 22 oct. 2004 à 23:07
0
Merci
Merci pour tes expliks cboulas, mais mon prob est ailleurs.
Je ne veux pas connaître le contenu d'une table, ça je sais le faire en ADO comme en DAO, avec ou sans datacontrol (je préfère sans).
Je veux seulement connaître le chemin de la base d'origine de ma table liée (attachée) par ADO comme je peux le faire par DAO.

Pour être plus clair, dans ACCESS 97 (probable idem avec autre version), je clique dans le menu Fichier/Données externes/Lier les tables .........
Après avoir sélectionné la base puis la table, j'ai un lien dans ma base de départ.
C'est l'origine de ce lien que je veux connaitre avec ADO. (Je sais le faire en DAO comme j'ai dit plus haut).

Cordialement, CanisLupus
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
8 janvier 2014
- 22 oct. 2004 à 23:19
0
Merci
Ah, alors sorry, j'ai jamais vu ce genre de truc, va faloir que j'étudie quand même la question.

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 23 oct. 2004 à 14:04
0
Merci
Désolé frop01, ça ne marche pas.

Ca me donne toujours la même erreur :

Erreur d'exécution "3265" : Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé.

J'ai pensé aux properties aussi et j'ai essayé de les lister avec 'for each...' et en ADO ça donne rien ou une erreur. C'est comme si la table n'avait pas de Properties.

Cordialement, CanisLupus
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 23 oct. 2004 à 15:28
0
Merci
OK, c'est bien ce que je pensais.
Donc, tant qu'il existera des bases Access 97 dans la boîte, je serai obligé de recourir aux bonnes vieilles méthodes du DAO.
Finalement, Billou est de plus en plus déconnecté du terrain avec son ADO.

Cordialement, CanisLupus
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 25 oct. 2004 à 18:38
0
Merci
Super Extra Formid......
Mille mercis, ça marche effectivement.
Et moi qui m'entêtais avec le 3.51........
Je retire mes précédentes critiques.

Cordialement, CanisLupus

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.