Trouver les foreign key dans un dataset

Résolu
mot_mot Messages postés 22 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 22 novembre 2005 - 20 sept. 2005 à 10:35
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 - 22 sept. 2005 à 12:03
Bonjour,

je débute en vb.net, et je n'arrive pas à trouver les clés étrangères dans une dataset!



Tout d'abord je récupère le schéma de ma base access



Dim oSchemaTable As DataTable

classConn.ouvrirConnexion()

oSchemaTable = classConn.getConnexion.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})

classConn.fermerConnexion()



Ensuite je rempli mon dataset avec un dataAdapter



Dim oTable As DataTable = getMaTable()

Try



For Each oMaLigne In oTable.Rows

classConn.setStrNomTable(CType(oMaLigne.Item("TABLE_NAME"), String))

classConn.setDataAdapter(New OleDbDataAdapter("Select * From [" & classConn.getStrNomTable & "]", classConn.getConnexion))


classConn.getDataAdapter.FillSchema(oMonDataSet, SchemaType.Mapped,
classConn.getStrNomTable)

classConn.getDataAdapter.Dispose()

Next

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try



J'arrive ensuite à retrouver les clés pimaires!
Mais rien à faire j'ais du mal à comprendre comme faire pour chercher
et trouver les clés étrangères!



Merci d'avance

10 réponses

mot_mot Messages postés 22 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 22 novembre 2005
22 sept. 2005 à 11:26
merci pour ton aide! mais je crois que j'ais trouvé la solution!

en faite il suffit de reparcourir ma base de données et pour récupérer cette fois le schema relationnel avec:



GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, New Object() {Nothing, Nothing, Nothing, Nothing, Nothing, Nothing})



on obtiennt donc le xml suivant:



<?xml
version="1.0" standalone="yes" ?>







[# -] <dataset1>






[# -] <Foreign_Keys>






<PK_TABLE_NAME>Patron</PK_TABLE_NAME>





<PK_COLUMN_NAME>NomPatron</PK_COLUMN_NAME>





<FK_TABLE_NAME>Vendeur</FK_TABLE_NAME>





<FK_COLUMN_NAME>nomVendeur</FK_COLUMN_NAME>





<ORDINAL>1</ORDINAL>





<UPDATE_RULE>NO ACTION</UPDATE_RULE>





<DELETE_RULE>NO ACTION</DELETE_RULE>





<PK_NAME>PrimaryKey</PK_NAME>





<FK_NAME>PatronVendeur</FK_NAME>



</Foreign_Keys>



</dataset1>
3
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
20 sept. 2005 à 11:53
Salut,



Les clés étrangères sont des relations entre tes tables.

Ces relations sont conservées au niveau du DataSet dans la propriété Relations de type DataRelationCollection.

Chris

N'oubliez pas de cloturer votre post.
0
mot_mot Messages postés 22 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 22 novembre 2005
20 sept. 2005 à 15:19
Merci, mais lorsque par exemple j'affiche le nombre de relations
contenus dans ma collection de relations, j'obtient un beau "0". Est-ce
normal avec le code ci-dessus ne n'obtenir aucune relations dans une
bases qui en est chargée?



oMonDataSet.Relations.Count me donne "0"



Au secour!
0
mot_mot Messages postés 22 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 22 novembre 2005
20 sept. 2005 à 15:20
Merci, mais lorsque par exemple j'affiche le nombre de relations
contenus dans ma collection de relations, j'obtient un beau "0". Est-ce
normal avec le code ci-dessus ne n'obtenir aucune relations dans une
bases qui en est chargée?



oMonDataSet.Relations.Count me donne "0"



Au secour!
0

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

Posez votre question
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
20 sept. 2005 à 19:56
Vu le code, je pense qu'elles (les clés étrangères) ne sont pas chargées.

Comment les connaitre/deviner à partir d'une requête select sur une
table? Le GetSchemaTable donne la structure de la table. Mais
donne-t-elle aussi les clés étrangères?

Chris

N'oubliez pas de cloturer votre post.
0
mot_mot Messages postés 22 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 22 novembre 2005
21 sept. 2005 à 14:16
Donc si je comprend ce que tu me dis! avec cette requête je
n'arriverais pas à obtenir les relations qui existent dans ma base.
Ensuite en récupérant le schema de ma base, je n'obtient que la
structure de mes tables et pas les relations qui existent entre
certaines tables de ma base.



Mais est-ce que tu peux m'aider à y voir plus claire! Comme je l'ais
dis je suis débutant et je sais vraiment pas comment m'y prendre!

Je veux être en mesure de pouvoir récupérer mes tables avec ou sans données et aussi les relations qui existent!



merci!
0
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
21 sept. 2005 à 15:00
Et bien, pourt savoir ce qu'il y a en retour de GetSchemaTable, utilise la méthode WriteXml du DataSet. Modifie ton code vers :


Dim oSchemaTable As DataTable

Dim oDST As DataSet = new DataSet()

classConn.ouvrirConnexion()
oSchemaTable = classConn.getConnexion.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
classConn.fermerConnexion()

oDST.Tables.Add(oSchemaTable)

oDST.WriteXML("c:\schema.xml")



Ensuite, regarde le
résultat, si tu ne comprend pas ce qu'il y a dedans, copie/colle ce
resultat ici ou en message privé. Je regarderais.


Chris

N'oubliez pas de cloturer votre post.
0
mot_mot Messages postés 22 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 22 novembre 2005
21 sept. 2005 à 15:47
Merci mais je crois que je me suis mal exprimé! Ce schema je l'obtiens déjà!



En faite ce que je cherche à obtenir c'est le schema détaillé de ma base de données (sans les données des tables).

Ce schema devra contenir toutes mes tables avec leurs champs. Mais
aussi les clés primaires et surtout les clés étrangères! car
c'est pour l'instant elles que je cherche à trouver à partir de
DataSet.Relations.



Mais d'après ce que tu m'as dis, mon code ne peux me charger les
relations de la bases de données, d'une part à cause du code sql et
d'autre part parce que je charge le schema de cette base!



Donc, est-ce que tu peux m'expliquer comment obtenir les relations qui
lient certaines tables d'une base de données en utilisant le mode
déconnecté.



Merci, thomas
0
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
21 sept. 2005 à 16:43
Je reprend dans l'ordre :

Mon dernier post était là pour vérifier ce que je disais. Car si
le schéma obtenu par la méthode GetSchemaTable donne les relations, pas
besoin de se casser la tête. C'est pour ça que je t'ai demandé de faire
une sauvegarde du résultat sous forme XML.

'----------

Je suis désolé de ne pas pouvoir faire le test, mais j'ai pas Access
sur mon poste donc pour faire des tests simples, c'est pas évidant.

----------'

Ensuite, si la méthode GetSchemaTable ne donne rien, il faut allé
chercher le descriptif de la base dans les tables systèmes et c'est
propre à chaque SGBD. Je sais comment faire avec SQL Server mais c'est
tout.



Pour finir, le schéma de ta base est fixe? si c'est le cas, pourquoi ne pas le coder dans un fichier XML?

Chris

N'oubliez pas de cloturer votre post.
0
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
22 sept. 2005 à 12:03
Super!

Chris

N'oubliez pas de cloturer votre post.
0
Rejoignez-nous