Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Access/SQL中编辑记录问题(写入冲突)_Sql_Sql Server_Sql Server 2008_Ms Access - Fatal编程技术网

在Access/SQL中编辑记录问题(写入冲突)

在Access/SQL中编辑记录问题(写入冲突),sql,sql-server,sql-server-2008,ms-access,Sql,Sql Server,Sql Server 2008,Ms Access,在将我使用的SQL DB迁移到新服务器后,出现了一个问题。现在,当试图在Access(窗体或表)中编辑记录时,它会显示:写入冲突:此记录在您开始编辑后已被其他用户更改… 有什么不明显的原因吗。没有其他人在使用服务器,我已经禁用了表上的任何触发器。我刚刚发现这与空值有关,因为没有空值的记录是可以的,但有些行有空值则不行。这可能与索引有关吗?如果相关的话,我最近开始每天批量上传,而不是使用INSERT-In-from Access一次上传一个文件。这是Microsoft的一个错误 要解决此问题,请使

在将我使用的SQL DB迁移到新服务器后,出现了一个问题。现在,当试图在Access(窗体或表)中编辑记录时,它会显示:
写入冲突:此记录在您开始编辑后已被其他用户更改…


有什么不明显的原因吗。没有其他人在使用服务器,我已经禁用了表上的任何触发器。我刚刚发现这与空值有关,因为没有空值的记录是可以的,但有些行有空值则不行。这可能与索引有关吗?如果相关的话,我最近开始每天批量上传,而不是使用INSERT-In-from Access一次上传一个文件。

这是Microsoft的一个错误

要解决此问题,请使用以下方法之一:

  • 更新基于多表视图的表单 第一次出现“症状”部分中提到的错误消息时,必须单击“复制到剪贴板”或“复制到剪贴板” 在“写入冲突”对话框中删除更改。避免重复 出现“症状”中提到的错误消息
    节中,您必须在编辑前更新表单中的记录集
    还是同一张唱片。 笔记 要在Access 2003或Access 2002中更新表单,请单击“记录”菜单上的“刷新”。 要在Access 2007中更新表单,请单击“开始”选项卡上“记录”组中的“全部刷新”

  • 将主窗体与链接的子窗体一起使用 为了避免“症状”部分中提到的错误消息重复出现,您可以使用带有
    链接子窗体以在相关表中输入数据。您可以输入
    从一个位置在两个表中记录,而不使用 基于多表视图。 要创建带有链接子窗体的主窗体,请执行以下步骤:

    基于多表视图中使用的相关(子)表创建新表单。包括必填字段 在表格上。 保存表单,然后关闭表单。 基于多表视图中使用的主表创建新表单。将必填字段包括在
    形式。 在数据库窗口中,将步骤2中保存的表单添加到主表单中

    这将创建一个子表单。 将子窗体的“链接子字段”属性和“链接主字段”属性设置为字段的名称,这些字段是
    用于链接表

可能出现的问题中采取的解决方法:

1次并发编辑

原因可能是相关记录已在您正在编辑的表单中打开。如果在编辑会话期间以编程方式更改记录,然后尝试关闭表单(从而尝试保存该记录),access将表示该记录已被其他人更改

在以编程方式更改记录之前保存表单。
形式如下:

'这将保存表单的当前记录
我,肮脏=虚假
'现在,以编程方式更改记录

2缺少主键或时间戳

确保SQL Server表具有主键和时间戳列

时间戳列有助于Access确定自上次选择记录以来是否对其进行了编辑。Access通过检查所有字段(如果没有可用的时间戳)来实现这一点。如果没有时间戳列,这可能不适用于空条目(请参阅3个空位问题)

时间戳实际上存储的是行版本号,而不是时间

在添加时间戳列后,不要忘记刷新access中的表链接,否则access将看不到它。(注意:Microsoft的升迁向导在将Access表转换为SQL Server表时会创建时间戳列。)


3个空位问题

根据@AlbertD.Kallal,这可能是此处描述的空位问题:。如果您使用的是位字段,请将其默认值设置为
0
,并用
0
替换之前输入的任何空值。对于布尔字段,我通常使用
位默认值0 NOT NULL
,因为它最接近布尔值的概念


KB文章说使用*.adp而不是*.mdb;但是,.

与原始海报一样,也存在此问题。即使在不使用表单的情况下也可以直接编辑。问题出在位字段上,如果您的字段为Null,那么当您访问记录时,它会将Null转换为0,然后您会进行更改,这一次是第二次更改。所以这两个变化是相互冲突的。我听从了奥利弗的建议:

“确保表具有主键和时间戳列”


它解决了这个问题。

为了克服这个问题。我创建VBA是为了更改同一行中的另一个字段。因此,我创建了一个单独的字段,当我试图关闭表单时,它会向内容中添加1。这就解决了问题。

当链接到MS SQL Sever 2000(及之前版本)时,我在MS Access 2003(及之前版本)中看到了类似的情况。在我的例子中,我发现问题在于MS SQL Server数据库表中的位字段——位字段不允许空值。当我将记录添加到通过MS Access 2003链接的表中时,数据库窗口将返回错误,除非我专门将位字段设置为True或False。为了补救,我更改了任何MS SQL Server数据表,使任何位字段都默认为0值或1。一旦我这样做了,我就能够通过MS Access向链接表添加/编辑数据。

我已经多次使用链接到MS SQL表的MS Access表解决了这个问题。原始海报的回复非常有帮助,确实是我很多问题的根源

当我不小心在fieldname中添加了一个带有空格的位字段时,我也遇到了这个问题。。。是的

我已经运行了alter table tablename add[fieldname]位默认值0。
SELECT
    'UPDATE [' + o.name + '] SET [' + c.name + '] = ISNULL([' + c.name + '], 0);' + 
    'ALTER TABLE [' + o.name + '] ALTER COLUMN [' + c.name + '] BIT NOT NULL;' + 
    'ALTER TABLE [' + o.name + '] ADD  CONSTRAINT [DF_' + o.name + '_' + c.name + '] DEFAULT ((0)) FOR [' + c.name + ']'
FROM
    sys.columns c
INNER JOIN sys.objects o
ON  o.object_id = c.object_id
WHERE
    c.system_type_id = 104
    AND o.is_ms_shipped = 0;
Private Sub tbl_comuna_id_comuna_BeforeUpdate(Cancel As Integer)

If Me.tbl_comuna_id_comuna.OldValue = Me.tbl_comuna_id_comuna.Value Then
Cancel = True
Undo
End If
End Sub