PARAMETERS 查用户ID Long; access中手工打开查询表如何使用查询参数? 如果VB6 ADO打开该查询表,如何传递参数?
在 Access 中使用查询参数以及通过 VB6 ADO 打开查询表并传递参数的方法如下:
一、Access 中手工打开带参数的查询表
1. 创建参数查询
在 Access 查询设计器中:
PARAMETERS 查用户ID Long;
SELECT * FROM 表名 WHERE 用户ID = [查用户ID];
2. 手工运行时的操作
-
打开查询时,Access 会自动弹出参数输入对话框
-
输入 Long 类型的数值参数即可
二、VB6 ADO 打开参数查询的几种方法
方法1:使用 Command 对象(推荐)
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的数据库路径.mdb;"
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = conn
.CommandType = adCmdStoredProc ' 或 adCmdUnknown
.CommandText = "你的查询名称"
.Parameters.Refresh ' 自动获取参数信息
.Parameters("查用户ID").Value = 123 ' 传入参数值
End With
Set rs = cmd.Execute
方法2:直接在 SQL 中传递参数
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set conn = New ADODB.Connection
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的数据库路径.mdb;"
' 方法2a:使用参数化查询
sql = "PARAMETERS 查用户ID Long; " & _
"SELECT * FROM 表名 WHERE 用户ID = [查用户ID]"
Set rs = New ADODB.Recordset
rs.Open sql, conn, adOpenStatic, adLockReadOnly, adCmdText
rs.ActiveCommand.Parameters("查用户ID").Value = 123
' 方法2b:直接拼接SQL(不推荐,有SQL注入风险)
sql = "SELECT * FROM 表名 WHERE 用户ID = " & CStr(用户ID值)
rs.Open sql, conn
方法3:使用 QueryDef 对象(DAO)
Dim db As Database
Dim qdf As QueryDef
Dim rs As Recordset
Set db = OpenDatabase("你的数据库路径.mdb")
Set qdf = db.QueryDefs("你的查询名称")
qdf.Parameters("查用户ID").Value = 123
Set rs = qdf.OpenRecordset()
三、完整示例代码
Public Sub OpenParameterQuery()
On Error GoTo ErrorHandler
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim strConn As String
' 数据库连接字符串
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\你的数据库.mdb;"
' 创建连接
Set conn = New ADODB.Connection
conn.Open strConn
' 创建命令对象
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = conn
.CommandText = "你的参数查询名称" ' 查询名称
.CommandType = adCmdStoredProc
' 刷新参数集合
.Parameters.Refresh
' 设置参数值
.Parameters("查用户ID").Value = 123 ' 你的参数值
' 执行查询
Set rs = .Execute
End With
' 处理结果集
If Not rs.EOF Then
rs.MoveFirst
Do While Not rs.EOF
Debug.Print rs.Fields("字段名").Value
rs.MoveNext
Loop
Else
MsgBox "没有找到记录"
End If
Cleanup:
If Not rs Is Nothing Then rs.Close
If Not conn Is Nothing Then conn.Close
Set rs = Nothing
Set cmd = Nothing
Set conn = Nothing
Exit Sub
ErrorHandler:
MsgBox "错误: " & Err.Description
Resume Cleanup
End Sub
四、注意事项
-
参数名称必须完全匹配(包括大小写)
-
先调用 Parameters.Refresh 获取参数信息
-
参数数据类型要匹配声明中的 Long 类型
-
使用 Command 对象比直接打开 Recordset 更可靠
-
确保数据库连接字符串正确
推荐使用 Command 对象的方式,因为它提供了更好的类型检查和安全性。
33

被折叠的 条评论
为什么被折叠?



