2012-12-28 98 views
0

我想嘗試有一個SQL函數來更新我的表,並在列中放置一個日期,我使用更新函數的情況下,但我得到的錯誤,運算符不見了。更新函數與案例SQL和VBA

但我找不到錯誤,有人知道它在哪裏嗎?

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 
+0

你可以在兩次調用之前打印出strSQL嗎? –

+0

你每次執行這個函數時'是否會在這個表中添加一個列? – Kaf

+1

你的後端不是MSAccess嗎? MsAccess不支持Case When。 –

回答

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" 
+0

我已經嘗試過你的aswer,但VBA仍然給我一個語法錯誤操作員失蹤 – Bjorn

1

Jet/ACE(MS Access數據庫引擎)不支持CASE ... WHEN。三元操作的等價物是IIF(立即如果)。另外,日期分隔符是#,而不是'。試試這個:

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

此外,無論您的區域設置如何,您可能會遇到將日期格式設置爲DD-MM-YYYY的麻煩。有關更多信息,請參閱International Dates in Access