0

我想尝试有一个 SQL 函数来更新我的表并在列中放置一个日期,我正在使用带有案例的更新函数,但我得到一个操作符丢失的错误。

但是我找不到错误,有人知道它在哪里吗?

Public Function Add_date( _
                        ByVal startDate As String, _
                        ByVal strTableName As String, _
                        ByVal strFieldName As String, _
                        ByVal strNummeringField As String) _
                        As Boolean

Dim strSql As String
    strSql = "ALTER TABLE " & strTableName & " ADD " & strFieldName & " date"
    DoCmd.RunSQL strSql
    strSql = "UPDATE " & strTableName & " SET " & strFieldName & " = CASE WHEN " & strNummeringField & " < 25 THEN '23-07-1991' ELSE '01-01-01' END"
    MsgBox strSql
    DoCmd.RunSQL strSql


End Function
4

2 回答 2

1

Jet/ACE(MS Access 数据库引擎)不支持 CASE...WHEN。三元运算的等价物是 IIF(立即 if)。此外,日期分隔符是#,不是'。试试这个:

strSql = " UPDATE " & strTableName & _
         " SET " & strFieldName & " = " & _
         "     IIf(" & strNummeringField & " < 25, #23-07-1991#, #01-01-01#)"

此外,无论您的区域设置如何,您都可能会在将日期格式化为 DD-MM-YYYY 时遇到问题。有关详细信息,请参阅Access 中的国际日期。

于 2012-12-28T20:52:40.603 回答
0

一种可能性是表示表和列名的字符串包含无效字符。尝试将它们括在方括号中:

strSql = "ALTER TABLE [" & strTableName & "] ADD [" & strFieldName & "] date"
DoCmd.RunSQL strSql
strSql = "UPDATE [" & strTableName & "] SET [" & strFieldName & "] = CASE WHEN [" & strNummeringField & "] < 25 THEN '23-07-1991' ELSE '01-01-01' END"
于 2012-12-28T19:39:36.147 回答