分享

VBA数据库解决方案第49讲:从数据库中,多条件提取出数据的方法

 xfzxlgs 2022-06-23 发布于江西

大家好,今日我们讲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  数据的日期格式是如何表现的?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多