大家好,今日我们讲VBA解数据库解决方案的第49讲内容:从数据库中,多条件提取出数据的方法。我们利用数据库,主要的目的是存储数据,在需要的时候可以提取出来,提取的同时可以对数据进行必要的处理,本讲就是讲解从数据库中多条件提取数据的方法。 实例:我们有如下的数据库数据资料,要在其中提取出我们的数据: 我们的目的是在其中提取出“部门”为“一厂” 并且“职务”为“班长”,同时“出生日期”在1999/6/9或之后的员工记录,该怎么解决呢? 我们分析一下:上述的要求是三个查询条件,我们可以整合在SQL语句中实现。 下面看我给出的代码: Sub mynzRecords_49() '第49讲 从数据库中,多条件提取数据的方法 Dim cnADO, rsADO As Object Dim strPath, strSQL, strTable As String Set cnADO = CreateObject("ADODB.Connection") Set rsADO = CreateObject("ADODB.Recordset") strPath = ThisWorkbook.Path & "\mydata2.accdb" strTable = "员工信息" cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source="& strPath '多条件提取数据的SQL语句结构 strSQL = "select * from " & strTable _ & " where 部门='一厂' and 职务='班长' and 出生日期>=#1999/6/9#"& " ORDER BY 员工编号 DESC" rsADO.Open strSQL, cnADO, 1, 3 Worksheets("49").Select Cells.ClearContents For i = 0 To rsADO.Fields.Count - 1 ActiveSheet.Cells(1, i + 1) = rsADO.Fields(i).Name Next i For i = 1 To rsADO.RecordCount For j = 0 To rsADO.Fields.Count - 1 ActiveSheet.Cells(i + 1, j + 1) = rsADO.Fields(j) Next j rsADO.MoveNext Next i With Range(Cells(1, 1), Cells(1, rsADO.Fields.Count)) .Font.Bold = True .HorizontalAlignment = xlCenter End With Range("A2").CopyFromRecordset rsADO Columns(rsADO.Fields.Count).NumberFormat = "yyyy-mm-dd" Columns.AutoFit rsADO.Close cnADO.Close Set cnADO = Nothing Set rsADO = Nothing End Sub 代码截图: 代码解析: 1 '多条件提取数据的SQL语句结构 strSQL = "select * from " & strTable _ & " where 部门='一厂' and 职务='班长' and 出生日期>=#1999/6/9#"& " ORDER BY 员工编号 DESC" 在上面的代码中我们实现了提取出“部门”为“一厂” 并且“职务”为“班长”,同时“出生日期”在1999/6/9或之后的员工记录,其中 ① "select* from " & strTable 是取数据库的所有字段 ② " where 部门='一厂' 是部门的条件 ③ and 职务='班长' 是条件职务的要求 ④ and 出生日期>=#1999/6/9#" 是对出生日期的要求 ⑤ ORDER BY 员工编号 DESC" 是对员工编号 的降序排列 注意点:中间的and 是连接各个条件的逻辑语言,## 是日期符号的表述 2 Range("A2").CopyFromRecordset rsADO Columns(rsADO.Fields.Count).NumberFormat ="yyyy-mm-dd" 仍是借助于工作表条件格式的设定完成对出生日期的显示 下面看代码的运行结果: 今日内容回向: 1 如何实现多条件数据的提取? 2 数据的日期格式是如何表现的? |
|
来自: xfzxlgs > 《VBA数据库解决方案》