【发布时间】:2018-07-13 03:24:54
【问题描述】:
我正在尝试从 VBA(使用以下代码)更新 SQL 表,但似乎无法正确。我想根据 A、B、C、D、E 的搜索条件更新第一、二、三和四列。我在这里做错了什么?没有给出错误,但表只是没有更新?谢谢
Sub UpdateData(A As String, B As String, C As String, D As String, E As String, one As Double, two As Double, three As Double, four As Double)
Dim sA As String, sB As String, sC As String, sD As String, sDesk As String, sE As String
Dim sone As Double, stwo As Double, sthree As Double, sfour As Double
Dim objConn As ADODB.Connection
Set objConn = New ADODB.Connection
objConn.ConnectionString = "Provider=SQLOLEDB;Data Source=source;Initial Catalog=Model_table;Integrated Security=SSPI"
objConn.Open
Set objRec = New ADODB.Recordset
Date = Format(Range("date").Value, "YYYY-MM-DD")
sA = A
sB = B
sC = C
sD = D
sE = E
sone = one
stwo = two
sthree = three
sfour = four
StrSQL = "UPDATE pnl_results SET (" & sone & "," & stwo & "," & sthree & "," & sfour & ") Where ('" & date = sDate & "', '" & AA= sA & _
"','" & BB= sB & "','" CC= & sC & "','" & DD= sD & "','" & EE=sE & ")"
Set objRec = objConn.Execute(StrSQL)
objConn.Close
Set objConn = Nothing
End Sub
【问题讨论】:
-
这里的一个大问题是这个查询对sql注入很开放。首先,您应该考虑对此进行参数化。
-
我同意参数化它会更好,但如果编码器控制所有变量,则确实没有必要。
-
@braX 缺乏经验的程序员正是需要学习如何使用参数的人。如果有一些教学正在进行,学习并不是那么难。除了以正确的方式去做之外的任何事情都是对危险代码感到满意的标志。这是不可接受的。如果您知道如何使用参数并且不教人们如何保护自己,那么您就是在伤害他们。
-
此外,鉴于你们所有人对实际问题的回答如此严格,这个问题是关于 SQL 语法的。告诉人们使用参数实际上并不能回答问题。
-
@braX meh.. cmets(甚至聊天)不适合这个......这是一个很好的讨论我希望我们都可以喝啤酒!干杯!
标签: sql vba sql-update