Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2006, 16h12   #1
Membre actif
 
Inscription : juin 2006
Messages : 431
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 431
Points : 162
Points : 162
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?
boss_gama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 16h39   #2
Membre actif
 
Inscription : juin 2006
Messages : 431
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 431
Points : 162
Points : 162
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 :
1
2
Set rs = cn.OpenSchema(adSchemaTables, _
         Array(Empty, Empty, Empty, "Table")
boss_gama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 11h45   #3
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
un petit bout de code commenté
Code :
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
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 09h17   #4
Membre actif
 
Inscription : juin 2006
Messages : 431
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 431
Points : 162
Points : 162
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 :
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 :
Set myrst = Conn.OpenSchema(adSchemaColumns, Array(Empty, Empty, NomTable, Empty))
boss_gama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 14h15   #5
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
Quel type d'erreur?
Pourrais-tu être un peu plus précis.
Sinon il te manque une parenthèse ouvrante dans :
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 15h35   #6
Membre actif
 
Inscription : juin 2006
Messages : 431
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 431
Points : 162
Points : 162
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é.
boss_gama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 16h20   #7
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
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 :
1
2
 
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..."
Tu utilises un autre fournisseur que oledb??
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 17h02   #8
Membre actif
 
Inscription : juin 2006
Messages : 431
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 431
Points : 162
Points : 162
non, j'utilise le même que toi. Et ca marche d'un coté mais pas de l'autre....
boss_gama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 12h42   #9
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
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 :
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 ?
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 12h57   #10
Membre actif
 
Inscription : juin 2006
Messages : 431
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 431
Points : 162
Points : 162
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 :
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...
boss_gama est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h43.


 
 
 
 
Partenaires

Hébergement Web