sql - 从 excel 用户表单的下拉组合框中创建一个基于所选月份的 sql 查询
问题描述
我在 excel 中有一个用于出勤报告的用户表单。在表单上,用户选择他们想要查看的员工,然后他们可以选中一个显示年初至今的框,或者从组合框下拉列表中选择单个月份。这就是查询我们有数据的sql server。年初至今很容易,因为我知道如何将变量用于当前日期和一年中的第一天。我遇到的问题是如何将用户的月份选择转换为可用的查询。例如:如果用户选择一月作为下拉菜单,查询将是
select * from [dbo.mytablename]
where [agent name] = '<value from a textbox that I know how to pass in>'
and [cal date] > '1/1/2018' and [cal date] < '1/31/2018'
现在我唯一的想法是在工作簿中的持有电子表格上拥有每个月的第一天和最后一天的单元格,然后使用单元格值。但如果可能的话,我想避免这种情况。如果您有任何想法,那就太好了!
解决方案
假设您的月份是 1 到 12 之间的数值,您可以使用类似
Dim fromDate As Date, toDate As Date
fromDate = DateSerial(2018, month, 1)
toDate = DateSerial(2018, month + 1, 1)
Debug.Print fromDate, toDate
这甚至适用于 12 月,DateSerial
接受13
一个月。请注意,您必须要求< 下个月的第一天才能捕获该月最后一天的数据。
旁注:我假设您使用 aADODB.Command
来查询数据库。我强烈建议您使用ADODB.parameter
将日期(和代理名称)传递给数据库 - 您不必处理格式或转换日期,以便数据库正确理解它们。例如,请参阅https://stackoverflow.com/posts/10353908/edit以了解其工作原理。
更新
我假设你用一个范围内的值填充你的组合框,并且该值链接到一个单元格。例如,使用match
将月份作为数字获取的函数(我永远不会相信 Excel 或数据库会正确翻译月份的名称,区域设置之类的东西太多可能会导致它中断)。假设:
月份名称范围:A1..A12
链接单元格:B1
将公式=MATCH(B1,A1:A12)
放入单元格 B2。瞧,你有月份的数字。
推荐阅读
- swift - 如何在 Watchkit 应用程序 swift 上拥有交互式地图?
- python - 使用 matplotlib 在 x 轴上绘制时间
- sapui5 - SAPUI5 BusyIndicator 周围的边界线错误
- jenkins - jenkins 无法根据来自 bitbucket 云的拉取请求触发构建
- android - AndroidX JetPack NavigationUI - 覆盖抽屉中非导航项的操作
- chocolatey - 从安装程序自动创建包巧克力
- android - 自定义 android 搜索视图
- c# - 获取另一个窗口/应用程序的滚动方向
- excel - VBA Application.Workbooks.Open(file_name.xls) 打开已打开的工作簿而不是传递的文件名
- reactjs - 测试是否调用了 const 模态组件