2010-09-03 4 views
0

Je vous écris cette fois car un VBScript que l'une des applications de mon entreprise utilise pour extraire des informations d'une base de données Oracle ne semble pas fonctionner correctement. Voici les faits:VBScript n'exécutant pas statment SQL correctement

  1. Il fait partie 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. Tracer l'aide d'un Statement pour Oracle (www.aboves.com) Je peux capturer cette même instruction avec sa valeur correspondante:

    SELECT REQ_PAYMODE FROM SYSADM.GBPRESTAT IEGROEP 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 ce dernier ligne de code, le script génère une erreur qui indique:

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

Ce qui signifie essentiellement que la requête dans (3) n'est pas correct, ce qui signifie que pour une raison quelconque sRequestPaymodeKey est vide. Je ne peux pas le dire avec certitude car cette instruction sql défaillante n'apparaît pas dans l'instruction tracer, mais c'est la seule explication que j'ai pu trouver. Cependant, la pire partie est que lors de l'exécution de la requête (2) sur SQLDeveloper (c'est de là que vient la valeur sRequestPaymodeKey) il montre une ligne avec une valeur autre que null ou zéro.

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

Des suggestions de votre part? De toute façon je peux réellement déboguer un fichier VBE?

Votre aide est grandement appréciée!

+0

Pouvez-vous ajouter un enregistrement à votre script vb qui écrit les valeurs de vos variables dans un fichier? – BG100

+0

Oui, j'ai fait ça. Je mets un msgbox dans la première instruction sql et cela montre que la variable sKeyPrestatiegroep a la bonne valeur, mais elle ne renvoie juste pas de lignes quand elle est exécutée – danboh

+0

Quelque chose ne se cumule pas ici. Si oRSGBPrest ne renvoie aucune ligne, vous devriez recevoir une erreur lorsque vous affectez sRequestPaymodeKey parce que vous essayez d'accéder à des champs dans un jeu d'enregistrements vide. – Tmdean

Répondre

1

Vous devez lancer sRequestPaymodeKey en tant que vbLong qui correspond à l'INT de sql. Je suppose que PAM_KEY est un INT. Un jeu d'enregistrements renverra une valeur de chaîne. Ainsi, votre code ressemblerait à 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 

De plus, pensez à paramétrer vos requêtes pour éviter l'injection SQL.

1

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-ce valide? Est-ce qu'il fonctionnera dans un analyseur de requête Oracle (s'il y en a un)?

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

+0

Bonnes idées DaveB. – crackedcornjimmy

Questions connexes