Trouver les foreign key dans un dataset [Résolu]

mot_mot 22 Messages postés mercredi 31 août 2005Date d'inscription 22 novembre 2005 Dernière intervention - 20 sept. 2005 à 10:35 - Dernière réponse : cs_69chris 318 Messages postés jeudi 30 janvier 2003Date d'inscription 30 décembre 2005 Dernière intervention
- 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
Afficher la suite 

10 réponses

Meilleure réponse
mot_mot 22 Messages postés mercredi 31 août 2005Date d'inscription 22 novembre 2005 Dernière intervention - 22 sept. 2005 à 11:26
3
Merci
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>

Merci mot_mot 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

cs_69chris 318 Messages postés jeudi 30 janvier 2003Date d'inscription 30 décembre 2005 Dernière intervention - 20 sept. 2005 à 11:53
0
Merci
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.
mot_mot 22 Messages postés mercredi 31 août 2005Date d'inscription 22 novembre 2005 Dernière intervention - 20 sept. 2005 à 15:19
0
Merci
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!
mot_mot 22 Messages postés mercredi 31 août 2005Date d'inscription 22 novembre 2005 Dernière intervention - 20 sept. 2005 à 15:20
0
Merci
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!
cs_69chris 318 Messages postés jeudi 30 janvier 2003Date d'inscription 30 décembre 2005 Dernière intervention - 20 sept. 2005 à 19:56
0
Merci
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.
mot_mot 22 Messages postés mercredi 31 août 2005Date d'inscription 22 novembre 2005 Dernière intervention - 21 sept. 2005 à 14:16
0
Merci
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!
cs_69chris 318 Messages postés jeudi 30 janvier 2003Date d'inscription 30 décembre 2005 Dernière intervention - 21 sept. 2005 à 15:00
0
Merci
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.
mot_mot 22 Messages postés mercredi 31 août 2005Date d'inscription 22 novembre 2005 Dernière intervention - 21 sept. 2005 à 15:47
0
Merci
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
cs_69chris 318 Messages postés jeudi 30 janvier 2003Date d'inscription 30 décembre 2005 Dernière intervention - 21 sept. 2005 à 16:43
0
Merci
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.
cs_69chris 318 Messages postés jeudi 30 janvier 2003Date d'inscription 30 décembre 2005 Dernière intervention - 22 sept. 2005 à 12:03
0
Merci
Super!

Chris

N'oubliez pas de cloturer votre post.

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.