摘要:我不知道应该使用哪种 VBA 数据类型(日期、字符串还是?)来存储将通过 ADO 参数定义传递给 SQL Server 进行插入的 VBA 日期。建立 ADO JDate 参数时,它会要求输入数据类型。我使用了 adDate,但遇到了问题。
我的 VB/ADO 数据库连接正常工作,我可以成功传递基于文本的 SQL 进行插入和读取。但是由于各种原因,我需要将查询切换INSERT
为使用 ADO 参数而不是仅使用基于文本的 SQL。
为了测试,我将所有这些简化为一个表,其中包含 2 个简单的列用于测试。
SQL Server 表:testJournal
- 有 2 列:City nchar(100) not null
和JDate date not null
。我开始使用仅包含列的相同表名测试下面的代码City
。它运行完美,也就是说每次运行都会在 SQL Server 中插入一行。一旦我手动删除并重新创建同一张表以包含JDate
并运行要插入的 VBA 代码,我就会收到一条错误消息,提示无法将 Null 插入 JDate。也就是说,我提供给 ADO 参数的 VBA 日期永远不会通过 ADO 参数到达 SQL Server。
我的一些 VBA 代码:
Dim TDate As Date
TDate = "2025-03-07"
Call mDataBase.Open("Provider=SQLOLEDB;Initial Catalog=" & pCatalog & ";Data Source=xxxxxxxxxxxxxxxx" & pServer & ";Integrated Security=SSPI")
mCmd.ActiveConnection = mDataBase
With mCmd
.Parameters.Append .CreateParameter("City", adLongVarChar, adParamInput, 100, "Beaumont")
.Parameters.Append .CreateParameter("JDate", adDate, adParamInput, TDate)
End With
.CommandText = "INSERT INTO testJournal ( City, JDate ) VALUES(?,?)"
Set mRS = mCmd.Execute
当上面最后一行运行时,我收到一个错误,SQL Server 列 JDate 不允许为空。我在运行时检查了 VB 端的 mCmd。“City”的值属性是“Beaumont”。但是,“JDate”的值属性为空。
我使用哪种 VBA 变量和/或 VBA ADO 参数数据类型的组合才能将我的 VBA 日期成功传递到 SQL Server 日期列?