更新文本字段时的转换错误 - MS Access

时间:2013-01-24 15:57:08

标签: sql ms-access

我正在尝试更新文本字段。将数据移动到另一列并截断,因为它太长了。

更新语句如下所示。 (编者)

UPDATE Feuil1 SET [Occupant 2] = SWITCH
(
[Occupant 2] IS NOT NULL, [Occupant 3],
(LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 3), mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," "),30),
(LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 4), mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," "),30),
(LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 5), mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," "),30),
(LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 6), mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," "),30),
(LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 7), mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," "),30),
     (LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 2), '',
     (LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 1), '',
     [Occupant 1] LIKE '* & *', mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," "),30),
     [Occupant 1] LIKE '* ET *', mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," "),30),
     (LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 0), ''
), [Occupant 1] = SWITCH
(
(LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 3), mid([Occupant 1],1,InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," ")),
(LEN([Occupant 1]) - LEN(REPLACE([Occupant 1], ' ', '')) = 4), mid([Occupant 1],1,InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," ")),
[Occupant 1] LIKE '* & *', (replace([Occupant 1], ' & ' & mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," ")),InStr(InStr(2,[Occupant 1]," ")), '')),
[Occupant 1] LIKE '* ET *', (replace([Occupant 1], ' & ' & mid([Occupant 1],InStr(InStr(1,[Occupant 1]," ")+1,[Occupant 1]," ")),InStr(InStr(2,[Occupant 1]," ")), ''))
)
WHERE [Occupant 1] IS NOT NULL

我总是得到转换类型错误,但我不知道为什么。我正在使用它自己的修改数据更新文本字段。涉及的所有列都是文本。

我尝试使用Val(),Cstr()函数,结果相同。

附加信息:有些数据似乎已被处理,但我找不到原因。

任何线索?

1 个答案:

答案 0 :(得分:2)

在陈述的最开始,您有以下几行:

UPDATE Feuil1 SET [Occupant 2] = SWITCH
(
[Occupant 2] IS NOT NULL, [Occupant 3] = [Occupant 2],

你在这里说的是,如果[乘员2]不是空,那么设置[乘员2]等于[乘员3] = [乘员2]的布尔结果(即{ {1}}或True)。我猜你要把它改成:

False

或者,更有可能:

UPDATE Feuil1 SET [Occupant 2] = SWITCH
(
[Occupant 2] IS NOT NULL, [Occupant 3],