MS Access "Invalid Procedure Call"电子邮件地址的前半部分与另一个表中的电子邮件地址匹配



当在访问2010 db中运行以下代码时,我正在遇到"无效的过程调用",但它在Access 2000 dB中起作用。

我没有编写此代码,我知道它是在"@'符号之前对文本进行编译,但我很想听听我在这里看的特定语法的解释:"左(nz(t1)。用户名,'),inst(nz(t1.username,''),'@') - 1)=左(nz(t2.email,''),instr(nz(t2.email,''),'@') - 1) )<> false));"

SELECT
    t1.ID,
    t1.Username AS Email
FROM USERS AS t1
WHERE (((Exists (SELECT * 
            FROM LICENSE AS t2 
            WHERE Left(Nz(t1.Username,''),InStr(Nz(t1.Username,''),'@')-1) = Left(Nz(t2.email,''),InStr(Nz(t2.email,''),'@')-1)
    ))<>False)); 

nz(t1.username,'')如果t1.username为null。

现在,假设t1.username是aa.gmail.com

然后inst(nz(t1.username,''),'@') - 1将是3-1 = 2因此,左(nz(t1.username,''),instr(nz(t1.username,''),'@') - 1)将留下('aa.gmail.com',2),2)= aa

所以,此表达式基本上是在@。

之前提取电子邮件地址的一部分

left(nz(t2.email,''),inst(nz(t2.email,''),'@') - 1)在t2.email

因此,在 @ @。

可能的错误原因:如果t1.username或t2.email不是form@exptshing@tosings@theings,则仪器将返回0。因此,左(某些字符串,0)可能是在函数左侧的函数期望值> = 1作为第二个参数时,将错误投掷。

我在查询中使用了此问题来解决我的类似问题。

Newfield: IIf(InStrRev([pullfield],"@"),Left([pullfield],InStrRev([pullfield],"(")-1),[pullfield])

它应该在"@"符号之前将其拆分,如果没有"@",则它只是将原始内容留在那里。

相关内容

最新更新