我使用ADO在Excel文件数据库上执行SQL查询,使用以下查询时遇到问题:
strQuery = "SELECT NUM,CREATION_DATE,CREATOR,STATE,LAST_MODIFICATION_DATE,LAST_MODIFIER,CATEGORY,MODEL_LABEL FROM [MySheet$] WHERE CREATION_DATE<='" + EndDateTextBox.Value + "' AND CREATION_DATE>='" + BeginDateTextBox.Value + "'"
执行查询但是当我在EndDateTextBox中输入2010-01-01并且在EndDateTextBox中输入2016-01-01时,我没有得到任何结果,这是不正常的,因为我的数据库中的日期不同2014年和2015年。
以下是我数据库的CREATION_DATE列的屏幕截图:
PS:我知道使用Excel文件作为数据库不是最好的做法,但我告诉他们这样做。
答案 0 :(得分:1)
您需要将日期转换为值,ADO无法识别工作表中单元格的格式,只能识别适用的值。所以最终查询应该是这样的:
SELECT * FROM [MySheet$] WHERE CREATION_DATE <= 42370 AND CREATION_DATE >= 40179
你可以用这样的方法实现这个目的:
Sub test()
Dim DtStart as Long
DtStart = Clng(Cdate("2010-01-01"))
Msgbox DtStart
End Sub
所以,最终的SQL查询将是:
strQuery = "SELECT NUM,CREATION_DATE,CREATOR,STATE,LAST_MODIFICATION_DATE,LAST_MODIFIER,CATEGORY,MODEL_LABEL " & _
"FROM [MySheet$] " & _
"WHERE CREATION_DATE <= " & CLng(CDate(EndDateTextBox.Value)) & _
" AND CREATION_DATE >= " & CLng(CDate(BeginDateTextBox.Value))
或者它可以是这样的:
strQuery = "SELECT NUM,CREATION_DATE,CREATOR,STATE,LAST_MODIFICATION_DATE,LAST_MODIFIER,CATEGORY,MODEL_LABEL " & _
"FROM [MySheet$] " & _
"WHERE CREATION_DATE BETWEEN " & _
CLng(CDate(BeginDateTextBox.Value)) & " AND " & CLng(CDate(EndDateTextBox.Value))
这里是测试结果:
答案 1 :(得分:0)
convert(datetime,CREATION_DATE,103) >= convert(datetime, BeginDateTextBox.Value ,103)
对begindatetextbox和enddatetextbox
执行此操作这应该将您的日期转换为dd / mm / yyyy格式(不是100%确定它是否适用于您可能需要先转换为字符串的日期),以便您可以以相同的格式比较它们
这是直接的sql(begindatetextbox.value除外),所以它不会像这样工作,你必须在代码中建立你的字符串,最后看起来像这样