2009-07-14 6 views
0

Ci-dessous la requête entraîne aucune ligneproblème VBA requête SQL

lstResults.RowSource = "select EmpId from tblTesting where Empid ='" & Me.txtSearchEmpId.Value & "'" 

Où ci-dessous fonctionne bien:

lstResults.RowSource = "select * from tblTesting" 

Où est la faute ici? Je vérifie la valeur de « » & Me.txtSearchEmpId.Value & "'" en utilisant son point de rupture ayant la valeur de "123" (numérique)

Mon empid est la valeur numérique

S'il vous plaît aider

+0

S'il vous plaît prendre un certain temps pour apprendre un peu sur SQL. La table contient-elle des lignes pour EmpID = 123? Quel type de données est le champ EmpID? S'il s'agit d'un champ de texte, faites un TRIM sur txtSearchEmpID – shahkalpesh

Répondre

3

Si votre EmpId est numérique, vous voudrez probablement supprimer les guillemets simples:

lstResults.RowSource = "select EmpId from tblTesting where Empid = " & Me.txtSearchEmpId.Value 

Comment ça marche

+0

Merci pour l'aide – SmartestVEGA

+0

Vous êtes le bienvenu. Maintenant, vous pouvez vous appeler EvenSmarterVEGA :) – bernie

1

Tout d'abord, supprimez les guillemets simples autour de votre valeur, s'il s'agit réellement d'un nombre.

Deuxièmement, nettoyer votre entrée. Que se passe-t-il si quelqu'un tape 123 or true dans votre champ de saisie? Vous les avez ensuite laissé sélectionner toutes les entrées. Vous pouvez convertir la valeur en nombre entier, puis revenir à une chaîne pour vous assurer qu'elle est pure.

Voir xkcd #327: xkcd #327

+1

Exactement ce qui pourrait arriver s'ils ne le font pas? Souvenez-vous, le contexte est Access, et les risques d'injection SQL sont sévèrement limités dans Access par rapport aux autres environnements de programmation en raison du fait qu'Access/Jet ne peut pas exécuter d'instructions SQL par lots. –

+0

@David W. Fenton: Dans le txtSearchEmpId.Value, vous pouvez taper x '=' x et votre supposition que le jeu de résultats contiendra 1 ou zéro rangs est hors de l'eau, par exemple. pourrait révéler des informations que vous essayiez de restreindre. Difficile d'être spécifique à une instruction SQL ciblant une table nommée tblTesting;) – onedaywhen