1

我正在开发一个使用 vbscript 访问、读取和更新 MS Access 数据库的 HTA。我希望能够选择当前 Windows 用户名与数据库中的“用户”列匹配的所有记录。

我之前使用过下面的示例来收集 Windows 用户名,但是在尝试插入strSender查询时我没有任何运气。

Set wshShell = CreateObject( "WScript.Shell" )
strSender = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )

任何建议表示赞赏。

谢谢。

添加于 02-01-13:

这是一个片段,可让您了解我要做什么。

Dim conn

sub dotheconnection

Set conn = CreateObject("ADODB.Connection")

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=./Database/data.mdb; User Id=; Password="

If conn.errors.count <> 0 Then 

    alert("problem connecting to the database")
else
    getdata

end if
end sub

sub getdata

SQL_query = "SELECT * FROM MyDatabase ORDER BY Team, Status, Employee"
Set rsData = conn.Execute(SQL_query)

strHTML = strHTML & "<table id='data_table' cellspacing='0' cellpadding='4' border='1'><tr><td bgcolor='#000000'><font color='blue'><b>Employee</b></font></td><td bgcolor='#000000'><font color='blue'><b>Team</b></font></td><td bgcolor='#000000'><font color='blue'><b>Status</b></font></td></tr>"
Do Until rsData.EOF = True
strHTML = strHTML & "<tr class='in_out'><td onclick='deleteUser("& rsData("ID") &")' language='vbscript' style='cursor:hand; color:red'>del</td><td>" & rsData("Employee") & "</td><td>" & rsData("Team") & "</td><td><b>" & rsData("Status") & " </b></td> <td onclick='editUser("& rsData("ID") &")'language='vbscript' style='cursor:hand; color:red'>Edit</td></tr>"
rsData.moveNext ' go to next record
Loop

strHTML = strHTML & "</table>"
thediv.innerHTML = strHTML


SQL_query = "SELECT Count(*) AS intTotal FROM MyDatabase"
Set rsData = conn.Execute(SQL_query)
strHTML1 = strHTML1 & "<b>Number of Users: </b>"
strHTML1 = strHTML1 & "" & rsData("intTotal") & ""
Count.innerHTML = strHTML1
end sub
4

2 回答 2

1

我将此参数查询保存为qryFetchUserRecords

PARAMETERS which_user Text ( 255 );
SELECT yt.*
FROM YourTable AS yt
WHERE yt.User=[which_user];

此 VBScript 使用来自该查询的结果集加载 ADO 记录集。它使用命名查询作为连接对象的“方法”,并将参数值作为参数提供给该方法。

Dim cn ' As ADODB.Connection
Dim rs ' As ADODB.Recordset
Dim strSender ' As String

Set cn = CreateObject("ADODB.Connection")
cn.Open "your connection string"
Set rs = CreateObject("ADODB.Recordset")
strSender = CreateObject("WScript.Network").UserName
cn.qryFetchUserRecords strSender, rs
' do stuff with recordset here
rs.Close
Set rs = Nothing
Set cn = Nothing

如果您不想使用已保存的查询,可以使用 ADO Command 对象并在执行之前将参数添加到其中。但这对我来说似乎是不必要的额外努力。

当心User是一个保留字,因此可以通过在语句中将其括在方括号中来避免麻烦SELECT,或者像我在该示例中所做的那样使用表名或别名对其进行限定。

于 2013-01-31T23:19:08.093 回答
0

看起来您可能需要 WScript.NetWork 对象。请参阅此处的示例:http: //www.codeproject.com/Articles/1422/Getting-User-Information-Using-WSH-and-VBScript

于 2013-01-31T22:33:28.527 回答