2009-10-05 1 views
5

누구든지이 오류의 의미 또는 해결 방법을 알고 있습니까? Access 2003과 SQL2005를 사용하고 있습니다. 그것은 특정 하위 폼에 레코드를 추가하려고 할 때 나타납니다.MS 액세스 오류 "ODBC - 호출에 실패했습니다. 캐스트 사양 (# 0)의 문자 값이 잘못되었습니다."

[마이크로 소프트] [SQL 네이티브 클라이언트] 캐스트 사양의 문자 값이 올바르지 않습니다 (# 0)

This MS bug report가 동일한 메시지를 설명하지만, 이미 해결 된 SQL 서버 6.5의 버그입니다.

해결 : 대상 테이블에 PK가없는 것 같습니다. 하위 폼이나 Access의 쿼리와 관련이 없습니다. 나는 PK없이이 데이터베이스에 테이블이 있다는 것을 알지 못했습니다. 대상 테이블에 PK를 추가하여이를 해결했습니다. 이상하게도 SQL 고유 클라이언트를 통해 실행될 때 오류가없는 SSMS를 통해 실행될 때 오류가 발생한 것과 동일한 쿼리 문자열입니다. 그 이상한 메시지를 접한 다른 사람들에게 도움이되기를 바랍니다.

답변

6

흠, 나는 액세스면에서 텍스트 상자의 기본값을 확인합니다. 또한 디자인 모드에서 연결된 테이블을 가져오고 ms 액세스가 여기에 가정하는 데이터 형식을 확인하려고합니다. 지원되지 않는 데이터 형식의 경우 ms 액세스는 일반적으로 문자열을 사용하며 SQL Server는 다른 것을 원할 수 있습니다.

따라서 주 테이블의 기본 키 (PK)를 모두 확인한 다음 하위 테이블에서 외래 키 (FK) 열에 대해 사용 된 (가정) 데이터 형식을 확인하십시오. 우리가이 작업을 수행하는 동안 하위 양식 컨트롤 (하위 폼이 아닌 폼이 아니라이 두 테이블을 연결하는 양식에 사용 된 하위 양식 컨트롤)에서 하위/마스터 링크 설정에 사용 된 식을 확인하십시오).

SQL Server 테이블에 타임 스탬프 열이 없으면 액세스의 하위 폼이 민감합니다. 앞에서 언급했듯이 PK와 FK 데이터 유형을 확인하고 일치하는지 확인하십시오 (ms 액세스의 디자인 모드에서 테이블을 가져와야합니다 - 디자인 모드에 대한 읽기 전용 오류 메시지가 표시되지만 데이터 유형이 일치하는지 확인 /보기 할 수 있음).

자식 테이블의 경우 PK, FK 및 타임 스탬프 열이 필요합니다 (하위 폼에 TS 열을 표시 할 필요는 없지만 테이블에 필요합니다).

ms 액세스의 하위 폼은 민감하며 SQL 테이블에 타임 스탬프 열을 포함하지 않으면 실패합니다. (액세스는이 행 버전 열을 사용하여 데이터가 변경되었는지 확인합니다).

+2

당신이 옳았다. .. 2 시간 후에. .. 아이 테이블에 PK가 없었기 때문에 그것이 있었다. grr! –

+0

두 번째 Albert의 대답에 대해 방금 SQL Server에서 모든 테이블에 타임 스탬프 필드를 포함하는 연습을했다고 가정 해 봅시다. 나는 어떤 DB 엔진에서도 PK가없는 테이블을 가지지 않을 것입니다. 그래서 그것은 내가 따르도록 강요 할 규칙이 아닙니다! –

+0

멋진 공제 +1 –

3

보기에서 필드 중 하나가 CAST 함수로 계산/작성 되었습니까? 이 경우 해당 필드의 값을 업데이트/추가 할 권한이 없을 수 있습니다.

MS SQL Studio 인터페이스에서보기를 실행하고 레코드를 삽입 해보십시오.

+0

안녕하세요, 실제로 실행중인 항목을 알 수 없습니다. 폼 자체에 레코드를 삽입하면 제대로 작동하지만 해당 폼이 하위 폼 일 때 삽입하려고하면이 오류가 발생합니다. 하위 양식은 하나의 텍스트 값, 기능 없음, vba 없음을 삽입합니다. –

+0

내 의견으로는, 당신이받는 메시지는 필드가 값을 계산하기 위해 어딘가에서 CAST 함수를 사용한다는 것을 의미하므로 해당 필드를 업데이트 할 수 없습니다. 문제가 하위 폼에만 해당되는 경우 폼과 하위 폼 또는 하위 폼 레코드 세트의 기본 키 사이의 연결이이 계산 된 값으로 작성 될 수 있습니다. –

+0

SQL Profiler에서 실제로 어떤 일이 일어나고 있는지 살펴 보았습니다. 감사의 말을 전하여 주셔서 감사합니다. 이전에는이 ​​사실을 알지 못했습니다. –

0

위에 제공된 메시지에만 기반하여 잘못된 값을 일부 필드 나 매개 변수 등에 설정하려고 시도하는 것 같습니다. 메시지는 값을 특정 필드로 변환하려고 시도하고 있음을 나타냅니다. 데이터 유형이지만 값은 해당 데이터 유형에 대해 유효하지 않습니다 ... 의미가 있습니까?

더 자세히 알려주십시오. 더 잘 도와 드리겠습니다.

1

이 문제의 또 다른 원인은 뷰를 변경하지 않고 테이블 이름을 변경하면 해당 뷰의 "종속성"이 테이블의 이전 이름과 여전히 관련이 있다는 것입니다.

'A'에서 파생 된 'A'테이블과 'Av'뷰가 있다고 가정 해 봅시다. 'A'라는 새 테이블을 만들고 'A 's'를 'A_old'로 변경했습니다. 나는 ALTER VIEW를 실행하지 않았기 때문에 'Av'의 의존성은 여전히 ​​'A_old'에 남아 있지만 뷰는 'A'에서 파생되며 링크 된 테이블로 뷰를 열려고 할 때 Access에서이 오류를 말합니다.

1

새로운 Access 2016 ACCDB 파일로 가져온 Access ADP 프로젝트로이 문제를 해결하기 만했습니다. 처음에는 응용 프로그램 코드에 문제가 있다고 생각했지만이 키잉 레코드를 테이블에 직접 가져 왔습니다. 흥미롭게도 기록은 항상 기록되었습니다. 오류를 유발 한 것은 읽기 전용 인 것으로 보입니다. insert sql을 프로파일 링하고 SQL Management Studio에서이를 실행하면 문제가 없습니다.

문제의 원인이 된 테이블에 GUID 기본 키가있었습니다. 이를 int 열로 바꾸면 문제가 해결되었습니다.

또한 SQL 데이터베이스는 PK를 전환하기 전에 제거한 몇 천 개의 확장 된 속성으로 흩어져있었습니다. 웹에서 이러한 문제를 일으키는 강력한 제안이있었습니다. 이 프로세스의 출처는 다음과 같습니다. Remove All SQL Extended Properties

1

Access 2016에서 ODBC 연결된 sQL Server 데이터베이스를 업데이트하려고하면이 문제가 발생합니다. 문제는 두 테이블을 조인하는 데 사용 된 필드의 null 값입니다. null 값을 제거하면이 문제가 해결됩니다.

관련 문제