sql
  • ms-access
  • vba
  • 2009-07-22 8 views 1 likes 
    1

    Ci-dessous la requête affiche l'erreurvba problème sql

    S'il vous plaît aider:

    DoCmd.RunSQL ("insert into tbltesting (IsDiff)values ('Yes') where empid= '" & Me.txtEmpId.Value & "' and testid= '" & Me.txtAutoNumber.Value & "'") 
    
    +0

    Quel est le message d'erreur? –

    +0

    Il n'y a pas de message d'erreur mais le contrôle se bloque en montrant une couleur jaune sur la ligne toutes les variables de la zone de texte ont des valeurs là quand je mets mon curseur sur les variables –

    +0

    Toute façon de faire ce travail ??? –

    Répondre

    2

    Je vais deviner que empid et testid sont numériques, et vous les mettez comme s'ils étaient des chaînes dans l'instruction SQL. Supprimez les guillemets simples que vous avez entourés vos références de champ.

    DoCmd.RunSQL (" Update tbltesting set IsDiff ='Yes' where empid= " & Me.txtEmpId.Value & " and testid= " & Me.txtAutoNumber.Value & ";") 
    
    +0

    Oui actuellement l'erreur disparue, mais les lignes udates il affiche comme "zéro" –

    +0

    il dit zéro lignes mises à jour à la place une ligne mis à jour –

    +0

    et je suis sûr qu'il existe un enregistrement dans la table –

    0

    Dans quelle mesure le EMPID existe déjà en tblTesting? Si oui, vous voulez une mise à jour:

    UPDATE tblTesting 
        SET IsDiff = 'Yes' 
    WHERE empid = ... 
    

    et je ne vais pas sur mon injection SQL ... caisses à savon

    Pourquoi avez-vous des guillemets autour de vos EmpID/valeurs testid? Sont-ils des cordes ou des chiffres? Si les chiffres, faites attention à ce que vous les passez pour éviter les erreurs de conversion.

    +0

    DoCmd.RunSQL ("Update tbltesting set IsDiff = 'Oui' où empid = '" & Me.txtEmpId.Value & "' et testid = '" & Me.txtAutoNumber.Value & "'") Ceci est encore donnant l'erreur –

    +0

    quelle est l'erreur? – n8wrl

    +0

    Il n'y a pas de message d'erreur mais le contrôle est bloqué en affichant une couleur jaune sur la ligne toutes les variables de textbox ont des valeurs quand je mets mon curseur sur les variables –

    1

    Eh bien, un problème est que votre requête est vulnérable à l'injection SQL. Jamais, jamais NE JAMAIS concaténer les valeurs des entrées utilisateur directement dans une chaîne de requête. A la place, utilisez un objet ADO.Command avec de vrais paramètres de requête ou un SQL paramétré exécuté avec DAO ou similaire.

    Here est un exemple.

    +0

    Pourriez-vous s'il vous plaît me montrer un exemple sur la façon dont j'ai besoin d'écrire une requête? –

    +0

    Pouvez-vous poster un exemple de travail de l'injection sql lors de l'utilisation de jet? –

    +0

    Albert, jetez un oeil à ce fil: http://stackoverflow.com/questions/512174/non-web-sql-injection/ - J'étais très sceptique, aussi, et conclu que la seule vraie vulnérabilité est toujours - vraies clauses WHERE, telles que True = True, car Jet/ACE ne peut pas exécuter plusieurs instructions SQL (le scénario d'injection SQL le plus défavorable habituel, par exemple, "; DROP TABLE ..."). –

    1

    Insérer crée/ajoute une nouvelle ligne à la table - l'enregistrement n'a jamais existé. La mise à jour modifie un ou plusieurs champs d'un enregistrement déjà enregistré dans la table. Par conséquent, une instruction d'insertion n'aurait pas de clause "where" - ce serait une instruction "update" que vous utiliseriez dans ce cas.

    Vous avez besoin soit (si vous créez un enregistrement flambant neuf dans votre DB) -

    DoCmd.RunSQL ("insert into tbltesting (IsDiff)values ('Yes') '") 
    

    Ou vous avez besoin (si vous changez certains champs dans un dossier déjà existant) -

    DoCmd.RunSQL ("update tbltesting set IsDiff = 'Yes' where empid= '" & Me.txtEmpId.Value & "' and testid= '" & Me.txtAutoNumber.Value & "'") 
    
    +0

    DoCmd.RunSQL ("Mettre à jour set tbltesting IsDiff = 'Oui' où empid = '" & Me.txtEmpId.Value & "' et testid = '" & Me.txtAutoNumber. valeur & « ' ») Cela donne encore l'erreur –

    +0

    Pourriez-vous essayer - Me.txtAutoNumber.Value.Tostring() de plus Pourriez-vous: 1) Construire une chaîne dire. «mySQLString » avec la déclaration de mise à jour 2) MsgBox (mySQLString) et 3) DoCmd.RunSQL (mySQLString)? Enfin, Quoi que vous obteniez dans le MsgBox, copiez-le et exécutez-le * en dehors de vba * ie directement contre la DB pour vérifier ce que l'erro R est? J'espère que cela pourra aider. – blispr

    Questions connexes