Question

Je vous écris cette fois parce qu'un VBScript que l'une des applications mes usages de l'entreprise pour récupérer des informations à partir d'une base de données Oracle ne semble pas fonctionner correctement. Voici les faits:

  1. Il part de du code qui effectue les opérations suivantes:

    sSql = "SELECT REQ_PAYMODE" & _
      "  FROM SYSADM.GBPRESTATIEGROEP" & _
      " WHERE 1=1" & _
      "   AND SLEUTEL = " & sKeyPrestatiegroep 
    
    Set oRSGBPrest = connADO.execute(sSql)
    If Not oRSGBPrest.EOF Then
      sRequestPaymodeKey = oRSGBPrest("REQ_PAYMODE")
    Else
     //error handling
    End If
    
  2. Utilisation d'une instruction Tracer je peux saisir cette même déclaration Oracle (www.aboves.com) avec sa valeur correspondante:

      

    SELECT REQ_PAYMODE DE   SYSADM.GBPRESTATIEGROEP 1 = 1 ET   SLEUTEL = 1572499

  3. Maintenant, le VBScript est censé prendre cette valeur et exécuter une autre requête:

    sSql = "SELECT PAM_CODE" & _
              "  FROM SYSADM.PAYMODES" & _
              " WHERE 1=1" & _
              "   AND PAM_KEY = " & sRequestPaymodeKey
    
    Set oRSPaymodes = connADO.execute(sSql)
    

Droit dans cette dernière ligne de code, le script renvoie une erreur qui dit:

ORA-00936: expression manquant à la ligne XXX -> Set oRSPaymodes = connADO.execute (sSQL) <-

Ce qui essentiellement signifie que la requête en (3) n'est pas correct, ce qui signifie que aussi pour une raison quelconque sRequestPaymodeKey est vide. Je ne peux pas affirmer avec certitude parce que ce ne sql déclaration ne figure pas dans le traceur de déclaration, mais c'est la seule explication que je pouvais trouver. Cependant, le pire est que lors de l'exécution de la requête (2) sur sqldeveloper (d'où la valeur sRequestPaymodeKey vient) il montre une ligne avec une valeur autre que nulle ou zéro .

Je ne peux pas penser à autre chose qui pourrait se produire ici, peut-être qu'il est juste une chose du serveur ... aucune idée.

Toutes les suggestions de vous les gars? De toute façon je peux réellement déboguer un fichier VBE?

Votre aide est très appréciée!

Était-ce utile?

La solution

Vous devez sRequestPaymodeKey coulé comme vbLong qui correspond à l'INT de sql. Je suppose PAM_KEY est un INT. Un jeu d'enregistrements renvoie une valeur de chaîne. Donc, votre code ressemblera à ceci:

If IsNumeric(sRequestPaymodeKey) Then
     sSql = "SELECT PAM_CODE" & _ 
            "  FROM SYSADM.PAYMODES" & _ 
            " WHERE 1=1" & _ 
            "   AND PAM_KEY = " & CLng(sRequestPaymodeKey)

     Set oRSPaymodes = connADO.execute(sSql)
Else
     'do error handling due to bad returned data(empty string?)
End If

Aussi, pensez à vos requêtes pour paramétrer éviter l'injection sql.

Autres conseils

Quelques idées à essayer:

  1. Avant Set oRSPaymodes = connADO.execute(sSql), mettre dans un MsbBox et voir ce que SQL est en cours d'exécution. Est-il valide? Est-ce que fonctionner dans un analyseur de requêtes Oracle (s'il y en a un)?

  2. Code dur une valeur valide à la place de sRequestPaymodeKey. Est-ce que ça marche alors?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top