0

这不会产生语法错误,但会给出错误的参数错误:

SELECT left(
  [aname],
 IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,
   Len(FinalForgotten.aname),
  IIF(instr([aname], ",") = 0,
    InStr(1,[aname]," ")-1,
    InStr(1,[aname],",")-1)))
&  ","  &

right(
   [aname],
 IIF(instr([aname], " " = 0 AND instr([aname], ",") = 0,
   Len(FinalForgotten.aname),
    IIF(instr([aname], ",") = 0,
      Len(aname)-InStr(1,[aname]," "),
      Len(aname)-InStr(1,[aname],",")))))
 &  " " &

defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle
FROM FinalForgotten INNER JOIN defense_final ON (right(FinalForgotten.aname,
 IIF(instr([aname], ",") = 0,
 Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "),
 Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],",")
  )
 )=defense_final.first_name) AND (left(FinalForgotten.aname,
IIF(instr([aname], ",") = 0,
  InStr(1,FinalForgotten.[aname]," ")-1,
  InStr(1,FinalForgotten.[aname],",")-1
    )
)=defense_final.last_name);

所以添加额外的参数我现在得到语法错误“Missing ), ], or Item in query expression":

   SELECT left(
  [aname],
 IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,
   Len(FinalForgotten.aname),
  IIF(instr([aname], ",") = 0,
    InStr(1,[aname]," ")-1,
    InStr(1,[aname],",")-1)))
&  ","  &

right(
   [aname],
 IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,
   Len(FinalForgotten.aname),
    IIF(instr([aname], ",") = 0,
      Len(aname)-InStr(1,[aname]," "),
      Len(aname)-InStr(1,[aname],","))))
 &  " " &

defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle
FROM FinalForgotten INNER JOIN defense_final ON 

left(FinalForgotten.aname,
   IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,
      Len(FinalForgotten.aname),
      IIF(instr([aname], ",") = 0,
        InStr(1,FinalForgotten.[aname]," ")-1,
        InStr(1,FinalForgotten.[aname],",")-1)))

 =defense_final.last_name AND 

 right(FinalForgotten.aname,
      IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,
      Len(FinalForgotten.aname),
       IIF(instr([aname], ",") = 0,
        Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "),
        Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))))

=defense_final.first_name;

任何解决方法?

感谢您的回复。

4

4 回答 4

0

第 10 行

right(

没有对应的右括号

于 2010-12-20T00:41:22.417 回答
0

SELECT left( [aname], 所以 [aname] 是一个文本字段。

 IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,

如果此条件为真,您希望左字符串的长度为:

 FinalForgotten.aname,

这不是整数。你要:

SELECT left(
  [aname],
 IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,
   Len(FinalForgotten.aname),
于 2010-12-20T02:42:46.250 回答
0
 IIF(instr([aname], " " = 0 AND instr([aname], ",") = 0,

第 12 行应该是

 IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0,
于 2010-12-20T16:01:19.367 回答
0

将该逻辑放入 VBA 函数会更容易,因此您的查询看起来像这样

SELECT GetFullNameWithMiddle([aname]) AS fullname
INTO FinalForgottenWithMiddle
FROM FinalForgotten INNER JOIN defense_final
    ON GetLastName([aname])=defense_final.last_name
    AND GetFirstName([aname])=defense_final.first_name

既然你说你不想使用 VBA,那就试试这个。我附上了每个

InStr(x, y) = 0

在括号中,所以

IIf(InStr(x, y) = 0 AND InStr(p, q) = 0, g, h)

变成

IIf((InStr(x, y) = 0) AND (InStr(p, q) = 0), g, h)

进行该更改后,我可以切换到查询设计网格,这意味着 SQL 解析器喜欢它:

SELECT left(
    [aname],
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0),
    Len(FinalForgotten.aname),
    IIF((instr([aname], ",") = 0),
    InStr(1,[aname]," ")-1,
    InStr(1,[aname],",")-1)))

    &  ","  &

right(
    [aname],
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0),
    Len(FinalForgotten.aname),
    IIF((instr([aname], ",") = 0),
      Len(aname)-InStr(1,[aname]," "),
      Len(aname)-InStr(1,[aname],","))))

    &  " " &

defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle
FROM FinalForgotten INNER JOIN defense_final ON 

left(FinalForgotten.aname,
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0),
    Len(FinalForgotten.aname),
    IIF((instr([aname], ",") = 0),
    InStr(1,FinalForgotten.[aname]," ")-1,
    InStr(1,FinalForgotten.[aname],",")-1)))

=defense_final.last_name AND 

right(FinalForgotten.aname,
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0),
    Len(FinalForgotten.aname),
    IIF((instr([aname], ",") = 0),
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "),
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))))

=defense_final.first_name;
于 2010-12-20T18:59:58.087 回答