如何在 MS Access 的追加查询中将数据类型从文本转换为是/否?

Posted

技术标签:

【中文标题】如何在 MS Access 的追加查询中将数据类型从文本转换为是/否?【英文标题】:How to convert data type from Text to Yes/No inside an append query in MS Access? 【发布时间】:2016-03-18 15:38:05 【问题描述】:

在 MS Access 中,我试图将数据从一个表(表 A)附加到另一个表(表 B)中。表 A 有一列类型为“短文本”的列,具有单个值“偶数”或空/空。表 B 具有类型是/否的等效列。在进行此转换时,我必须将表 A 中的数据插入到表 B 中 - 如果表 A 的列具有“偶数”,则将表 B 的值设置为 True,否则将其设置为 False。

我尝试过如下查询,但没有成功:

INSERT INTO TableB( BookName, ChapterName, PageNo, Even)
SELECT name, chapter, page,  IIf(UCase([Even or Odd]) = 'EVEN', True,False)
FROM TableA;

上面的查询给了我以下错误:

Microsoft Access 无法在追加查询中追加所有记录。 由于类型转换失败,Microsoft Access 将 0 字段设置为 Null,并且由于键违规,它没有将 117 条记录添加到表中......

如何在追加数据的同时让 access 改变值?

【问题讨论】:

您的问题很清楚,可以,但请发布错误消息,而不是其图像的链接 【参考方案1】:

正如您的错误屏幕所说,问题不在于转换数据类型,错误是由于密钥违规造成的。 尝试在没有此是/否字段的情况下插入,您将确保在此。 您可能在表之间存在关系,因此它不允许插入某些值。

【讨论】:

是的。这是一个愚蠢的数字与。主键的自动编号不匹配。结果证明查询确实与转换部分的 IIF() 一起工作。【参考方案2】:

为了以后的任何搜索,这是我的最终查询,它确实有效:

INSERT INTO TableB( BookName, ChapterName, PageNo, Even)
SELECT name, chapter, page,  IIf(UCase([Even or Odd])="EVEN",-1,0) AS EvenOdd FROM TableA;

要检查的内容,源表和目标表之间是否存在数据类型差异。在我的例子中,源表中的页列是number,而目标表中的页列是Short Text

此外,不属于查询的主键是 Number 而不是 AutoNumber,它失败了,因此我收到了错误。

【讨论】:

以上是关于如何在 MS Access 的追加查询中将数据类型从文本转换为是/否?的主要内容,如果未能解决你的问题,请参考以下文章

在 Ms-Access 中将表名作为查询参数传递

MS Access:如何在 Access Web App 中添加 15 天至今(数据类型)

在 MS Access 2007 中未正确处理查询部分的日期类型的更新集

从 MS Access 中将交叉表查询结果导出到 Excel

如何在 MS Access 2010 中将 ACCDB 转换为 MDB

如何在 MS Access 2010 中组合多种查询类型?