【发布时间】:2021-01-14 21:12:47
【问题描述】:
我有一个从 SQL 查询接收数据的 HTA(html 应用程序),但是当我尝试将结果粘贴到列表框中时,它只给出最后一条记录。
Dim connect, sql, resultSet, pth, txt
Set connect = CreateObject("ADODB.Connection")
connect.ConnectionString = "Driver={SQL Server};Server=XXX;Database=XXX;trusted_connection=True;"
connect.Open
sql = "SELECT [Var0],[Var1],[Var2],[Var3], [Var4], [Var5] FROM [XXX].[dbo].[Table]"
sql = sql & " WHERE [Var3]='" & FieldUser.value & "' and [Var0]='" & YEAR(Date()) & "-" & RIGHT("00"&MONTH(Date()),2) & "-" & RIGHT("00"&DAY(Date()),2) & "'"
sql = sql & " ORDER BY [Var0] desc ,[Var1] desc"
Set resultSet = connect.Execute(sql)
On Error Resume Next
resultSet.MoveFirst
Do until resultSet.eof
objOption3.Text = ""
if resultSet(0) <> "" then
'msgbox(resultSet(0) & " ~ " & resultSet(1) & " ~ " & resultSet(2) & " ~ " & resultSet(3) & " ~ " & resultSet(4) & " ~ " & resultSet(5))
objOption3.Text = resultSet(1) & " ~ " & resultSet(3)
objOption3.Value = resultSet(0) & ";" & resultSet(1) & ";" & resultSet(2)
RegListView.Add (objOption3)
end if
resultSet.MoveNext
Loop
resultSet.Close
connect.Close
Set connect = Nothing
当我取消注释 MsgBox 时,我可以看到所有记录都已找到,但它只输出最后一条记录(似乎迭代查询正确但仅在连接关闭时执行添加操作?)
如何让它输入列表框中的所有记录?
我尝试更改 Add 行但没有成功 - 我更改为:
document.all.RegListView.add(objOption3)
我还尝试将 resultSet 输出为数组 - 我可以让 msgbox 正确显示数组中的记录,但它没有添加到列表框中 - 也许有人可以帮助我以这种方式解决它?
连接内部:
dim dbarray
dbarray = resultSet.getrows
连接关闭后:
for i=1 to 100
objOption3.Text = ""
objOption3.Value = ""
if dbarray(0,i) <> "" then
msgbox (dbarray(1,i) & " ~ " & dbarray(3,i))
objOption3.Text = dbarray(1,i) & " ~ " & dbarray(3,i)
objOption3.Value = dbarray(0,i) & ";" & dbarray(1,i) & ";" & dbarray(2,i)
RegListView.Add (objOption3)
end if
next
我真的希望得到一些帮助:)
添加: 这是 HTA 的 HTML 正文:
<body>
<table style="width:100%">
<h1>OpgaveTid for <span id="TextUser"></span><span style="padding-left:90px"><input type="button" value="Mindre" id="SendBtnMinimer" style="width: 50px;" onclick="vbscript:Minimeropgavetid()"/></h1>
<tr>
<td>
<label for="FieldSearchOrg">Search Org:</label><br>
<input type="text" id="FieldSearchOrg" name="FieldSearchOrg" onchange="vbscript:FuncSearchOrg()" tabindex="1" size=8>
<input type="button" value="Save" id="SendBtn" onclick="vbscript:SaveAction()" tabindex="3"/>
<input type="button" value="Part" id="SendBtn" onclick="vbscript:SavePartAction()" tabindex="4"/>
<input type="hidden" id="FieldOrgText" name="FieldOrgText" readonly="yes">
<input type="hidden" id="FieldUser" name="FieldUser" readonly="yes">
<input type="hidden" id="FieldUserGroup" name="FieldUserGroup" readonly="yes">
</td>
<td>
</td>
</tr>
<tr>
<td>
<label for="OrgListView">Orglist:</label><br>
<select size="28" name="OrgListView" style="width:160" multiple="no" onchange="vbscript:FuncSelectOrg()" tabindex="2"></select><br><br>
<label for="RegListView">My registrations: (Tryk F5 for at opdatere)</label><br>
<select size="14" name="RegListView" style="width:160" multiple="no" onchange="vbscript:FuncSelectHistReg()"></select><br><br>
<input type="button" value="Edit registration" id="UpdateReg" style="width: 150px;" onclick="vbscript:UpdateReg()"/>
<input type="button" value="Delete registration" id="DeleteReg" style="width: 150px;" onclick="vbscript:DeleteReg()"/><br><br>
</td>
<td>
</td>
</tr>
</table>
</body>
【问题讨论】:
-
删除
On Error Resume Next以查看实际错误。您能否也请edit 提出问题,以便它显示RegListView在HTML 中所指的内容? -
您可能想要查找“SQL 注入”。另请参阅xkcd.com/327
-
@Lankymart :删除
On Error Resume Next没有显示任何错误。 @GeertBellekens:你能给我一个关于“SQL 注入”的提示吗? - 我找不到任何可以解决我问题的方法 -
@NickiRB 这很好,在调试问题时,您不想使用
On Error Resume Next隐藏任何错误。 -
@NickiRB 在 HTML 中有一些奇怪的语法 在事件处理程序中使用
vbscript:名字是不必要的,它主要与超链接的href属性一起使用以触发事件处理程序从一个链接。正如 Geert 指出的那样,您需要仔细考虑 SQL 注入,这对于 HTA 来说并不是一个大问题,但如果您允许将数据从 HTA 上的字段直接传递到 SQL 查询中,您可能会被滥用。
标签: sql vbscript listbox adodb hta