2011-04-11 49 views
1

我知道,有什么问题我的语法...... "select * from tblpayroll where empid = userid"请纠正我的SQL语法

用户ID是一个变量...

+2

你需要提供更多的细节。这是你正在写的存储过程吗? = @userid这是在你的VB代码?和userID是一个VB变量? ''select * from tblpayroll where empid =“&userId' – Prescott 2011-04-11 06:22:26

+0

我已经提供了我的问题的更多细节......但我让它更简单...希望你能帮助我。在此先感谢 – aer 2011-04-11 07:58:38

+0

请不要以自然完全改变的方式编辑您的问题。它使所有的答案日期无用。如果你有一个根本不同的问题(尽管关于同一个程序,它有根本的不同),请问另一个问题。 – paxdiablo 2011-04-11 08:20:37

回答

0

文本"select * from tblpayroll where empid = userid"将通过发送正是因为是到SQL后端,则userid部分将不会被取代。所以,除非你有一个userid列,否则你可能会得到一个错误。即使你有一个userid列,结果将不会是你所期望的。

您需要做什么取决于userid是数值还是字符串值。对于数字,您可以使用:

"select * from tblpayroll where empid = " & CStr(userid) 

这将首先将数字值转换为字符串并按原样进行检查。

对于字符串值,使用:

"select * from tblpayroll where empid = '" & userid & "'" 

这将只需用引号括起来,以确保一个字符串比较的作品。您需要意识到,如果userid未被清除,这是一个坏主意 - 它可能会导致SQL注入攻击。修复这个艺术超出了这个特定问题的范围,但值得记住。

如果您的变量是数字,但数据库字段是字符串,该怎么办是另一回事。你可以用CStr和zero-padding来做,但由于这不太可能发生,所以我在这里没有记录它。

+0

......这对我有帮助,但它只能得到一组记录。我的意思是,例如UserID的值是A52,因此,具有A52的用户ID的所有记录必须分别出现在文本框中。 – aer 2011-04-11 06:45:14

+1

@aerohn,该查询将返回满足该条件的所有行。如果您只获得一个,那么(1)只有一行,如果该表是一个员工类型的表(每个员工一行)而不是一个payrun类型的表(例如,每个员工每行一行月);或者(2)您没有正确处理返回的行集。 – paxdiablo 2011-04-11 06:49:30

+0

请看看我的工作。我编辑了我的问题... – aer 2011-04-11 07:57:20

2

显然,这是你的VB变量。

select * from tblpayroll where empid = '" & userid & "' " 

使用这种方式,它会工作

+0

...这对我有帮助,但它只获得一组记录。我的意思是,例如,UserID的值是* A52 *,所以具有* A52 *的用户ID的所有记录必须分别出现在文本框中。 – aer 2011-04-11 06:37:44

+0

@aerohn这是一个非常不同的问题。如果你想得到答案,请在这里标记其中一个答案是正确的,并提供一个新问题,详细说明你如何从数据库获取数据以及你拥有哪些文本框 - 你可能希望提供代码以便人们可以理解你在问什么 – Prescott 2011-04-11 20:42:12