Copier-coller le contenu d'un fichier texte dans un recordset

richert90

XLDnaute Occasionnel
Bonjour
J'aimerais copier le contenu d'un fichier texte dans un recordset sur Excel car le fichier texte contient le code SQL.

J'ai le code pour lire entièrement le fichier texte mais je ne sais pas comment l'utiliser pour l'appliquer dans le recordset .

Merci d'avance pour votre aide, je vous joins le fichier texte qui contient le code SQL ainsi que ce que j'ai commencé à faire sur VBA.
 

Pièces jointes

  • fichier.txt
    3.4 KB · Affichages: 76
  • fichier.txt
    3.4 KB · Affichages: 51
  • fichier.txt
    3.4 KB · Affichages: 60
  • Classeur2.xlsm
    15.2 KB · Affichages: 51
  • Classeur2.xlsm
    15.2 KB · Affichages: 58
  • Classeur2.xlsm
    15.2 KB · Affichages: 52

Roland_M

XLDnaute Barbatruc
Re : Copier-coller le contenu d'un fichier texte dans un recordset

bonjour,

voir, essayer tout simplement !?

Code:
Sub Tst()
Dim Chaine As String
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
    Cells.Clear
    NumFichier = FreeFile
    iRow = 1:iCol = 1
    Open "C:\Documents and Settings\Mes documents\Mes sources de données\fichier.txt" For Input As #NumFichier
        Do While Not EOF(NumFichier)
            Line Input #NumFichier, Chaine
            Cells(iRow, iCol) = Chaine: iRow = iRow + 1
        Loop
    Close #NumFichier
End Sub
 
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Bonjour,

C’est normal que vous venez de réécrire le programme du fichier que j'ai joint? je ne vois pas la différence..
Je veux stocker le contenu du fichier texte dans une variable caractère pour que je puisse l'utiliser dans un recordset directement;

De plus lors de la lecture du fichier texte, comment ça se fait que 2 caractères (ÿþ) se rajoutent (pas dans le fichier texte directement mais lors de la copie)??? alors que ça devrait être le premier mot du fichier texte
 
Dernière édition:
G

Guest

Guest
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Bonjour,

Pour ne récupérer QUE les lignes concernant la création de la vue:

Code:
Sub Tst()
Dim Chaine As String, res As String
Dim found As Boolean
Dim NumFichier As Integer
    found = False
    NumFichier = FreeFile
    Open ThisWorkbook.Path & "\fichier.txt" For Input As #NumFichier
    'Sauter les lignes ne concernant pas la vue
    Do
        Line Input #NumFichier, Chaine
        If Chaine Like "CREATE VIEW*" Then
            found = True
            Exit Do
        End If
    Loop While Not EOF(NumFichier)
    If found Then
        res = Chaine
        Do While Not EOF(NumFichier)
            Line Input #NumFichier, Chaine
            res = res & Application.Clean(Chaine)
        Loop
    End If
    Close #NumFichier
    MsgBox res
End Sub

S'il y a d'autre commandes SQL server sous les lignes de création de vue, risque de plantage de cnx.execute (ou si tu n'as pas les droits de création de vue sur le serveur)

A+++
 

richert90

XLDnaute Occasionnel
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Bonjour Hasco et merci d'avoir pris le temps de répondre

J'ai tester ton code et j'ai quelques questions:
- Je n'obtiens rien dans "res" alors que si j'ai bien compris ton code, je devrais avoir tout le texte du fichier.
-
Code:
  If found Then
qu'est ce que cela veut dire ?
- Le but de ton programme , à la fin, c'est bien d'obtenir le code de la création de vue dans une variable ? et donc réutilisable dans un recordset ?

Merci d'avance
 
G

Guest

Guest
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Re,

Le but de ton programme , à la fin, c'est bien d'obtenir le code de la création de vue dans une variable ? et donc réutilisable dans un recordset ?

Non, ça c'est le but de TON programme.

Je me suis contenté de répondre à la demande du post#3 savoir mettre le contenu d'un fichier texte dans une variable. Sachant que tu ne souhaitais (en tout cas d'après ce que j'ai compris de tes demandes) que la partie concernant la création de la vue, j'ai écrit en conséquence la macro.

Avec le fichier texte que tu nous as donné, placé dans le même répertoire que le classeur qui contient la macro, msgbox res me donne bien ce qui est attendu.

J'ai mis en place la variable found qui indique à la macro qu'une ligne débutant par "CREATE VIEW" à été trouvée.

P.S. Je me demande fortement si toi, tu sais exactement de quoi tu parles et ce que tu veux!? Mais comme on ne connait pas grand chose au projet final ni pourquoi tu veux créer des vues à partir d'excel....

A+
 
Dernière modification par un modérateur:

richert90

XLDnaute Occasionnel
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Voici le but exact du projet:

Le fichier que je vais créer est destiné à une personne. Cette personne n'a pas accès à SQL Server directement depuis sa session et je veux lui simplifier la tâche, c'est pourquoi je veux créer une vue automatiquement depuis Excel.
Si elle veut modifier la vue, elle se rendra sur le fichier texte et modifiera ce qu'elle souhaite puis relancera Excel qui doit exécuter le programme de création de vue que je souhaite mettre en place.
La première étape de mon travail c'est de récupérer dans une variable caractère le contenu de la requête SQL présente sur le fichier texte: cette étape est OK.
La deuxième c'est d'utiliser cette variable dans le recordset pour créer la vue sur SQL Server (à partir des identifiants de connexions que je connais), j'essaye depuis ce matin avec quelque chose dans ce genre:

Code:
rst.Open VARIABLE_AVEC_CODE_SQL, cnx
Voilà


Hasco, j'ai bien mis le fichier texte dans le même répertoire que le fichier Excel mais ma variable res ne contient rien ..
 
G

Guest

Guest
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Re,

Si le but de l'opération est de récupérer les données de la vue dont le code SQL est dans le fichier text, il y a plusieurs façon de le faire.

Si la vue existe déjà comme entité sur le serveur, il suffit de demander à la connexion ADODB de l'exécuter
Code:
Set rst = cnx.Execute("NomDeLaVueSurLeServeur")
Si la vue n'existe pas il faut alors récupérer uniquement l'instruction SELECT du fichier text et:
Code:
rst.CursorLocation=adUseClient
    rst.Open "InstructionSelectOuVariableQuiLaContient", cnx, adOpenStatic, adLockReadOnly

Avant bien entendu, il faut cocher la référence à Microsoft ActiveX Data Object 2.x dans Outils/Références de l'éditeur de code VBA

A+
 

richert90

XLDnaute Occasionnel
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Quand j'exécute la requête, j'ai le droit à un message d'erreur:

Code:
Incorrect syntax near 'tref'
tref est dans la partie des JOIN dans le fichier texte.
Pourquoi il me met ça ? :(
 
G

Guest

Guest
Re : Copier-coller le contenu d'un fichier texte dans un recordset

Re,

donc tu as fini par arriver à récupérer la commande de création de vue. Mais as-tu lu mon précédent message?

Dans le fichier joint tu trouvera une macro Test() qu'il t'affichera le contenu de l'instruction SELECT de ton fichier text. (MsgBox est limité en nombre de caractères à afficher mais la variable contient la totalité de ton SELECT)

tref est dans la partie des JOIN dans le fichier texte.
Pourquoi il me met ça ? :(

Il te dit qu'il y a une erreur de syntaxe et cela ne m'étonne pas, je n'ai aucun élément pour te répondre.

Ton gars, va y être constament confronté, s'il ne connais pas très bien SQL et la base de donnée interrogée!
A mon avis tu choisis la pire des méthodes pour ton projet.

A+
 

richert90

XLDnaute Occasionnel
Re : Copier-coller le contenu d'un fichier texte dans un recordset

C'est bon je crois que j'ai réussi !!!!!
En fait lors de l'extraction, Excel n'a pas conservé les virguels à cause de ça:
Code:
Ar = Split(Chaine, ",")
J'ai donc remplacé par
Code:
Ar = Split(Chaine, ";")
et là ça marche :D
Oui c'est pas la méthode la plus simple mais je suis obligé

Je vais voir le fichier que tu ma joint quand même

Et merci pour ton aide ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 111
Messages
2 085 403
Membres
102 883
dernier inscrit
jameseyz