【问题标题】:MS Access Update Query Error (Can't update Memo Field, That is actual Text Field)MS Access 更新查询错误(无法更新备注字段,即实际文本字段)
【发布时间】:2016-04-24 06:18:38
【问题描述】:

大家下午好,

我可以访问连接到我们内部的一些质量软件 (SQL) 的后端并提取 2 个表(软件公司进行了更新并将数据拆分为两个表),这些表被连接并转储到一个表中( tblWeakPointMaster) 与生成表查询。主键未在转储中传输,新列 (Aunonumber) 在快照后添加,以及我们将添加的数据的一些额外列

数据已经提取一次,我使用相同的 Make Table Query 转储到新表 (tblWeakPointUpdates),我想运行更新查询来推送新记录和更改的记录这张表给我让他们使用的 tblWeakPointMaster。我遇到的问题是我在运行更新查询时收到错误(无法加入备忘录、OLE 或超链接..

关键是,它拒绝的字段不是这些字段中的任何一个。什么可能导致这个问题。到目前为止,它遇到问题的所有字段都是 50 个字符或更少字符的文本字段,这些字段完全相同(因为它们是由相同的 Make Table Query 制作的)

我无法找到有关此特定错误的任何信息,我不确定这是否是访问限制,是否是数据被提取的问题,或者我只是在我的头上

更新
Pic of Both Tables 我已经突出显示了我从 SQL 数据库中提取的字段,这些也是我试图更新的字段。图片中的表格已标记

Access 中用于更新查询的 SQL(由 Access 生成)

UPDATE tblWeakPointMaster INNER JOIN tblWeakPointUpdates ON 
(tblWeakPointMaster.TaskTypeID = tblWeakPointUpdates.TaskTypeID) AND 
(tblWeakPointMaster.NCR = tblWeakPointUpdates.NCR) AND 
(tblWeakPointMaster.NCR_Date = tblWeakPointUpdates.NCR_Date) AND 
(tblWeakPointMaster.NC_type = tblWeakPointUpdates.NC_type) AND 
(tblWeakPointMaster.Customer = tblWeakPointUpdates.Customer) AND 
(tblWeakPointMaster.Material = tblWeakPointUpdates.Material) AND 
(tblWeakPointMaster.Rev = tblWeakPointUpdates.Rev) AND 
(tblWeakPointMaster.Qty_rejected = tblWeakPointUpdates.Qty_rejected) AND 
(tblWeakPointMaster.TaskType = tblWeakPointUpdates.TaskType) AND 
(tblWeakPointMaster.dbo_PT_Task_Notes = tblWeakPointUpdates.dbo_PT_Task_Notes) AND 
(tblWeakPointMaster.Origin = tblWeakPointUpdates.Origin) AND 
(tblWeakPointMaster.Origin_ref = tblWeakPointUpdates.Origin_ref) AND 
(tblWeakPointMaster.Origin_cause = tblWeakPointUpdates.Origin_cause) AND 
(tblWeakPointMaster.Origin_category = tblWeakPointUpdates.Origin_category) 

SET tblWeakPointMaster.TaskTypeID = [tblWeakPointUpdates].[TaskTypeID], 
tblWeakPointMaster.NCR = [tblWeakPointUpdates].[NCR], 
tblWeakPointMaster.NCR_Date = [tblWeakPointUpdates].[NCR_Date], 
tblWeakPointMaster.NC_type = [tblWeakPointUpdates].[NC_type], 
tblWeakPointMaster.Customer = [tblWeakPointUpdates].[Customer], 
tblWeakPointMaster.Material = [tblWeakPointUpdates].[Material], 
tblWeakPointMaster.Rev = [tblWeakPointUpdates].[Rev], 
tblWeakPointMaster.Qty_rejected = [tblWeakPointUpdates].[Qty_rejected], 
tblWeakPointMaster.TaskType = [tblWeakPointUpdates].[TaskType], 
tblWeakPointMaster.dbo_PT_Task_Notes = [tblWeakPointUpdates].[dbo_PT_Task_Notes], 
tblWeakPointMaster.Origin = [tblWeakPointUpdates].[Origin], 
tblWeakPointMaster.Origin_ref = [tblWeakPointUpdates].[Origin_ref], 
tblWeakPointMaster.Origin_cause = [tblWeakPointUpdates].[Origin_cause], 
tblWeakPointMaster.Origin_category = [tblWeakPointUpdates].[Origin_category];

The Error Message I'm Receiving

-詹姆斯

【问题讨论】:

  • 请编辑您的问题并添加一些信息:1. 在 Access 中的确切数据类型(SELECT INTO 可能会创建意外的数据类型),2. 带有 JOIN 的 UPDATE sql , 3. 完整的错误信息。
  • 抱歉,我已编辑并相信已提供所要求的数据
  • 确实做到了,感谢您如此彻底,它真的很有帮助!

标签: sql-server ms-access ms-access-2010


【解决方案1】:

首先是直接问题:查询连接所有字段,包括

AND (tblWeakPointMaster.dbo_PT_Task_Notes = tblWeakPointUpdates.dbo_PT_Task_Notes)

这是一个备注字段,因此查询失败。

错误消息被截断(Access 经常使用长 SQL 表达式执行此操作),因此未列出 dbo_PT_Task_Notes。但这就是原因。

实际问题
即使没有备注字段,您的查询也不会执行您想要的操作。
如果对所有字段进行 INNER JOIN,则只会连接完全相同的记录,而 UPDATE 没有意义。

您必须区分字段:

  • 那些标识记录,并且不改变在原始数据库中。这些字段属于 JOIN 表达式,用于查找匹配记录。
  • 在原始数据库中可以更改。这些字段属于 UPDATE 查询的 SET 部分,它们是您要更新的字段。

为什么不导出和导入主键?这将使任务变得微不足道 - 第一组将由主键组成,第二组由其余部分组成。

【讨论】:

  • 我将如何对这两个表执行此操作?.. 我从 SQL 中获取的第一个表使用“NCR”作为其 PK,(由于软件更新,他们迁移了表)第二个表有一个 AutoPK,但 NCR 链接到这个新表中的“TaskTypeID”..
  • Migrated 是错误的词。他们添加了一些函数,需要在 SQL 后端中从该点开始拆分表
  • @JamesLongfield:我建议您在一个新问题中提出这个问题,包括您导入的两个表的表结构以及它们的 JOIN SQL。目前我还不清楚它们是如何协同工作的。
猜你喜欢
  • 2017-08-14
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2018-07-08
  • 1970-01-01
相关资源
最近更新 更多