sqlstr = "select * from 员工 where 姓名 ='" & text1.Text & "'" DataEnvironment1.Commands("Command1").CommandText = sqlstr End Sub
那个是一般的SQL语句,我想知道能不能作用与带参数的SQL的语句比如: PARAMETERS pID Text ( 20 ); SELECT * FROM Equipment WHERE (((Equipment.ldck_id)=[pID])); 这样的。
用DE不知道行不行,不过用ADO一定是可以的,建议你改用ADO来生成记录集...
给我的感觉,VB的这个DE,最好的用处,就是可以用来学习ADO的SHAPE命令......
ADO是支持PARAMETERS的,感觉DE可能不行......
可以,将 Command 的 SQL 定义为 SELECT * FROM Equipment WHERE ? 然后到属性页 Parameters 中给参数指定名称、类型、长度等。
基本上我这样测试的。可能不是很成熟,希望能帮我看看 Private cm As New Command '定义命令对象 Private rs As New Recordset '定义纪录集对象 Private p As New Parameter '定义参数对象 Private cn as new connection '**********************************数据库连接*********** Private Sub Form_Load() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _ "\test.mdb" end sub '***********************************test funtion********* public function test() On Error Resume Next Set cm = DataEnvironment1.Commands("Command1") '设置command对象的运行参数 cm.ActiveConnection = cn cm.CommandType = adCmdStoredProc cm.CommandText = "qryGetAuthorByID" '为参数查询提供参数值 Set p = cm.CreateParameter("pID", adInteger, adParamInput, , txtID.Text) '把参数对象添加到命令对象中 cm.Parameters.Append p '执行查询并把结果返回到记录集中 Set rs = cm.Execute '显示记录集中的记录 If rs.EOF And rs.BOF Then MsgBox "No authors found." Else MsgBox "Author= " & rs.Fields("meter_id").Value End If end function
既然用了ADO,干嘛还用DE,有个示例片段,参考下: str = "PARAMETERS @1 text,@2 int;" sql = str & "SELECT * FROM tb WHERE iName=@1 And qty=@2" Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = sql cmd.CommandType = adCmdText Set param = cmd.CreateParameter("@1", adChar, adParamInput, 20, txtName.Text) cmd.Parameters.Append param Set param = cmd.CreateParameter("@2", adBigInt, adParamInput, 4, txtQty.Text) cmd.Parameters.Append param Set rs = New ADODB.Recordset Set rs = cmd.Execute Debug.Print rs!iName & " / " & rs!qty Set rs = Nothing Set cmd = Nothing Set cn = Nothing
漏了 SELECT * FROM Equipment WHERE Equipment.ldck_id=?
调用方式 Private Sub Command1_Click() DataEnvironment1.Command1 "abc" '参数与你的 Command1 定义是一致的 Debug.Print DataEnvironment1.rsCommand1.GetString() End Sub
回10楼:我用DE进行的数据打印。所以才想用DE来做查询,这样连接报表的时候可以轻松点。不要在去动态报表输出,一大段的代码。 回11楼:会面的问号其实就是我们要输入的参数,PARAMETERS pID Text ( 20 ); SELECT * FROM Equipment WHERE (((Equipment.ldck_id)=[pID])); 代码中的PID就是定义的参数。目前我遇到的难题是不知道如何把参数传递给DE中的COMMAND
Dim sqlstr As String
sqlstr = "select * from 员工 where 姓名 ='" & text1.Text & "'" DataEnvironment1.Commands("Command1").CommandText = sqlstr
End Sub
PARAMETERS pID Text ( 20 );
SELECT *
FROM Equipment
WHERE (((Equipment.ldck_id)=[pID]));
这样的。
用DE不知道行不行,不过用ADO一定是可以的,建议你改用ADO来生成记录集...
SELECT * FROM Equipment WHERE ?
然后到属性页 Parameters 中给参数指定名称、类型、长度等。
Private cm As New Command '定义命令对象
Private rs As New Recordset '定义纪录集对象
Private p As New Parameter '定义参数对象
Private cn as new connection
'**********************************数据库连接***********
Private Sub Form_Load()
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _
"\test.mdb"
end sub
'***********************************test funtion*********
public function test()
On Error Resume Next
Set cm = DataEnvironment1.Commands("Command1")
'设置command对象的运行参数
cm.ActiveConnection = cn
cm.CommandType = adCmdStoredProc
cm.CommandText = "qryGetAuthorByID"
'为参数查询提供参数值
Set p = cm.CreateParameter("pID", adInteger, adParamInput, , txtID.Text)
'把参数对象添加到命令对象中
cm.Parameters.Append p
'执行查询并把结果返回到记录集中
Set rs = cm.Execute
'显示记录集中的记录
If rs.EOF And rs.BOF Then
MsgBox "No authors found."
Else
MsgBox "Author= " & rs.Fields("meter_id").Value
End If
end function
sql = str & "SELECT * FROM tb WHERE iName=@1 And qty=@2"
Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandText = sql
cmd.CommandType = adCmdText
Set param = cmd.CreateParameter("@1", adChar, adParamInput, 20, txtName.Text)
cmd.Parameters.Append param
Set param = cmd.CreateParameter("@2", adBigInt, adParamInput, 4, txtQty.Text)
cmd.Parameters.Append param
Set rs = New ADODB.Recordset
Set rs = cmd.Execute
Debug.Print rs!iName & " / " & rs!qty
Set rs = Nothing
Set cmd = Nothing
Set cn = Nothing
SELECT * FROM Equipment WHERE Equipment.ldck_id=?
Private Sub Command1_Click()
DataEnvironment1.Command1 "abc" '参数与你的 Command1 定义是一致的
Debug.Print DataEnvironment1.rsCommand1.GetString()
End Sub
回11楼:会面的问号其实就是我们要输入的参数,PARAMETERS pID Text ( 20 );
SELECT *
FROM Equipment
WHERE (((Equipment.ldck_id)=[pID]));
代码中的PID就是定义的参数。目前我遇到的难题是不知道如何把参数传递给DE中的COMMAND
你的方法是可以,不过是在COMMAND中用SQL语句构造带参数的查询。其实我想测试的是如何用command直接调用ACCESS数据库中的查询(带参数的),遇到的问题是我不知道如何把参数通过command传递给access。通过数据内部的查询主要的好处是不容易出错,结果可以直接调用,不在通过中间层去解释查询语句,如此在一定意义上提高了查询速度。
SELECT *
FROM Equipment
WHERE (((Equipment.ldck_id)=[pID])); 创建一个 Command1,属性页中,Database Object 选 View,Object 输入 EquipmentByID,刷新一下对象。就可以调用
Private Sub Command1_Click()
DataEnvironment1.Command1 "abc" '参数名称就是 pID
Debug.Print DataEnvironment1.rsCommand1.GetString()
End Sub
所以我前几次一直没找到自己定义的查询。这次我没有去下拉菜单找而是直接自己填上去的。所以成功了~再次感谢所有回答的人~
lz的这个问题可以这样:先在数据库里写一个存储过程
DE里插入这个存储过程,假定为myproc
然后:
myde.myproc(参数)
这样就可以运行存储过程了
如果要用datagrid显示结果,更简单
set datagrid1.datasource=myde.rsmyproc