IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Access Clé Primaire


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut Access Clé Primaire
    Bonjour,
    Après des heures de recherche, je fini par me demander si je ne suis pas une bille en recherche Web.
    Je développe sous VB2010 en lien avec des bases ACCESS 2000 j'utilise une connexion ADODB et je cherche a retrouver la clé primaire d'une table.
    Je n'ai rien trouvé, ou rien compris à ce que j'ai trouvé sur le sujet.

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Shared Function getKeyNames(tableName As [String], conn As DbConnection) As List(Of String)
        Dim returnList = New List(Of String)()
     
        Dim mySchema As DataTable = TryCast(conn, OleDbConnection).GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, New [Object]() {Nothing, Nothing, tableName})
     
        ' following is a lengthy form of the number '3' :-)
        Dim columnOrdinalForName As Integer = mySchema.Columns("COLUMN_NAME").Ordinal
     
        For Each r As DataRow In mySchema.Rows
            returnList.Add(r.ItemArray(columnOrdinalForName).ToString())
        Next
     
        Return returnList
    End Function


    Regarde ceci aussi.
    N'oubliez pas le tag et

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Merci de cette réponse mais ça ne colle pas, cette fonction utilise une connexion OLE et toute mon appli utilise ADODB.

    Sinon je confirme qu'en OLE ton exemple fonctionne très bien mais ça m'embête d'être obligé d'ajouter l'OLE juste pour cette fonction...

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut

    c'est plutôt l'inverse
    OleDb est ce qui est inclus au framework et conseillé
    ADODB est son ancetre qui nécessite d'ajouter une dll
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Oui je traine mes vielles habitudes de VB6.
    Il faudrait surement que je change ça mais a chaque nouvelle application je manque de temps et je reprend comme d'hab.
    Ceci dit, il doit bien y avoir un moyen de faire la même chose en ADODB. non ?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    s'il y a bien une chose à faire quand on passe de vb6 à vb.net c'est apprendre à ne rien faire comme en vb6

    sinon tu peux peut-être demander chez vb6, ils seront surement plus nombreux là bas à utiliser adodb
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Une piste à creuser tout de même. Essayes avec la méthode OpenSchema
    The OpenSchema method returns a Recordset object with schema information from the provider about the data source. For example, schema information can include the names of the tables, names of the columns in the tables, and the data type of each column. The Recordset will be opened as a read-only recordset.
    Tu peux donc essayer un truc du genre:
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Const strConn As String = "..."
     
            Dim dbConnection As New ADODB.Connection
            dbConnection.ConnectionString = strConn
     
            dbConnection.Open()
     
            Dim rs As New ADODB.Recordset()
            rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
     
             rs = dbConnection.OpenSchema(ADODB.SchemaEnum.adSchemaPrimaryKeys, New Object() {Nothing, Nothing, Nothing, "NomDeTaTable"})
            While Not rs.EOF
                MsgBox(rs.Fields("COLUMN_NAME"))
                rs.MoveNext()
            End While
    N'oubliez pas le tag et

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Ben non, j'ai fait 40 manip et le OpenSchema envoie une erreur "le fournisseur ou l'objet ne prend pas en charge cette opération"

  9. #9
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Alors, ceci devrait marcher:
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    'tableName est le nom de la tabe dont tu veux retourner le(s) clé(s) primaire(s)
    Private Sub GetPrimaryKeys(tableName As String) 
       Const strConn As String = "..."
       Dim dbConnection As New ADODB.Connection()
       dbConnection.ConnectionString = strConn
     
       dbConnection.Open()
     
       Dim rs As New ADODB.Recordset()
     
       rs = dbConnection.OpenSchema(ADODB.SchemaEnum.adSchemaPrimaryKeys)
     
       While Not rs.EOF
          If (rs.Fields("TABLE_NAME").Value) = tableName Then
             MsgBox("Clé primaire de la table " & tableName & ": " & rs.Fields("COLUMN_NAME").Value, MsgBoxStyle.Information, "Primary keys")
          End If
     
          rs.MoveNext()
       End While
     
      rs = Nothing
      dbConnection.Close()
     
    End Sub
    N'oubliez pas le tag et

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Bonjour Callo,
    J'ai fait 40 tests avec ou sans les param facultatifs dans tous les cas le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs = Serveur_cnx.OpenSchema(ADODB.SchemaEnum.adSchemaPrimaryKeys)
    Provoque la même erreur alors que dans le même contexte un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs= Serveur_cnx.OpenSchema(ADODB.SchemaEnum.adSchemaTables)
    fonctionne très bien.

  11. #11
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    C'est un peu bizarre quand même. Je viens de tester à mon niveau et c'est nickel avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rs = dbConnection.OpenSchema(ADODB.SchemaEnum.adSchemaPrimaryKeys)
    Peux-tu poster ton code?
    N'oubliez pas le tag et

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    mon code c'est la copie du tiens en remplaçant ta connexion par la mienne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Serveur_cnx = New ADODB.Connection
                Serveur_cnx.Provider = "Microsoft.Jet.Oledb.4.0"
                Serveur_cnx.ConnectionString = "Data Source=" & My.Settings.CheminBaseServeur & "; Jet OLEDB:Database Password = ''"
                Serveur_cnx.Open()

  13. #13
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Quelle est la version de MDAC installé sur ta machine?
    N'oubliez pas le tag et

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Dans mon regedit : 6.3.9600.16384

  15. #15
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Non, ça ne doit pas être la version. En ma connaissance la dernière version devrait être 2.8 sp1. Fait un tour sur le site de MS ou cherche "last version MDAC" dans google. Fais ensuite un upgrade vers la dernière version de MDAC et dis nous ce que ça donne comme résultat.
    N'oubliez pas le tag et

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Je n'ai pas trouvé la version mais j'ai chargé et installé la 2.8 ça n'a rien changé.

  17. #17
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Là, j'ai épuisé presque toutes mes cartourches .

    On devrait commencer par là, mais j'avais oublié de te demander ta configuration. Moi je suis sous Win 7 + sp1 et j'ai aucun soucis avec le code.

    Je pense que tu devrais commencer sérieusement par réfléchir à aller de l'avant et laisser tomber ADODB comme suggéré par Pol63 .

    Cependant, en faisant:
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    '.....
    Dim rs As New ADODB.RecordSet()
    rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
    '......
    rs.Open("select * from UneTable", dbConnection)
    '...
    rs.ActiveConnection = Nothing
    dbConnection.Close()
    tu obtiens en fait un recordset déconnecté. Tu as la possibilité de rendre ce recordset parfaitement utilisable en dotnet en le convertissant en un ADO.NET DataSet à l'aide de OleDbDataAdapter. ça donnerait ceci:
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim da As New System.Data.OleDb.OleDbDataAdapter()
    Dim ds As New DataSet()
    da.Fill(ds, rs, "UneTable")
    Tu pourrais donc avoir pleins de possibilité...

    Quel qu'en soit le cas, if faut sérieusement songer à migrer vers ado.net ou du moins passer à OleDb. J'ai entre-temps lu un comparatif en terme de performance entre ADO et ADO.NET. Si j'arrive à retrouver le lien, je le posterai.
    N'oubliez pas le tag et

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Je travaille sur une machine W8.1 sur mon autre machine de travail W8 c'est pareil
    J'ai installé VB 2010 sur l'ordi de mon fils W7 et c'est encore pareil.
    Je vais tester le recordset déconnecté et après j'abandonne.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Merci callo pour ton aide
    Bon j'ai abandonné l'idée d'utiliser ADODB. Je ne comprend pas pourquoi ça ne fonctionne pas chez moi
    J'ai repris le code OLE de ton premier poste.
    Je vais sérieusement penser a basculer en OLE.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Access, Clé Primaire
    Par Mistigri5 dans le forum Modélisation
    Réponses: 1
    Dernier message: 23/02/2015, 23h44
  2. [AC-2010] Access Ecole Primaire
    Par aizen2014 dans le forum Access
    Réponses: 0
    Dernier message: 02/04/2014, 12h55
  3. ACCESS Clé Primaire
    Par Pascal Lob dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/01/2014, 13h05
  4. Access 97 - Problème de clé primaire.
    Par Korskarn dans le forum Access
    Réponses: 2
    Dernier message: 08/11/2005, 09h18
  5. Création Clé primaire auto-incremente - Access 2000
    Par Didier100 dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/10/2004, 19h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo