|
您需要将`strSQL`中的`str1`和`str2`替换为`#" & str1 & "# AND #" & str2 & "#"`,这将在SQL语句中嵌入实际的日期范围。另外,请注意,日期类型应用`#`括起来,在SQL中才能正确识别。修改后的代码如下:
```VBA
Private Sub CommandButton2_Click()
Sheets("发票查询").ListBox1.Clear
Dim cnADO As Object
Dim rsADO As Object
Dim strPath As String
Dim strSQL As String
Dim i, j As Long
Dim k As Integer
Dim str1, str2
strPath = "D:\发票.accdb"
'创建一个连接对象,命名为cnADO
Set cnADO = CreateObject("ADODB.Connection")
On Error GoTo ErrMsg
'使用cnADO将本VBA程序与目标数据库连接起来
With cnADO
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionTimeout = 100
.Open strPath
.cursorlocation = 3
End With
'获取Text Box中输入的日期
str1 = Format(TextBox2.Value, "yyyy\/mm\/dd")
str2 = Format(TextBox3.Value, "yyyy\/mm\/dd")
'将SQL语句写在strSQL变量中
strSQL = "SELECT * FROM 发票 WHERE 开票日期 BETWEEN #" & str1 & "# AND #" & str2 & "#"
'使用Connection对象的Execute属性运行SQL语句
Set rsADO = cnADO.Execute(strSQL)
'利用Recordset对象Fields集合取得所有字段名,写入第1行
Sheets("发票查询").ListBox1.AddItem
For i = 0 To rsADO.Fields.Count - 1
Sheets("发票查询").ListBox1.List(0, i) = rsADO.Fields(i).Name
Next i
For i = 1 To rsADO.RecordCount
Sheets("发票查询").ListBox1.AddItem
For j = 0 To rsADO.Fields.Count - 1
If rsADO.Fields(j) <> "" Then
Sheets("发票查询").ListBox1.List(i, j) = rsADO.Fields(j)
Else
Sheets("发票查询").ListBox1.List(i, j) = ""
End If
Next j
rsADO.movenext
Next i
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
Exit Sub
ErrMsg:
MsgBox Err.Description, , "错误报告"
End Sub
```
请注意,在代码中将Text Box输入的日期格式化为`yyyy\/mm\/dd`,这是为了在SQL中正确识别日期格式。另外,请注意添加错误处理以避免出现错误时停止执行。 这是CHAPT GPT 回答的,测试下,不定行 |
评分
-
1
查看全部评分
-
|