[英]MS Access VBA Data Type Mismatch Error in SQL Query
我目前有以下 MS Access SQL 查詢,它是 Access VBA 功能的一部分。 它是在上一個問題的幫助下構建的,您可以查看該問題以更好地了解其工作原理。
sqlJoinQuery = "SELECT tbl_grp_by.[Field1],tbl_grp_by.[Field2], " & _
"Switch( " & _
"Nz(tbl_grp_by.[maxfield3]) = 0, '0', " & _
"Nz(tbl_grp_by.[maxfield3]) = 1, '>1 million', " & _
"Nz(tbl_grp_by.[maxfield3]) = 2, '0001-0010' " & _
") as [Field3], " & _
"tbl_grp_by.[" + commonField + "], " & _
"[" + tableName + "].* " & _
"INTO [" + newTableName + "] FROM (" & _
"SELECT Max([" + tableNameTemp + "].[Field1]) as [Field1], " & _
"Max([" + tableNameTemp + "].[Field2]) as [Field2], " & _
"Max(Switch( " & _
"Nz([" + tableNameTemp + "].[Field3]) = '0' , 0, " & _
"Nz([" + tableNameTemp + "].[Field3]) = '>1 million' , 1, " & _
"Nz([" + tableNameTemp + "].[Field3]) = '0001-0010', 2 " & _
"))as [maxField3], " & _
"[" + tableNameTemp + "].[" + commonField + "] as [" + commonField + "] " & _
"FROM [" + tableNameTemp + "] " & _
"INNER JOIN [" + tableName + "] " & _
"ON [" + tableNameTemp + "].[" + commonField + "] = [" + tableName + "].[" + commonField + "] " & _
"GROUP BY [" + tableNameTemp + "].[" + commonField + "] " & _
") as tbl_grp_by " & _
"INNER JOIN [" + tableName + "] " & _
"ON [" + tableName + "].[" + commonField + "] = tbl_grp_by.[" + commonField + "]"
上面的 Access 查詢結果是這個 SQL 字符串:
SELECT tbl_grp_by.[Field1],
tbl_grp_by.[Field2],
Switch(Nz(tbl_grp_by.[maxfield3]) = 0, '0', Nz(tbl_grp_by.[maxfield3]) = 1, '>1 million', Nz(tbl_grp_by.[maxfield3]) = 2, '0001-0010') AS [Field3],
tbl_grp_by.[Finding ID],
[Issue_Management_Findings].* INTO [region_Issue_Management_Findings]
FROM
(SELECT Max([temp2_temp_Issue_Management_Findings].[Field1]) AS [Field1],
Max([temp2_temp_Issue_Management_Findings].[Field2]) AS [Field2],
Max(Switch(Nz([temp2_temp_Issue_Management_Findings].[Field3]) = '0', 0, Nz([temp2_temp_Issue_Management_Findings].[Field3]) = '>1 million', 1, Nz([temp2_temp_Issue_Management_Findings].[Field3]) = '0001-0010', 2))AS [maxField3],
[temp2_temp_Issue_Management_Findings].[Finding ID] AS [Finding ID]
FROM [temp2_temp_Issue_Management_Findings]
INNER JOIN [Issue_Management_Findings] ON Nz([temp2_temp_Issue_Management_Findings].[Finding ID]) = Nz([Issue_Management_Findings].[Finding ID])
GROUP BY [temp2_temp_Issue_Management_Findings].[Finding ID]) AS tbl_grp_by
INNER JOIN [Issue_Management_Findings] ON Nz([Issue_Management_Findings].[Finding ID]) = Nz(tbl_grp_by.[Finding ID])
因此 [Field3] 在內部查詢中的 max() 下編碼,而 max 在外部查詢中解碼。
但是,當我運行它時,出現以下錯誤:
運行時錯誤“3464”:條件表達式中的數據類型不匹配
如果我從即時窗口中的調試輸出復制我的 SQL 查詢並將其粘貼到手動 SQL 查詢中(在運行我的 VBA 代碼到應該運行 SQL 查詢的斷點之后),那么我會收到以下錯誤:
條件表達式中的數據類型不匹配
如果我只在上面的 SQL 字符串中運行子查詢以進行調試:
(SELECT Max([temp2_temp_Issue_Management_Findings].[Field1]) AS [Field1],
Max([temp2_temp_Issue_Management_Findings].[Field2]) AS [Field2],
Max(Switch(Nz([temp2_temp_Issue_Management_Findings].[Field3]) = '0', 0, Nz([temp2_temp_Issue_Management_Findings].[Field3]) = '>1 million', 1, Nz([temp2_temp_Issue_Management_Findings].[Field3]) = '0001-0010', 2))AS [maxField3],
[temp2_temp_Issue_Management_Findings].[Finding ID] AS [Finding ID]
FROM [temp2_temp_Issue_Management_Findings]
INNER JOIN [Issue_Management_Findings] ON Nz([temp2_temp_Issue_Management_Findings].[Finding ID]) = Nz([Issue_Management_Findings].[Finding ID])
GROUP BY [temp2_temp_Issue_Management_Findings].[Finding ID])
然后它運行沒有錯誤
請注意, Issue_Management_Findings是數據庫中現有表的名稱。
有誰知道我如何解決這些錯誤?
我認為您必須在Switch
上添加默認返回值,以防萬一它無法匹配所有其他條件,因此它不會返回Null
,我認為這會導致Data Type mismatch
問題。 您可以添加...,true,"thedefaultvalue")
例如
SWITCH (field>100, "greater", field3=100 ,"equals", true, "default")
所以在你的查詢中。 我默認為0
;
sqlJoinQuery = "SELECT tbl_grp_by.[Field1],tbl_grp_by.[Field2], " & _
"Switch( " & _
"Nz(tbl_grp_by.[maxfield3]) = 0, '0', " & _
"Nz(tbl_grp_by.[maxfield3]) = 1, '>1 million', " & _
"Nz(tbl_grp_by.[maxfield3]) = 2, '0001-0010' " & _
", true,'0') as [Field3], " & _
"tbl_grp_by.[" + commonField + "], " & _
"[" + tableName + "].* " & _
"INTO [" + newTableName + "] FROM (" & _
"SELECT Max([" + tableNameTemp + "].[Field1]) as [Field1], " & _
"Max([" + tableNameTemp + "].[Field2]) as [Field2], " & _
"Max(Switch( " & _
"Nz([" + tableNameTemp + "].[Field3]) = '0' , 0, " & _
"Nz([" + tableNameTemp + "].[Field3]) = '>1 million' , 1, " & _
"Nz([" + tableNameTemp + "].[Field3]) = '0001-0010', 2 " & _
", true, 0))as [maxField3], " & _
"[" + tableNameTemp + "].[" + commonField + "] as [" + commonField + "] " & _
"FROM [" + tableNameTemp + "] " & _
"INNER JOIN [" + tableName + "] " & _
"ON [" + tableNameTemp + "].[" + commonField + "] = [" + tableName + "].[" + commonField + "] " & _
"GROUP BY [" + tableNameTemp + "].[" + commonField + "] " & _
") as tbl_grp_by " & _
"INNER JOIN [" + tableName + "] " & _
"ON [" + tableName + "].[" + commonField + "] = tbl_grp_by.[" + commonField + "]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.