【问题标题】:Joining Two Tables with Different Data types MS ACCESS - 'type mismatch in expression' error连接具有不同数据类型的两个表 MS ACCESS -“表达式中的类型不匹配”错误
【发布时间】:2018-10-03 12:09:49
【问题描述】:

我正在尝试使用两个具有不同数据类型(数字和短文本)的公共字段的实时 CSV 运行访问查询。我发现您可以使用“CStr”连接不同的数据类型。我已经在 sql 视图的代码中添加了“CStr”。请找到下面的代码。

这给了我在访问时想要的输出,当我单击“数据表视图”时,我现在可以看到输出。但是,当我尝试将数据导出(我实际上是在尝试创建导出规范以便我可以使用宏导出 csv)作为 csv 时,我收到“表达式中的类型不匹配”错误消息。

这是我的代码:

SELECT Sixthform_Reg_Year_Groups.Forename, 
       Sixthform_Reg_Year_Groups.Surname, 
       Sixthform_Reg_Year_Groups.Reg, Students.objectGUID
FROM Sixthform_Reg_Year_Groups INNER JOIN
     Students
     ON CStr(Sixthform_Reg_Year_Groups.Person_id) = Students.employeeID
WHERE (((Sixthform_Reg_Year_Groups.Reg)="12E"));`

我也尝试在两边添加“CStr”。如下,但遇到同样的问题。

FROM Sixthform_Reg_Year_Groups INNER JOIN
     Students
     ON CStr(Sixthform_Reg_Year_Groups.Person_id) = CStr (Students.employeeID)
WHERE (((Sixthform_Reg_Year_Groups.Reg) = "12E"));`

当然,如果没有“CStr”,我什至无法查看“数据表视图”上的输出。每次当我单击数据表视图时,它都会给我“表达式中的类型不匹配”错误消息。

任何帮助解决这个问题将不胜感激。

提前致谢。

附加信息:数据类型是 EmpoyeeID 是 'Short Text' 和 Person ID 是 'Number'

【问题讨论】:

  • 不仅仅是CSTR - 如果Students.employeeID 是一个长数据类型,那么保持原样并将连接更改为CLNG(Sixthform_Reg_Year_Groups.Person_id)。查看Type Conversion Functions 以获取完整列表。请记住,这会降低查询速度,因为它需要转换每个值 - 正如您所发现的,您无法以图形方式查看。
  • 仅供参考,数据类型是 EmpoyeeID 是 'Short Text' 而 Person ID 是 'Number'
  • ON Sixthform_Reg_Year_Groups.Person_id = CLNG(Students.employeeID) 应该可以工作。
  • @DarrenBartrup-Cook - 今天需要在 Access 查询中从 Text 转换为 Double 时,对类型转换函数 (VB) 的引用为我提供了帮助。谢谢你。我的工作又安全了一天。

标签: sql ms-access


【解决方案1】:

换个方法试试:

ON Sixthform_Reg_Year_Groups.Person_id = Val(Students.employeeID)

和/或防止 Null 错误:

ON CStr(Nz(Sixthform_Reg_Year_Groups.Person_id, 0)) = Nz(Students.employeeID)

【讨论】:

  • 谢谢你。同样,这两种方法都有效。并在我单击“数据表视图”时在 Access 上显示预期结果。但是,当我尝试导出 CSV 时,出现“表达式类型不匹配”错误。要导出我去:外部数据->文本文件-> name.csv并单击确定,错误弹出。 (我实际上是在尝试创建一个导出规范,以便我可以使用宏导出 csv)
  • 您可以尝试使用工作查询将数据导入表,然后导出该表。
  • @Gustav Nz() 在查询中应避免使用。请改用Iif(...is null..)。看到这个优秀的页面:allenbrowne.com/QueryPerfIssue.html(必读:-)
【解决方案2】:

好的,伙计们,我已经设法解决了这个问题,最后结果很简单。这就是我所做的。

基本上,我重新导入了链接表。这次在导入窗口中,我单击了“高级”并将“人员 ID”列上的数据类型更改为“短文本”以匹配“员工 ID”数据类型。然后所有的问题都解决了。 (我不知道你可以这样做)

感谢大家的回复。通过您的 cmets 引导我走向正确的道路。

非常感谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多