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

ASP Discussion :

aide sur la méthode openschema


Sujet :

ASP

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut aide sur la méthode openschema
    Bonjour, j'utilie la méthode openschema(4) pour travailler sur les tables d'une base de données access. Ce qui m'intéresse, c'est de trouver le nom de la table et le nom des différents champs. Pour ma base access la méthode marche. mùais si j'essaie d'adapter mon script à une autre base access, comportant d'autres tables et des requètes en plus, j'obtiens une erreur:
    'Le fournisseur ou l'objet ne prend pas en charge cette opération.'
    Je pense que ca vient des requètes access, car si j'importe les tables dans ma base de données (qui n'a pas de requètes) ca marche.
    Qu'est-ce que j'ai comme alternative a part devoir importer chaque table de l'autre base manuellement dans ma base?

  2. #2
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    J'ai trouvé ce code qui est censé répertorier uniquement les tables d'une base access, mais il me fait une erreur identique à la précédente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rs = cn.OpenSchema(adSchemaTables, _
             Array(Empty, Empty, Empty, "Table")

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Points
    189
    Par défaut
    un petit bout de code commenté
    Code : 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
    26
    27
    28
    29
     
    Sub ListTablesADO()
      Dim Conn  :  set Conn  = server.createObject("ADODB.connection")
      Dim RsTablesSchema :  set RsTablesSchema = server.createObject("ADODB.Recordset")
      Dim RsColumnsSchema :  set RsColumnsSchema = server.createObject("ADODB.Recordset")
     
      'ouverture de la connection
      Conn.Open .........
     
     'pour obtenir toutes les tables de la base(y compris les tables système....)
      Set RsTablesSchema = Conn.OpenSchema(adSchemaTables) 
      Do While Not RsTablesSchema.EOF
        'on veut uniquement les tables
        If RsTablesSchema("TABLE_TYPE")= "TABLE" Then
     
           'obtention des colonnes de la table en cours
           Set RsColumnsSchema = Conn.OpenSchema(adSchemaColumns, _
             Array(Empty, Empty,RsTablesSchema("TABLE_NAME")))
     
           'affichage des colonnes de la table en cours
           Do While Not RsColumnsSchema.EOF
               Response.write RsTablesSchema("TABLE_NAME") & ", " & _
               RsColumnsSchema("COLUMN_NAME") & "<BR>"
               RsColumnsSchema.MoveNext
           Loop
       End if
       RsTablesSchema.MoveNext
      Loop
    End Sub

  4. #4
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    Okay ca marche, pour la détection de mes tables, par contre je rencontre le meme problème quand je cherche à détecter la clé primaire d'une table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Set connec = Server.CreateObject("ADODB.Connection")
    connec.Open connstring	
    set myrst = connec.OpenSchema(28)
    do while not myrst.eof
    	if myrst("TABLE_NAME") = NomTable then
    		if myrst("PK_NAME") = "PrimaryKey" then
    			id = myrst("COLUMN_NAME")
    		end if
    	end if
    	myrst.movenext
    loop
    myrst.close
    connec.close
    Sur l'ancienne version de ma base, il me fait la meme erreur, alors que sur la nouvelle base, qui n'est que l'ancienne base avec des tables en moins, ca marche. Ca pourrait etre un problème lié à access? Ou je devrais utiliser la méthode openschéma avec des array, du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myrst = Conn.OpenSchema(adSchemaColumns, Array(Empty, Empty, NomTable, Empty))

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Points
    189
    Par défaut
    Quel type d'erreur?
    Pourrais-tu être un peu plus précis.
    Sinon il te manque une parenthèse ouvrante dans :

  6. #6
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    Je parlais de l'erreur :
    'Le fournisseur ou l'objet ne prend pas en charge cette opération.'
    Alors que pour la même table dans mon autre base de données ca marche .

    parenthèses corrigé.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Points
    189
    Par défaut
    Maintenant que je m'en souviens , le comportement n'est pas nécéssairement le même en fonction du fournisseur.
    Pour ma part j'utilise avec access ce type de chaine de connection.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..."
    Tu utilises un autre fournisseur que oledb??

  8. #8
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    non, j'utilise le même que toi. Et ca marche d'un coté mais pas de l'autre....

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Points
    189
    Par défaut
    Bah là je ne suis plus très inspiré....
    Quelques dernières pistes
    es-tu certain de passer une valeur numérique (28 et non pas "28")?
    Essayes cette façon de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Conn.OpenSchema(adSchemaPrimaryKeys, _
             Array(Empty, Empty,nomTable))
    Est-ce que tu as la même version de access pour tes 2 bases? De mdac sur les deux postes ?

  10. #10
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par amar00
    es-tu certain de passer une valeur numérique (28 et non pas "28")?
    Normalement oui, pas de souci. Je change juste le nom de la table, je ne touche pas le code.
    Citation Envoyé par amar00
    Essayes cette façon de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Conn.OpenSchema(adSchemaPrimaryKeys, _
             Array(Empty, Empty,nomTable))
    Testé sans succès...
    Citation Envoyé par amar00
    Est-ce que tu as la même version de access pour tes 2 bases? De mdac sur les deux postes ?
    Normalement oui, pas de souci pour la base access, mais je reconfirmerais auprès de l'administrateur du réseau quand il rentrera. Je ne sais pas ce qu'est mdac, mais j'utilise le meme poste pour les deux tables donc...

Discussions similaires

  1. Aide sur une méthode de requête oubliée
    Par Leduc08 dans le forum MySQL
    Réponses: 12
    Dernier message: 03/07/2015, 09h19
  2. Aide sur la Méthode Range
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/10/2010, 13h19
  3. aide sur la méthode match()
    Par camyo dans le forum Général JavaScript
    Réponses: 32
    Dernier message: 18/11/2009, 14h21
  4. Recherche aide sur la méthode gettype()
    Par Upsilone dans le forum VB.NET
    Réponses: 3
    Dernier message: 26/07/2009, 15h14
  5. [C#] Aide sur méthode bloquante
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/12/2005, 18h32

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