복붙노트

[SQL] 액세스 / SQL (쓰기 충돌)에서 편집 기록 문제

SQL

액세스 / SQL (쓰기 충돌)에서 편집 기록 문제

문제는 SQL DB 내가 사용하는이 새 서버로 마이그레이션 된 후왔다. Access에서 레코드 (폼 또는 테이블)을 편집 할 때 지금, 그것은 말한다 : WRITE 충돌이 : 당신이 그것을 편집을 시작한 이후에 다른 사용자가이 레코드가 변경되었습니다 ...

이것에 대한 비 명백한 이유가있다. 서버를 사용하여 다른 아무도가있다, 나는 테이블의 모든 트리거를 비활성화했습니다. 난 그냥 아무도 없어 기록이 확인 그대로 NULL을 함께 할 수있는 뭔가 것으로 나타났습니다하지만, 널 (NULL)이 일부 행이 없습니다. 이 인덱스와 함께 할 수 있을까? 이 관련이 있다면, 나는 최근에 매일 업로드하는 대신 Access에서 INSERT INTO를 사용하여 한 번에 그것을 하나를 수행 BULK를 시작했습니다.

해결법

  1. ==============================

    1.가능한 문제 :

    가능한 문제 :

    1 동시 편집

    이유는 문제의 레코드를 편집하고있는 형태로 열렸 음을 수 있습니다. 당신이 당신의 편집 세션 동안 프로그래밍 레코드를 변경 한 후 폼을 닫습니다 (및 기록을 저장하려고)하려고하면 액세스 레코드가 다른 사람에 의해 변경되었음을 말한다.

    프로그램 레코드를 변경하기 전에 양식을 저장합니다. 의 형태의:

    'This saves the form's current record
    Me.Dirty = False
    
    'Now, make changes to the record programmatically
    

    2 누락 된 기본 키 또는 타임 스탬프

    있는지 확인 SQL-Server 테이블은 기본 키뿐만 아니라 타임 스탬프 열이 있습니다.

    타임 스탬프 열이 마지막으로 선택한 이후 레코드가 수정 된 경우 액세스를 결정하는 데 도움이됩니다. 액세스 타임 스탬프를 사용할 수없는 경우, 모든 필드를 검사하여이 작업을 수행합니다. 타임 스탬프 열이없는 경우 어쩌면이 널 항목으로 잘 작동하지 않습니다 (3 널 비트 문제 참조).

    타임 스탬프는 실제로 행 버전 번호가 아닌 시간을 저장합니다.

    타임 스탬프 열을 추가 한 후 액세스에서 테이블 링크를 새로 고침하는 것을 잊지 마세요, 그렇지 않으면 액세스는 표시되지 않습니다. (참고 : SQL-Server 테이블에 액세스 테이블을 변환 할 때 마이크로 소프트의 업 사이징 마법사 타임 스탬프 열을 생성합니다.)

    3 널 비트 문제

    KB280730 : AlbertD.Kallal @에 따르면,이 비트는 여기에 설명 발행 null이 될 수 있습니다. 당신이 비트 필드를 사용하는 경우, 0으로 기본 값을 설정하고 가장 밀접하게 부울의 생각과 일치으로 0으로 나는 보통 부울 필드의 비트 DEFAULT 0 NOT NULL을 사용하기 전에 입력 한 널 (null)을 교체합니다.

    KB 문서는 * .MDB 대신 * .ADP을 사용 말한다; 그러나, 마이크로 소프트 액세스 2013 년 데이터에 액세스 프로젝트 (ADP)에 대한 지원을 중단.

  2. ==============================

    2.원래 포스터와 같은이 문제를했다. 심지어 편집에 직접 no 형식을 사용합니다. 문제는 당신의 분야가 null의 경우, 당신은 기록에 액세스 할 때 그것은 0으로 널을 변환 한 후이 시간이 2 변화 변경, 비트 필드에 있습니다. 2 개 변경 충돌 그래서. 나는 올리비에의 제안을 따라 :

    원래 포스터와 같은이 문제를했다. 심지어 편집에 직접 no 형식을 사용합니다. 문제는 당신의 분야가 null의 경우, 당신은 기록에 액세스 할 때 그것은 0으로 널을 변환 한 후이 시간이 2 변화 변경, 비트 필드에 있습니다. 2 개 변경 충돌 그래서. 나는 올리비에의 제안을 따라 :

    "만들기는 확인 테이블은 기본 키뿐만 아니라 타임 스탬프 열이 있습니다."

    그리고 그것은 문제를 해결했다.

  3. ==============================

    3.MS SQL 끊다 2000 (이전)에 연결했을 때 나는 MS 액세스 2003 (이전)와 비슷한 상황을 보았다. 내 경우에는 내가 문제가 MS SQL Server 데이터베이스 테이블의 비트 필드로 발견 - 비트 필드가 null 값을 허용하지 않습니다. 내가 특별히 True 또는 False로 비트 필드를 설정하지 않으면 오류가 반환 될 것 MS 액세스 2003 데이터베이스 창을 통해 연결된 테이블에 레코드를 추가합니다. 해결하려면, 난 내가 MS 액세스를 통해 연결된 테이블에 / 편집 데이터를 추가 할 수 있었다 한 후에는 어떤 비트 필드 중 하나를 0 값 또는 1로 기본값 있도록 모든 MS SQL 서버 datatables을 변경했습니다.

    MS SQL 끊다 2000 (이전)에 연결했을 때 나는 MS 액세스 2003 (이전)와 비슷한 상황을 보았다. 내 경우에는 내가 문제가 MS SQL Server 데이터베이스 테이블의 비트 필드로 발견 - 비트 필드가 null 값을 허용하지 않습니다. 내가 특별히 True 또는 False로 비트 필드를 설정하지 않으면 오류가 반환 될 것 MS 액세스 2003 데이터베이스 창을 통해 연결된 테이블에 레코드를 추가합니다. 해결하려면, 난 내가 MS 액세스를 통해 연결된 테이블에 / 편집 데이터를 추가 할 수 있었다 한 후에는 어떤 비트 필드 중 하나를 0 값 또는 1로 기본값 있도록 모든 MS SQL 서버 datatables을 변경했습니다.

  4. ==============================

    4.나는 필드를 비트 인해 제트 / 액세스 부울 및 SQL 서버 사이의 충돌 문제를 발견했다.

    나는 필드를 비트 인해 제트 / 액세스 부울 및 SQL 서버 사이의 충돌 문제를 발견했다.

    함정 # 4에서 여기에 설명 https://blogs.office.com/2012/02/17/five-common-pitfalls-when-upgrading-access-to-sql-server/

    제로 내 경우에 - 나는 NOT NULL 모든 비트 필드를 변경하고 기본을 제공하기 위해 SQL 스크립트를 썼다.

    그냥 SQL Server Management Studio에서 실행하고 신선한 쿼리 창에 결과를 붙여 넣기하고 실행 - 그것의 거의 가치가 커서이 퍼팅 그것을 실행.

    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;
    
  5. ==============================

    5.이것은 마이크로 소프트와 버그

    이것은 마이크로 소프트와 버그

    이 문제를 다음과 같은 방법을 사용 하나를 해결하려면 :

    직장에서 방법은 주위에 마이크로 소프트 지원에서 촬영

  6. ==============================

    6.나는 위에 설명 된 원인을 모두 경험 : 직접 현재 폼에 바인딩 된 테이블의 데이터를 변경하고 '0'(제로)로 기본값이 설정되지 않은 SQL Server에서 '비트'유형 필드를 가진.

    나는 위에 설명 된 원인을 모두 경험 : 직접 현재 폼에 바인딩 된 테이블의 데이터를 변경하고 '0'(제로)로 기본값이 설정되지 않은 SQL Server에서 '비트'유형 필드를 가진.

    나는 후자의 문제를 주변에 얻을 수 있었던 유일한 방법은 비트 필드에 제로의 기본 가치를 0으로 현재의 모든 값을 설정하는 업데이트 쿼리를 실행하는 것입니다.

    이전 오류를 해결하기 위해 위해, 내가 본 발명의 수 있었다. 때때로 나는 VBA 문의 순서를 변경하고, 따라서 오류 메시지를 방지, 다른 위치에 새로 고침 또는 다시 쿼리를 이동할 수 있습니다. 그러나 대부분의 경우, 내가하는 일은 DIM 내가 직접 테이블 업데이트를 호출하는 서브 루틴의 String 변수입니다. 전에 내가 이렇게 할 때 사용되는 정확한 SQL 문을 캡처, 바인딩 된 폼과 레코드 원본의 값이 String 변수를 설정, 업데이트를 호출합니다. 그럼, 데이터에서 분리하기 위해 빈 문자열 ( "") 폼의 레코드 원본을 설정합니다. 그럼, 데이터 업데이트를 수행합니다. 그럼, 다시 설정, String 변수에 저장된 값으로 폼의 레코드 원본 다시 설정 바인딩과 테이블에 새 값 (들)을 선택할 수 있도록. 이 양식에 포함 된 하나 개 이상의 하위 폼이 경우, "링크"필드는 레코드 원본과 유사한 방식으로 처리해야합니다. 레코드 원본이 빈 문자열로 설정하면, 당신은 지금 언 바운드 필드에 # NAME을 볼 수 있습니다. 내가 단순히 레코드 원본이 사용자로부터 # NAME 값을 숨기고, 비어 시간 동안 최고 수준 (본문 구역, 하위 폼 등)에서 Visible 속성을 False로 설정하면됩니다. 코딩 변화를 찾을 수없는 경우 빈 문자열로 레코드 원본을 설정하면 내 이동 - 투 솔루션입니다. 내 디자인 기술이 부족하고 완전히 전부 문제를 방지 할 수있는 방법이 있다면 나는, 그래도 궁금?

    오류 메시지를 해결에 마지막으로 생각 : 직접 테이블 테이블의 데이터를 업데이트하는 루틴을 호출하는 대신, 나는의 데이터를 폼에 바운드 컨트롤을 추가하고 업데이트하여, 대신 양식을 사용하여 데이터를 업데이트 할 수있는 방법을 찾아 양식 데이터와 테이블 데이터가 동기화되지 않도록 그.

  7. ==============================

    7.이 문제를 극복하기 위해. 나는 같은 행의 다른 필드를 변경하는 VBA를 만들었습니다. 그래서 나는 양식을 닫으려고 할 때 내용에 1을 추가하는 별도의 필드를 만들었습니다. 이 문제를 해결했다.

    이 문제를 극복하기 위해. 나는 같은 행의 다른 필드를 변경하는 VBA를 만들었습니다. 그래서 나는 양식을 닫으려고 할 때 내용에 1을 추가하는 별도의 필드를 만들었습니다. 이 문제를 해결했다.

  8. ==============================

    8.나는 여러 번 MS SQL 테이블에 연결된 MS Access 테이블에이 문제를 처리했습니다. 원래 포스터의 응답이며 매우 도움이되었다 실제로 내 문제의 대부분의 원인이었다.

    나는 여러 번 MS SQL 테이블에 연결된 MS Access 테이블에이 문제를 처리했습니다. 원래 포스터의 응답이며 매우 도움이되었다 실제로 내 문제의 대부분의 원인이었다.

    내가 실수로 필드 이름에 공백이있는 비트 필드를 추가 할 때 나는 또한이 문제에 달렸다 ... 그래 ....

    나는 내가 발견 0 내가 솔루션은 해당 필드를 삭제하고 이름에 공백이없는 것이 었습니다 [필드 명] 비트 기본 테이블 변경 tablename에 추가 기능을 실행했다.

  9. ==============================

    9.나는이 문제를했고 그것이 기존 테이블에 새로운 비트 필드를 추가로 인한 깨달았다. 나는 새 필드를 삭제하고 모든 것이 잘 작동으로 돌아 갔다.

    나는이 문제를했고 그것이 기존 테이블에 새로운 비트 필드를 추가로 인한 깨달았다. 나는 새 필드를 삭제하고 모든 것이 잘 작동으로 돌아 갔다.

  10. ==============================

    10.당신이 연결된 테이블을 사용하는 경우에는 다른 작업을 수행하기 전에 다음과 재시도 업데이트했는지 확인.

    당신이 연결된 테이블을 사용하는 경우에는 다른 작업을 수행하기 전에 다음과 재시도 업데이트했는지 확인.

    나는 내가 그들을 업데이트했지만, 누군가 밝혀 150 개 문자를 허용하도록 양식 유효성 검사 및 SQL 테이블을 업데이트했다하지 않았 생각했지만, 50 문자 허용보고에 액세스 따라서 연결된 테이블을 새로 고쳐지지했다 - 붐 쓰기 충돌

    확실하지이 시나리오에 가장 적합한 오류가 있지만, 헤이, 흥미로운 문제의 대부분은 마이크로 소프트 소프트웨어에 적절하게 플래그되지 않습니다!

  11. ==============================

    11.이 해결 방법을 사용하여 미안하고 나를 위해 일했다 : 프런트 엔드 : MS 액세스 백엔드 : MySQL의

    이 해결 방법을 사용하여 미안하고 나를 위해 일했다 : 프런트 엔드 : MS 액세스 백엔드 : MySQL의

    주어진 필드의 이전 업데이트 이벤트 :

    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
    
  12. ==============================

    12.난 그냥 (Acc2013 32 비트, SQL Srv2017 EXPR) 다소으로 분할 양식 "무거운로드"매우 HAVY 쓰기 충돌 문제가 있었다. 나를 위해 - 마지막에 - 단순히 쓰기 충돌 문제를 제거 할 수있는 솔루션이었다

    난 그냥 (Acc2013 32 비트, SQL Srv2017 EXPR) 다소으로 분할 양식 "무거운로드"매우 HAVY 쓰기 충돌 문제가 있었다. 나를 위해 - 마지막에 - 단순히 쓰기 충돌 문제를 제거 할 수있는 솔루션이었다

    읽기 전용으로 설정 AcSplitFormDatasheet! (나는 ... 그것은 어쨌든 쓰기를 읽은 내가 잘못하여 설정해야하는 이유 단서를하지 않은)

    거의 저를 찾아 나에게 일주일 내내 비용 않았다.

  13. ==============================

    13.저도 같은 오류 메시지를 수신했다. 데이터베이스 테이블에 ID 열이 지능에 변경이 문제를 해결,에서 BigInt로 설정했다.

    저도 같은 오류 메시지를 수신했다. 데이터베이스 테이블에 ID 열이 지능에 변경이 문제를 해결,에서 BigInt로 설정했다.

  14. from https://stackoverflow.com/questions/13993301/editing-record-issues-in-access-sql-write-conflict by cc-by-sa and MIT license