今天,我们来学习下大家可能最不熟悉的一个子集——Command(命令)。 命令的创建跟连接并没什么区别,同样可以这样写: - Dim cmd As NewADODB.Command
复制代码 或者 - Dim cmd AsADODB.Command
- Set cmd = NewADODB.Command
复制代码 Command对象代表SQL命令,雷类似于Access中的查询,但一般指定连接字符串和SQL语句,再用执行方法即可处理。 现在我们回头看看上一节讲过的内容。上一节里我说过了,对于操作查询,连接可以直接通过Execute来执行就可以,而对于选择查询则需要创建一个记录集来存储信息,然后才能读取出来。 这一点对Command同样适用。现在,假设E盘有一个MyExcel文件,想读取里面的myExcel工作表中的某个值。我们该怎么做呢? 根据前面学到的知识,我们知道,首先需要创建一个记录集来存储数据,于是: - Dim rst As NewADODB.Recordset
复制代码 由于需要执行一个查询命令,因此需要创建一个Command对象: - Dim cmd As NewADODB.Command
复制代码 然后为这个命令指定参数:连接字符串和SQL命令。需要注意的是,对Excel文件常常需要加上美元符号($)作为工作表符: - cmd.ActiveConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 4.0;DataSource=E:\myExcel.xls"
- cmd.CommandText= "select * from [myExcel$]"
复制代码 最后把执行的命令赋值给记录集:Set rst = cmd.Execute并读取出来即可。完整代码如下: - Sub myQuery()
- Dim cmd As NewADODB.Command
- Dim rst As NewADODB.Recordset
- cmd.ActiveConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 4.0;DataSource=E:\myExcel.xls"
- cmd.CommandText= "select * from [myExcel$]"
- Set rst =cmd.Execute
- Debug.Printrst(1)’在立即窗口上打印出来。
- End Sub
复制代码 接下来,我们来个有些难度的:用Command对象执行参数查询。为此,我们先来看看参数查询的标准SQL语句: - PARAMETERS 违规月份 Text ( 255 );
- SELECT *
- FROM myTable
- WHERE myTable.违规月份=[违规月份];
复制代码 和大家一样,我也很少用参数查询。这里还是简要说下吧:在Select前面加上这一个子句(别忘了输入分号哦),标识着这是一个参数查询,需要输入一个文本类型的参数:违规月份。当用户输入参数后,便用Where子句来接收输入值,作为条件进行查询。也就是说,“[违规月份]”是一个值,而不是myTable的一个字段。你也可以用别的参数名称来代替“违规月份”,但需要跟前面的参数一致。——我故意这样写,是为了考下大家是否知道这两者的区别。 好了,扯远了。我们回来看看这个任务。根据上面提到的原理,就需要用Parameters来处理参数传递的问题了。代码如下: - Sub parQuery()
- Dim rst As NewADODB.Recordset
- Dim cmd As NewADODB.Command
- Dim i As Long
- cmd.ActiveConnection= CurrentProject.Connection
- cmd.CommandText= "PARAMETERS 违规月份 Text ( 255 ); SELECT * FROMmyTable WHERE 违规月份 =[违规月份]"
- cmd.CommandType= adCmdText
- Set rst =cmd.Execute(parameters:="1月")
- ’也可以按参数顺序来写:Set rst = cmd.Execute(,"1月")
- Debug.Print rst(3)
- End Sub
复制代码 似乎和前面几乎没太大区别。除了SQL语句外,唯一的区别就是在赋值给记录集时使用了参数。另外,我们知道,问号(?)表示任意字符,因此,参数查询同样可以简化为: - SELECT * FROMmyTable WHERE 违规月份=?
复制代码 同样地,将这个语句换到上述的VBA语句里,同样是一个参数查询。这里就不再列出代码了,大家可以自行测试。 |