2013-01-19 1 views
4

Windows 7 (64 비트)에서 MS Access 2003을 사용하고 있고 MySQL 서버 (5.0.51a-24 + lenny5)에서 외부 연결 테이블을 사용하고 있습니다. MySQL의 ODBC 커넥터 (최신 5.1.11이 버그이기 때문에 5.1.10 사용). 나는 MS Access에서이 테이블을 열고 일부 레코드를 그것에서을 삭제 을하려고 할 때, 나는 다음과 같은 얻을 오류 : 나는 편집에 테이블의 일부 레코드를하려고하면, 나는 오류 다음 얻을MySQL ODBC의 행을 삭제/편집하면 MS Access에서 오류가 발생합니다.

The Microsoft Jet engine stopped the process because you and another user are attempting to change the same data at the same time.

:

나는 MS Access에서 삭제 또는 업데이트 쿼리을 통해 그것을 할 때

This record has been changed by another user since you started editing it. If you save the record, you will overwrite the changes the other user made.

Copying the changes to the clipboard will let you look at the values the other user entered, and then paste your changes back in if you decide to make changes.

그러나 는, 그것을 잘 작동합니다! 테이블에서 직접 레코드를 삭제할 수 없습니다.

십진법 숫자가 많은 값이있는 double 필드가있을 때 문제가 있음을 발견했습니다 (아래의 자세한 분석 참조). 참조 :

CREATE TABLE `_try4` (
    `a` int(11) NOT NULL default '0', 
    `b` double default NULL, 
    PRIMARY KEY (`a`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; 

insert into _try4 values (1, NULL),(2, 4.532423),(3,10),(4,0), 
    (5,6.34324),(6, 8.2342398423094823); 

문제는 삭제하려고 할 때/마지막 레코드 (a = 6)을 편집에만 존재, 그렇지 않으면 OK입니다!

문제가 설명되어 있습니다 :

http://support.microsoft.com/kb/280730,이 3 해결 방법을 제안 :

  • Add a timestamp column to the SQL table. (JET will then use only this field to see if the record has been updated.)
  • Modify the data type that is in SQL Server to a non-floating point data type (for example, Decimal).
  • Run an Update Query to update the record. You must do this instead of relying on the recordset update.

그러나,이 3 해결 만족하지 않습니다. 처음에는 될 수 있지만이 해결 방법은 예상대로 작동하지 않았습니다. 아마도 MS SQL Server에서만 작동합니다.

이 문제에 대한 다른 해결책이나 해결 방법이 있습니까?

추가 세부 정보 :

  • MySQL 서버는 아무도 그것을 접근하지, 그냥 날입니다.
  • 새 레코드를 삽입하면 문제가 없습니다.
  • 기본 키는이 테이블에 대해 잘 정의되어 있습니다.
  • MS Access를 다시 시작해도 도움이되지 않았습니다.
  • ODBC 테이블에 대한 링크를 삭제하고 다시 링크해도 도움이되지 않습니다.
  • 새로운 Access 데이터베이스에서 테이블을 연결해도 도움이되지 않았습니다.
  • MySQL 데이터베이스 엔진을 MyISAM에서 InnoDB로 변경해도 도움이되지 않았습니다.
  • 권한에 문제가 없으며이 사용자 @ 호스트에 대한 모든 권한이 있습니다.
  • 정상적으로 문제없이 서버의 MySQL 콘솔에서 레코드를 삭제할 수 있습니다.
  • MySQL Connector ODBC 옵션 설정을 시도해도 큰 결과 허용, 자동 재 연결 사용, 여러 명령문 허용, 동적 커서 실행, 전달 전용 커서 강제 사용, 전달 전용 커서 결과 저장 안함).
  • MySQL ODBC 커넥터에서 디버깅을 설정했는데 myodbc.sql 로그를 만들었지 만 편집/삭제 (이유를 모르겠 음)에는 해당 쿼리가 포함되어 있지 않습니다.
+0

현재 상태 : question unanswered; 위의 해결 방법을 사용하여 나에게 가장 쉬운 방법을 사용했습니다. 'double'필드 (소수 자릿수가 많은 필드) 중 일부를 '십진수'로 변환합니다. – TMS

답변

1

연결된 테이블의 구조에 대한 자세한 내용은 도움이되지만 추측 할 만합니다.

SQL Server의 연결된 테이블에 nullable 부울 필드를 포함 시켰을 때 MS Access 2003과 2010에서 비슷한 문제가 발생했습니다. JET 데이터베이스에는 Null 필드가있는 문제가있는 것 같습니다. 자세한 내용은이 답변을 확인하십시오. https://stackoverflow.com/a/4765810/1428147

부울 필드를 nullable로 만들지 않고 기본값을 설정하여 문제를 해결했습니다. 문제가 MySQL과 동일하지만 MySQL을 사용하는 경우 동일하게 처리하십시오.

+0

감사합니다 Aaron - 내가 묻는대로 테이블 구조를 추가했습니다. – TMS

+0

사실 부울 필드가 없습니다 .. – TMS

0

해결 방법 테이블 데이터를 Excel로 복사 한 다음 phpadmin을 사용하여 테이블을 지운 다음 편집 작업을 수행하여 '새로운'데이터 (즉, 편집 후 모두)를 다시 액세스하십시오.