Excel ODBC link 到 SQL 查询到日期之间的结果
Excel ODBC link to SQL Query for results between to dates
我 运行 Excel 2016 年使用 Windows 10 Pro 计算机。我已经建立了从 Excel 到外部 MariaDB SQL 数据库的 ODBC 连接。我的 VBA 宏基本上按我想要的方式工作,但我在选择两个日期之间的记录时遇到问题。此 SQL 语句有效:
SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` WHERE (Date_Time>{ts '2019-06-01 00:00:00'}) ORDER BY Date_Time;
但是,我无法使用 BETWEEN date1 AND date2
获得 WHERE
子句的任何组合;以上与 Date_Time<{ts '2019-06-11 00:00:00'}
结合使用。 yyyy-mm-dd
中 SQL 数据库中 Date_Time
的格式。
我输入的日期是这样的:
firstdate = InputBox("Enter starting date (yyyy-mm-dd)")
seconddate = Format((DateValue(firstdate) - 7#), "yyyy-mm-dd")
SQL 语句的 VBA 代码如下所示
"SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` " _
& "WHERE (Date_Time>{ts '" & firstdate & " 00:00:00'})" & " ORDER BY Date_Time"
这可能真的很简单,只能显示我缺乏 SQL 的经验,但我正在努力学习。
虽然您解决了您的情况,但请考虑在您的 ODBC 连接中进行参数化,这是 运行 SQL 在应用层 VBA 的首选方式。通过参数化,您可以避免连接或标点符号的需要,并且在 VBA(例如 Java、Python、PHP)或 MariaDB(Oracle , SQL 服务器, Postgres).
下面假设您在 Excel 中使用 ADO 并在模块上运行 late-binding。
Public Sub RunSQL()
Dim firstdate As Date, seconddate As Date
Dim sql as String, conn As Object, cmd As Object, rst As Object
Const adCmdText = 1, adParamInput = 1, adDate = 7
firstdate = DateValue(InputBox("Enter starting date (yyyy-mm-dd)"))
seconddate = firstdate - 7
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
conn.Open "Driver={MySQL ODBC 5.3 Unicode Driver};host=hostname;" _
& "database=databasename;UID=username;PWD=****"
' PREPARED STATEMENT (NO DATA)
sql = "SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` WHERE `DateTime` BETWEEN ? AND ?"
' CONFIGURE ADO COMMAND
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn
.CommandText = sql
.CommandType = adCmdText
' BIND DATE VALUES
.Parameters.Append .CreateParameter("start_param", adDate, adParamInput, , firstdate)
.Parameters.Append .CreateParameter("start_param", adDate, adParamInput, , seconddate)
' CREATE RECORDSET
Set rst = .Execute
End With
'... USE RECORDSET
rst.Close
Set rst = Nothing: Set cmd = Nothing: Set conn = Nothing
End Sub
我 运行 Excel 2016 年使用 Windows 10 Pro 计算机。我已经建立了从 Excel 到外部 MariaDB SQL 数据库的 ODBC 连接。我的 VBA 宏基本上按我想要的方式工作,但我在选择两个日期之间的记录时遇到问题。此 SQL 语句有效:
SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` WHERE (Date_Time>{ts '2019-06-01 00:00:00'}) ORDER BY Date_Time;
但是,我无法使用 BETWEEN date1 AND date2
获得 WHERE
子句的任何组合;以上与 Date_Time<{ts '2019-06-11 00:00:00'}
结合使用。 yyyy-mm-dd
中 SQL 数据库中 Date_Time
的格式。
我输入的日期是这样的:
firstdate = InputBox("Enter starting date (yyyy-mm-dd)")
seconddate = Format((DateValue(firstdate) - 7#), "yyyy-mm-dd")
SQL 语句的 VBA 代码如下所示
"SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` " _
& "WHERE (Date_Time>{ts '" & firstdate & " 00:00:00'})" & " ORDER BY Date_Time"
这可能真的很简单,只能显示我缺乏 SQL 的经验,但我正在努力学习。
虽然您解决了您的情况,但请考虑在您的 ODBC 连接中进行参数化,这是 运行 SQL 在应用层 VBA 的首选方式。通过参数化,您可以避免连接或标点符号的需要,并且在 VBA(例如 Java、Python、PHP)或 MariaDB(Oracle , SQL 服务器, Postgres).
下面假设您在 Excel 中使用 ADO 并在模块上运行 late-binding。
Public Sub RunSQL()
Dim firstdate As Date, seconddate As Date
Dim sql as String, conn As Object, cmd As Object, rst As Object
Const adCmdText = 1, adParamInput = 1, adDate = 7
firstdate = DateValue(InputBox("Enter starting date (yyyy-mm-dd)"))
seconddate = firstdate - 7
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
conn.Open "Driver={MySQL ODBC 5.3 Unicode Driver};host=hostname;" _
& "database=databasename;UID=username;PWD=****"
' PREPARED STATEMENT (NO DATA)
sql = "SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` WHERE `DateTime` BETWEEN ? AND ?"
' CONFIGURE ADO COMMAND
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn
.CommandText = sql
.CommandType = adCmdText
' BIND DATE VALUES
.Parameters.Append .CreateParameter("start_param", adDate, adParamInput, , firstdate)
.Parameters.Append .CreateParameter("start_param", adDate, adParamInput, , seconddate)
' CREATE RECORDSET
Set rst = .Execute
End With
'... USE RECORDSET
rst.Close
Set rst = Nothing: Set cmd = Nothing: Set conn = Nothing
End Sub