Recordset ADO VB6.3

Signaler
Messages postés
36
Date d'inscription
mardi 21 février 2012
Statut
Membre
Dernière intervention
11 juillet 2012
-
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
-
Bonjour,

Je suis actuellement en train de développer une application VBA et je rencontre un problème au niveau des recordset je pense.

Le contexte de mon problème est le suivant: Je fais une requête SQL sur un fichier Excel fermé grâce à l'objet ADO et je stock le résultat dans un recordset. Mon recordset est dès lors interprété comme une table de base de donnée avec pour noms de champs la première ligne du tableau dans le fichier Excel.

Mon problème: Je veux faire afficher le contenu de certains enregistrements de mon recordset qui contiennent du texte. Le problème est que s'il y a trop de texte dans une cellule de mon tableau Excel, j'ai l'impression que le recordset ne prend qu'un certain nombre de caractères. Car je me retrouve avec une chaine de caractères coupée à un certain endroit et ne l'ai pas dans sa totalité ce qui m'embête fortement.

Je voulais donc savoir si c'est dû à la capacité d'un enregistrement de recordset qui serait très faible ou à autre chose. Je récupère le texte de l'enregistrement de mon recordset dans une variable string qui a une capacité de 63 Ko (par définition) donc qui ne devrait pas me poser problème.

Je vous donne mon code si jamais cela peut aider:

Sub RequeteClasseurFerme_Excel()
        
    Dim Cn As ADODB.Connection
    Dim Fichier As String
    Dim NomFeuille As String, texte_SQL As String
    Dim Rst As ADODB.Recordset
    Set Rst = New ADODB.Recordset
    Dim Rst1 As ADODB.Recordset
    Set Rst1 = New ADODB.Recordset
    Dim tableauLTR() As ltrObjectif
    Dim titre3 As String, titre2 As String, titre1 As String, objdesc As String, nomacceptance As String
    Dim itemPointe As String, ovvName As String
    
    'Définit le classeur fermé servant de base de données
    Fichier = "P:\LG_PF_OVV_L46D05023192_v8.xlsm"
    'Nom de la feuille dans le classeur fermé
    NomFeuille = "Test Obj."
    
    Set Cn = New ADODB.Connection
    
    '--- Connexion ---
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        .Open
    End With
    '-----------------
    'On définit la requête ...
    '
    Rst.CursorType = adOpenKeyset
    Rst.CursorLocation = adUseClient
    'On récupère dans le recordset le tableau Excel
    Rst.Open "SELECT * FROM [" & NomFeuille & "$]", Cn, adOpenDynamic, adLockOptimistic
    Rst.MoveFirst

    While Not Rst.EOF
    
        'On lit l'item selectionné dans le recordset
        itemPointe = Nz(Rst![Objective Id])
        
        If (itemPointe <> "NSS-FOD-PF-OVV-PI-680" Or itemPointe = Null) Then
            Rst.MoveNext
            ovvName = Nz(Rst![Objective Id])
        Else
            'on cherche la description correspondant à l'Ovv
            objdesc = Nz(Rst![Objective Description])
            While (objdesc "" Or objdesc " ")
                Rst.MovePrevious
                objdesc = Nz(Rst![Objective Description])
            Wend
            
            'on cherche l'acceptance criteria correspondant à l'Ovv
            nomacceptance = Nz(Rst![acceptance criteria])
                                       
            'on cherche le titre 1 correspondant à l'Ovv
            titre1 = Nz(Rst![Platform Function])
            While (titre1 "" Or titre1 " ")
                Rst.MovePrevious
                titre1 = Nz(Rst![Platform Function])
            Wend
            
            'On place le curseur à la fin du recordset car on a déjà trouvé l'OVV
            Rst.MoveLast
            Rst.MoveNext
        End If
        
    Wend
    
Rst.Close
Set Rst = Nothing

    'On affiche toute les information liéees à l'OVV
    MsgBox "Id objectif: " & ovvName & Chr(13) & _
            "Description Objectif: " & objdesc & Chr(13) & _
            "Acceptance criteria: " & nomacceptance & Chr(13) & _
            "titre 3: " & titre3 & Chr(13) & _
            "titre 2: " & titre2 & Chr(13) & _
            "titre 1: " & titre1 & Chr(13)
            
    'Je crée un fichier texte et écris les variables pour voir le contenu exact
    Set FSys = CreateObject("Scripting.FileSystemObject")
    Set MonFic = FSys.CreateTextFile("P:\fichier.txt")
    With MonFic 'Pour écrire dans le fichier texte
    .WriteLine "Id objectif: " & ovvName  'Mettre write pour ne pas sauter à la ligne
    .WriteLine "Description Objectif: " & objdesc
    .WriteLine "titre 3: " & titre3
    .WriteLine "titre 2: " & titre2
    .WriteLine "titre 1: " & titre1
    .WriteLine "Acceptance criteria: " & nomacceptance
    End With
    Msg = "Écriture réussie dans fichier.txt"
    MsgBox (Msg)

End Sub


L'erreur se produit sur la variable en rouge "nomacceptance" qui ne prend que la moitié du texte contenu dans l'enregistrement pointé par l'instruction "Rst![acceptance criteria]"

Si quelqu'un à une idée ??

Je vous remercie d'avance,

Thomas

3 réponses

Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Quelle est la longueur du texte dans la cellule ?
Quelle est la longueur récupérée ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
36
Date d'inscription
mardi 21 février 2012
Statut
Membre
Dernière intervention
11 juillet 2012

Bonjour,

Désolé de ne pas avoir répondu avant mais weekend de pâque oblige

Pour en revenir à mon problème, je ne peux vous montrer le texte car développant une application dans le cadre professionnel, il m'est impossible de le copier coller.

Toutefois, mon texte fait environ 360 caractères et mon recordset n'en prend que 250 ce qui est un peu plus de la moitié.

De plus, lors de l'exécution de l'instruction:
.WriteLine "Acceptance criteria: " & nomacceptance

une erreur se produit. Cette erreur est la suivante:

Erreur d'exécution '5':

Arguments ou appel de procédure incorrect

Ces renseignements vous apportent-ils des informations ? Un recordset à t-il une capacité maximum en terme de caractère ?

Je vous remercie d'avance,

Thomas
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Je crois qu'en Excel, par défaut on ne peut récupérer que 250 caractères, il faut utiliser des fonctions VBA pour s'en sortir.

Voir si avec une base Access tu t'en sors mieux.

Sinon, pourquoi utiliser FSO ?
Il y a Open, Print et Close qui feront l'affaire.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site