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

VB.NET Discussion :

longueur de la requete source


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut longueur de la requete source

    j'effectue des interrogations vers une base de donnée (oracle, 8i)
    j'utilise les objets adodb connection et adodb.recordset
    avant d'ouvrir mon recordset, je copie la requête que je veux exéuter dans une variable que j'appelle ensuite lors de l'utilisation de la methode 'open' du recordset...


    Jusque là ça marche sauf si la requete dépasse 255 caractères. la chaîne source est toujours tronquée à 255 caractères.


    Quel type de donnée permet de manipuler des chaines plus longues ?
    Comment faîtes vous pour lancer une requête de plus de 255 caractères ?

    voici une partie de mon code :
    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
     
    With MyConnect
            .ConnectionString = "ODBC;UID=DWH;PWD=DWH;DSN=S0156_XDWA;"
            .Open
            .CursorLocation = adUseClient
        End With
     
     
       MyRequete = "select " _
      & "to_char(ID_RPN_NIV) niv," _
      & "to_char(sum(decode(cd_rpn_grp_grp_pvt_cla,'G1',1))) G1," _
      & "to_char(sum(decode(cd_rpn_grp_grp_pvt_cla,'G2',1))) G2," _
      & "to_char(sum(decode(cd_rpn_grp_grp_pvt_cla,'G3',1))) G3 " _
      & "FROM vw_pvt_classif_grp_pvt vw, tb_d_ref ref, tb_i_vte_ref_jou vte " _
      & "WHERE vte.id_pvt=vw.id_pvt and vte.id_ref=ref.id_ref and " _
      & "vte.id_tps_jou BETWEEN " & DtDeb & " AND " & DtFin & " " _
      & "AND ref.cd_ref='" & RefAndre & "'  and " _
      & "id_rpn_niv = " & Str(idclaniv) & " " _
      & "GROUP BY to_char(ID_RPN_NIV);"
     
     
        With MyRecSet
            .CacheSize = 50
            .Open MyRequete, MyConnect, adOpenDynamic, adLockReadOnly
     
        End With

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Comment déclares-tu MyRequete ? Quelle est la version de VS (2005 ?) ? Tu es bien en VB.NET ?

    J'utilise le type string (dim t as string) et je n'ai pas de soucis de longueur.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut

    Je n'utilise pas vb.net mais vb 6.3 avec Excel 2007


    La librairie que j'utilise pour manipuler des objets ADODB est : Micosoft activex
    Data objects 2.8 library

    ...et voici comment je définie et initialise ma connexion :
    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
     
       Dim MyConnect As New ADODB.Connection
        Dim MyRecSet As New ADODB.Recordset
     
        Dim MyRequete as String
        Dim ItemIndex As Integer
     
       With MyConnect
            .ConnectionString = "ODBC;UID=DWH;PWD=DWH;DSN=S0156_XDWA;"
            .Open
            .CursorLocation = adUseClient
        End With
     
     
       MyRequete = "select ..." 
     
     
        With MyRecSet
            .CacheSize = 50
            .Open MyRequete, MyConnect, adOpenDynamic, adLockReadOnly
     
        End With

  4. #4
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Trés étonnant tout ça ! Ca ne m'est jamais arrivé mais j'utilise systématiquement cette syntaxe :

    Dim rs As New ADODB.Recordset
    Set rs = maconnection.Execute(strSqlQuery)

    Ca donne quoi chez toi si tu essayes ?

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    Olsimare,

    La méthode execute de l'objet connection permet effectivement d'exécuter une requête SQL et d'en affecter le résultat à un curseur, à l'instar de ce que je parviens à faire avec la méthode open de l'objet recordset.


    En fait mon problème n'est pas là; Je me suis mal exprimé.
    Ce qui pose problème c'est la variable string qui contient la requête... Elle semble limitée à 255 caractères;

    Les requêtes, dont la longueur excède cette valeur, plantent systématiquement et lorsque je regarde (espion) le contenu de cette variable lors d'un deboggage, je constate effectivement que la requête est tronquée à 255 caractères.

    Je précise que
    - Je parviens, sans aucune difficulté, à lancer et exploiter toutes sortes de requêtes qui seraient moins longues.
    - La syntaxe des requêtes incriminées est correcte et qu'elles retournent les résultats attendus lorsque je les exécute sur Toadtm par exemple.

  6. #6
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour

    C'est donc bien dans le type string que réside le probléme.

    As-tu essayé une déclaration du type :
    dim myQuery as string * 1000

    Désolé je ne peux pas le tester, j'ai définitivement balancé mon VB6 ! ;-)

    En complément :
    Puisque tu as Toad sous la main, quand tu passes ta requête et que tu regardes au niveau de ta connection sous Toad la requête qui est passée, est-ce qu'elle est tronqué ? Ne serais-pas un probléme ODBC ?
    Peut-être faudrait-il tester tout ça en utilisant les objets mis à disposition par Oracle dans la librairie oip8.tlb (Oracle In-Process Server Type library --> Oracle 8 évidemment) dispo avec SQL net ?
    C'est systématiquement ce que j'utilisais pour accéder aux bases Oracle mais je ne sais plus pourquoi ! Quand je dis que je n'ai jamais eu ce genre de probléme c'était avec des bases Access ou SQL Server ... alors peut être que ...

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut ça marche !

    désolé de répondre aussi tardivement, mais je n'ai eu le temps d'effectuer le texte que ce matin...
    ...et ça marche...

    Le coup du "string * 1000" a été efficace.
    rien à voir avec adodb et autres problèmes de connexions donc ...

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC 00] probleme requete source d'un formulaire
    Par popofpopof dans le forum IHM
    Réponses: 1
    Dernier message: 26/12/2008, 13h36
  2. Réponses: 3
    Dernier message: 05/06/2008, 09h34
  3. Requete source pour creation Affaire
    Par Myogtha dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 25/02/2008, 18h12
  4. Réponses: 4
    Dernier message: 06/08/2007, 16h17
  5. Nombre d'enregistrements d'une requete source
    Par kleenex dans le forum Access
    Réponses: 3
    Dernier message: 10/01/2006, 11h13

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