Récupéré le nom des colonnes d'une requete

Résolu
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 - 24 août 2006 à 16:48
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 - 25 août 2006 à 12:00
Bonjour.

Pour commencer je dirais juste que cela ne fais que 2 heures que je me suis mis au vb alors je m'excuse pour mon incompétence

J'ai récupéré ce code pour exécuter des requêtes sur une bdd oracle..



Option Explicit



Dim connectionString: connectionString = "DRIVER={Microsoft ODBC for Oracle};SERVER=;User Id=;Password=;"
Dim connection: Set connection = CreateObject("ADODB.Connection")
Dim rows: Set rows = CreateObject("ADODB.Recordset")



connection.Open connectionString
Set rows = connection.Execute("SELECT name,age FROM people")



Dim strResult
While Not rows.EOF
    strResult=rows.Fields("name").Value + vbTab + rows.Fields("age ").Value + VbCrLf
    rows.MoveNext
Wend



'Pour creer le fichier texte
Dim FSys
Dim MonFic
Dim Msg
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile(".\fichier.txt")
With MonFic 'Pour écrire dans le fichier texte
.writeLine strResult
End With
MonFic.close
Msg = "Écriture réussie dans fichier.txt"
MsgBox(Msg)
MsgBox(strResult)



connection.Close
Set rows = Nothing
Set connection = Nothing



Je voudrais savoir comment faire pour récupérer les noms des colonnes.
Pour ne pas avoir à coder en dur le nom de la colonne.
Ainsi que pour le mettre en entête dans le fichier que je crée avec le résultat de ma requête.

10 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
24 août 2006 à 17:33
Salut,


Ceci devrait fonctionner



 



Dim NomColonne
Connection.Open ConnectionString 
Set rows = Connection.Execute("SELECT name,age FROM people") 
For Each NomColonne In rows.Fields 
MsgBox NomColonne.Name 
Next 

 







<small> Coloration syntaxique automatique [AFCK]</small>

       









 






@+, Julien
3
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
25 août 2006 à 12:00
Pour ceux qui sont interessés, voici mon script final ( => execute une requete, insere le resultat dans un fichier txt, avec le nom des colonnes en 1er ligne et les données qui suivent, le separateur etant le tab ):

Option Explicit


'Variable de parametre de connection
Dim connectionString: connectionString = "DRIVER={Microsoft ODBC for Oracle};SERVER=***;User Id=***;Password=***;"
'Variable de connection a la base de donnes
Dim connection: Set connection = CreateObject("ADODB.Connection")
'Objet contenant le resultat d'une requete
Dim rows: Set rows = CreateObject("ADODB.Recordset")
'Varible de la requete a executer
Dim strQuery : strQuery = "SELECT * FROM NomTable"
'Variable pour concatener les ligne
Dim strResult
'Variable du nom des colonnes
Dim NomColonne
Dim FSys : Set FSys = CreateObject("Scripting.FileSystemObject")
'Variable pour ecrire dans un fiochier
Dim MonFic : Set MonFic = FSys.CreateTextFile("fichier.txt")
Dim Msg : Msg = "Écriture réussie dans fichier.txt"


Call connection.Open(connectionString)


Set rows = connection.Execute(strQuery)


For Each NomColonne In rows.Fields  
 StrResult = StrResult & NomColonne.Name & vbTab
Next
MonFic.WriteLine(StrResult)
While Not rows.EOF
 'Vide strresult
        StrResult = vbNullString
 For Each NomColonne In rows.Fields  
  strResult = strResult & CStr(NomColonne.Value) & vbTab
 Next
 MonFic.WriteLine(StrResult)
 rows.MoveNext 
Wend


'fermeture du fichier
Call MonFic.close
'fermeture du Recordset
Call rows.Close
'fermeture de la connection
Call connection.Close


MsgBox(Msg)


'destruction des objets
Set rows = Nothing
Set connection = Nothing
Set MonFic = Nothing
Set NomColonne = Nothing
Set FSys = Nothing
3
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
24 août 2006 à 17:53
Merci cela marche sans aucun probleme.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
24 août 2006 à 17:59
Re,


J'ajouterai meme ceci si tu veux ecrire le résultat d'une requete dans un fichier (avec en premiere ligne le nom des colonnes)
En revanche si je peux te conseiller quelque chose:
Essaie de type au maximum tes variable
Exemple: Prefere Dim connectionString As String  a Dim connectionString (car ici ConnectionString est alors de type variant)

-Je n'ai pas pu le tester car je n'ai pas de conneciton a une base données Oracle.

pour ajouter une référence (si tu ne sais pas déja le faire) Menu Projet => Références => APRES IL Y A PLUS QU A COCHER;

Autre note, est tu sur que c'est du .NET car le code que je t'ai donné est du VB6

Voila tout est dit j'espere que tu comprendras et que cela fonctionnera




'Pour pouvoir utiliser les objets Recordset et Field et connection


'Coche la référence suivante Microsoft ActiveX Data Object 2.8 Library (2.8 ou equivalent)


'Pour pouvoir utiliser les objet FileSystemObject et TextStream


'Coche la référence suivante Microsoft Scripting Runtime

'Variable de connection a la base de donnes


Dim connection As New ADODB.connection 
'Objet contenant le resultat d'une requete
Dim rows As New ADODB.Recordset 
'represente Un champ d'un recordset
Dim NomColonne As ADODB.Field 
Dim FSys As New FileSystemObject 
'Variable pour ecrire dans un fiochier
Dim MonFic As TextStream 
'Variable de parametre de connection
Dim connectionString As String 
'Variable pour concatener les ligne
Dim StrResult As String 

    connectionString = "DRIVER={Microsoft ODBC for Oracle};SERVER=;User Id=;Password=;" 
    Call connection.Open(connectionString) 
    Set rows = connection.Execute("SELECT name,age FROM people") 

    Set MonFic = FSys.CreateTextFile("C:\fichier.txt") 

    For Each NomColonne In rows.Fields 
        'Construit l'entete des colonnes (nom)
        StrResult = StrResult & NomColonne.Name & vbTab 
    Next 
    'Ecrit l'entete dans le fichier
    Call MonFic.WriteLine(StrResult) 
    'Boucle pour chaque ligne de l'objet recordset
    While Not rows.EOF 
        'Vide strresult
        StrResult = vbNullString 
        'Recupere les valeur de la ligne
        For Each NomColonne In rows.Fields 
            StrResult = StrResult & NomColonne.Value & vbTab 
        Next 
        'Ecriture dans le fichier
        Call MonFic.WriteLine(StrResult) 
        'Passe a la "ligne" suivante
        rows.MoveNext 
    Wend 
    'fermeture du fichier
    Call MonFic.Close 
    'fermeture du Recordset
    Call rows.Close 
    'destruction des objets
    Set MonFic = Nothing 
    Set rows = Nothing 
    Set NomColonne = Nothing 
    Set FSys = Nothing 
 







<small> Coloration syntaxique automatique [AFCK]</small>

       









 
0

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

Posez votre question
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
25 août 2006 à 08:56
Re.
Merci je vais étudier cela.
Pour le .Net, j'ai mis ma question sur ce forum car il parlait d’oracle je n'ai pas fais attention que c'était du .NET (je ne connais pas la différence en plus)
Je m'excuse si je me suis trompé de catégorie

Merci encore.
0
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
25 août 2006 à 09:04
Encore moi.


il est dans quoi le Menu Projet => Références => APRES IL Y A PLUS QU A COCHER; ?
Et quand je met Dim nomVariable As type de varible ca plante et me met "fin d'instruction attendu" ?
Que dois je faire?

Merci.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 août 2006 à 09:09
Salut,
1 - Qu'utilises tu comme VB (Moi j'utilise VB6)  Projet => Références
2 - As type de varible qu a tu mis comme Type de variable.
@+, Julien
0
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
25 août 2006 à 10:29
1 - En faite je sais pas du tout, moi j'ai juste fais un fichier avec le script que j'ai mis dans ma 1er question, je les nommé en.vbs et ça a marché, j'ai regardé dans programme file et dans ajouter supprimer et j'ai pas de vb ou visual basic.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>








2 - en faite j'ai testé ton code et toutes les lignes du debut fond l'erreur :



Dim


 connection As New ADODB.connection 
'Objet contenant le resultat d'une requete
Dim rows As New ADODB.Recordset 
'represente Un champ d'un recordset
Dim NomColonne As ADODB.Field 
Dim FSys As New FileSystemObject 
'Variable pour ecrire dans un fiochier
Dim MonFic As TextStream 
'Variable de parametre de connection
Dim connectionString As String 
'Variable pour concatener les ligne
Dim StrResult As String 

Si je retir le "AS ..." ca marche.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 août 2006 à 10:55
Re,


C'est normal (erreur de ma part)


C'est du Vb Script  donc pas de références à ajouter.
Donc ton script de départ fonctionne avec les createObjects (vu qu il n'a y aps de références.)


Enfin Bref si cela fonctionne c'est le principal.






@+, Julien
0
sdisp Messages postés 75 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 1
25 août 2006 à 11:14
Ok merci beaucoup.


Pendant que tu y est, j'ai posé une question la : http://www.phpcs.com/infomsg_LANCER-VBSCRIPT_802427.aspx

sur le forum php mais ca traite du fichier vbs alors si tu as une petite idée ( oui je sais j'abuse ).

En tout cas merci pour ton aide.

@+
0
Rejoignez-nous