2012-03-21 156 views
0

我正在使用MS ACCESS,我正在更改组合框的afterupdate事件中窗体的recordource。下面是使用这个sql语句有什么问题?

Me.RecordSource = "SELECT * FROM qryMIMATRIX WHERE qryMIMATRIX.A_LOCATION = " & Me.cboLocate.Value & ";" 

cboLocate SQL查询的组合框的名称和qryMIMATRIX是查询的名称。 上的更新后事件我提示输入未desirable.Help我出去参数..

+0

我对我下面的SQL注入的评论相当严重的价值。正如你的问题所在,你将面临严重的安全问题。默认情况下,组合框允许您手动输入文本,而不仅仅是从列表中选择。这意味着有人可以输入类似...... somevalue; DROP TABLE等等等等...... – 2012-03-21 11:04:11

+0

将组合的“限制列表”属性设置为“是”可防止注入到RecordSource SQL语句中。但是,Access的数据库引擎不容易受到DROP TABLE类型的注入攻击,因为它只能处理一条语句......你不能用分号连接2条语句,并期望引擎执行两条语句。 – HansUp 2012-03-21 14:20:01

回答

1

如果a_loaction领域是你需要用引号包裹字符串值类型:

"SELECT * FROM qryMIMATRIX WHERE qryMIMATRIX.A_LOCATION = '" & Me.cboLocate.Value & "'"

+0

很快就得到答案,真的。谢谢!我希望我能快速弄清楚这些事情。 – user1175126 2012-03-21 10:57:21

+0

这一个似乎没有工作,我用了相同的逻辑:“SELECT * FROM qryMIMATRIX WHERE qryMIMATRIX.A_LOCATION ='”&Me.cboLocate.Value&“'AND qryMIMATRIX.A_PRIORITY ='”&Me.cboPrior。值&“'”A_PRIORITY是整数,从1到5 – user1175126 2012-03-21 11:09:33

1

什么查询错误...

  1. 阅读SQL注入...现在,我会等待。
    ...
    ...
  2. 不要选择* .....不是一个好的做法,指定列。
  3. 你可能需要引用从下拉列表框
+0

对不起,我很无知,但是什么是sql注入的全部?我想我需要google关于这个。我会检查出来。截至目前,我认为我可以将LimitToList属性用于Yes,那样会好吗? – user1175126 2012-03-21 11:14:25

+1

是的,你应该阅读它,这很重要。另外,它很容易修复。有数百篇(可能是1000篇)讨论它的文章。这是一个很好的例子。 http://weblogs.asp.net/scottgu/archive/2006/09/30/Tip_2F00_Trick_3A00_-Guard-Against-SQL-Injection-Attacks.aspx – 2012-03-21 11:26:16

+0

Thanks.I'm去检查,但我的查询呢? – user1175126 2012-03-21 11:52:36