Convertion SQL en VBA
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Convertion SQL en VBA



  1. #1
    invite5b91726d

    Convertion SQL en VBA


    ------

    Bonjour,

    Je cherche à mettre la valeur d'un attribut d'un requête sql dans une variable String, le tout dans une macro en VBA. A noter que la connexion au serveur et le lancement de la requete SQL sont fait par la macro ainsi que la récupération de la valeur de l'attribut.

    Quand la valeur de l'attribut n'est pas vide, il n'y a aucun soucis tandis que dans l'inverse, la macro bug, j'ai essayé de contourner le problème par différentes solutions mais aucune n'a fonctionné, les voici :

    Dim var as string
    ...
    lancement de la requête
    ...
    if oRs("cvoie") is null then
    var = ""
    else
    var = oRs("cvoie")
    end if
    ...

    j'ai tenté comme condition pour les if :
    if oRs("cvoie") = null then
    if oRs("cvoie") is empty then
    if oRs("cvoie") = empty then
    if oRs("cvoie") = "" then

    Aucune ne fonctionne, je veux juste pouvoir mettre la valeur de l'attribut "cvoie" dans une variable, mais lorsque l'attribut est vide, le programme bug.

    J'ai regardé l'option pour voir l'évolution de l'attribut "cvoie", il m'indique bien "null", mais en type, il m'indique "Variant/Object/Field", là, je ne sais pas trop à quoi cela correspond, je suis bloqué.

    Si quelqu'un a une piste pour m'aider, ce serait très gentil, merci d'avance.


    -----

  2. #2
    inviteba9bce0d

    Re : Convertion SQL en VBA

    Je suis loin d'être un pro du VBA, par contre quand tu dis récupérer la valeur de l'attribut d'une requête, tu veux dire qu'elle ne retourne qu'un unique résultat ? Que ce passe-t-il si elle renvoie plusieurs valeurs ? (Utilise un Recordset dans ce cas)

    Ce serait possible d'avoir tout le code avec la structure des tables ?

  3. #3
    invite5b91726d

    Re : Convertion SQL en VBA

    Voici une partie du programme :

    sub main()
    'init de la page excel à compléter
    Dim num As Integer
    Dim path As String
    Dim xlsfile, projectname As String
    Dim scriptname As String
    Dim LogPath As String
    scriptname = Me.Name
    projectname = get_projet_name(scriptname)
    xlsfile = "\" & projectname & "\TRI.xls"
    num = 1 'worksheet number
    path = TmpDir & xlsfile
    initiate path, num

    'init de la requête SQL
    Dim Cnxn: Set Cnxn = CreateObject("ADODB.Connection ")
    Dim oRs: Set oRs = CreateObject("ADODB.Recordset" )
    Dim strCnxn As String
    Dim requete As String
    Dim message As String
    Dim com1 As String
    Dim com2 As String
    Dim voie1 As String
    Dim voie2 As String
    Dim i As Integer

    'ouverture de la connexion
    strCnxn = "Driver={Microsoft ODBC pour Oracle}; " & _
    "CONNECTSTRING=*****; uid=********;pwd=*******;"
    Cnxn.Open strCnxn


    'programme
    requete = "select ........."
    Set oRs = Cnxn.Execute(requete)
    oRs.MoveFirst
    'init
    com2 = ""
    voie2 = ""
    i = 1
    'boucle pour lire chaque ligne de la requête
    Do While Not oRs.EOF

    com1 = oRs("ccom")

    'partie du code qui ne fonctionne pas
    'If oRs("cvoie") = Empty Then
    'voie1 = ""
    'Else
    'ligne de code qui bug lorsque la requête ne renvoie pour l'attribut oRs("cvoie")
    'voie1 = oRs("cvoie")
    'End If

    'If (voie1 <> voie2) And (com1 = com2) Then
    'cell = "A" & i + 1
    'WriteText cell, oRs("nua")
    'cell = "B" & i + 1
    'WriteText cell, oRs("cdep")
    'cell = "C" & i + 1
    'WriteText cell, oRs("ccom")
    'cell = "D" & i + 1
    'WriteText cell, oRs("cvoie")
    'i = i + 1
    'com2 = oRs("ccom")
    'voie2 = oRs("cvoie")
    'End If

    'partie di code qui fonctionne car l'attribut oRs("ccom") est toujours rempli
    If com1 <> com2 Then
    cell = "A" & i + 1
    WriteText cell, oRs("nua")
    cell = "B" & i + 1
    WriteText cell, oRs("cdep")
    cell = "C" & i + 1
    WriteText cell, oRs("ccom")
    cell = "D" & i + 1
    WriteText cell, oRs("cvoie")
    i = i + 1
    com2 = oRs("ccom")
    End If

    oRs.MoveNext

    Loop

    'fermeture de la connexion SQL
    Cnxn.Close
    Set Cnxn = Nothing

    close_file 'enregistrement du fichier excel et fermeture

    end sub

  4. #4
    JPL
    Responsable des forums

    Re : Convertion SQL en VBA

    S'il te plaît peux-tu utiliser la balise Code pour garder les indentations dans le listing ? Merci.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  5. A voir en vidéo sur Futura
  6. #5
    inviteba9bce0d

    Re : Convertion SQL en VBA

    Je pense que çà vient de la gestion des donnée (table SQL). Le déboguage donne quoi ? oRs("cvoie") affiche ce qui est attendu ? Ce serait possible d'avoir la requête entière et la structure des tables.

  7. #6
    invite5b91726d

    Re : Convertion SQL en VBA

    J'ai trouvé une solution avec la fonction

    IsNull(MonRecordset("MonChamp" ).Value) qui renvoie une valeur booléenne suivant le résultat

    à noter que du fait faire

    if oRs("cvoie").value is null

    fonctionne aussi

  8. #7
    inviteba9bce0d

    Re : Convertion SQL en VBA

    Oui, ce que je comprend pas c'est que tes parties du code qui fonctionnés n'avaient pas de propriété Value (enfin, tu ne les utilisait pas). Parfois faut pas chercher avec VBA

Discussions similaires

  1. Sql !!
    Par invite1bc2614c dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 05/04/2009, 13h37
  2. SQL ou Access ????
    Par invite40ef4a95 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 09/10/2008, 17h10
  3. SQL et JavaScript
    Par guigui-x dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 16/05/2007, 13h05
  4. help en sql
    Par invitebb36e395 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 09/12/2005, 15h58
  5. Sql free
    Par invite98afdcc1 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 02/02/2005, 15h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.