FIX: Microsoft Access/Jet ODBC 드라이버 2 GB 계산된 텍스트 열에 대한 크기를 반환합니다.

기술 자료 번역 기술 자료 번역
기술 자료: 272951 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

Microsoft Windows 2000 서비스 팩 (SP) 1 선적된 Access (Jet) ODBC 드라이버 (버전 4.0.5303.1 Odbcjt32.dll)을 사용하는 경우 텍스트 데이터 형식, 계산된 열의 SQLDescribeCol ODBC API 호출 계산된 열이 들어 있는 문을 실행할 때 2147483598 (2 GB) 의 열 크기를 반환합니다.

"부재 중 메모리를 사용하여" 열에 대해 할당할 메모리 양을 확인하려면 SQLDescribeCol ODBC API 호출에서 반환된 열 크기를 사용하려고 응용 프로그램이 실패할 오류 메시지.

또한 Odbcjt32.dll 버전 4.0.5303.1 Microsoft 데이터 액세스 구성 요소 (MDAC) 버전에서 2.5, 서비스 팩 1이 설치되어 있습니다.

다른 Access ODBC 드라이버 문제가 발생할 수 있습니다.

Windows Vista에서 이 문제에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
940895Windows Vista 기반 컴퓨터에서 SQLDescribeCol 함수 및 SQLColAttribute 함수는 255 예상 값 대신 2147483598 잘못된 값을 반환합니다.

원인

Jet 0 Jet ODBC 드라이버가 Long 데이터 형식의 표시를 해석하는 계산된 열에 대한 열 크기를 반환합니다. 이 때문에 Jet 드라이버를 열 크기를 2 GB 수 있는 긴 데이터 형식에 허용되는 최대 크기를 설정합니다. 그러나 데이터 형식이 텍스트 데이터 형식 (문자 또는 varchar) 경우 형식은 여전히 255의 최대 크기를 가집니다 SQL_VARCHAR로 보고됩니다.

ODBC 추적에서 수행한 예를 7번째 (7번째) 인수로 반환된 2 GB 열 크기를 보여 주는 다음과 같습니다.

mdactest        65c-698	EXIT  SQLDescribeCol  with return code 0 (SQL_SUCCESS)
		HSTMT               01EC18D8
		UWORD                        2 
		UCHAR *             0x0012FAE4 [       8] "Expr1001"
		SWORD                      129 
		SWORD *             0x0012FA94 (8)
		SWORD *             0x0012FA86 (12)
		SQLULEN *           0x0012FA98 (2147483598)
		SWORD *             0x0012FA9C (0)
		SWORD *             0x0012FA9E (1)
				

해결 방법

이 문제를 해결하려면 Microsoft 데이터 액세스 구성 요소 2.5는 최신 서비스 팩을 구하십시오. 추가 정보는 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 확인하십시오:
293312최신 MDAC 2.5 서비스 팩을 구하는 방법
2007 Microsoft Office System 포함된 Access ODBC 드라이버 (Aceodbc.dll)를 사용하면 이 문제를 해결하려면 941877 핫픽스를 적용하십시오.

941877 핫픽스에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
941877Access 2007 핫픽스 패키지에 대한 설명: 2008년 2월 26일
이 수정의 영어 버전은 다음 파일 특성을 가집니다 또는 나중에:
   Date         Version        Size              File name     
   -----------------------------------------------------------
   08/29/00     4.0.5629.0     270,608 bytes     Odbcjt32.dll
				
참고: 이 핫픽스는 없습니다 Jet SP5 또는 MDAC 2.6 포함되어 있습니다. 수정 프로그램은 MDAC 2.5 SP2에 포함된 것으로 예상되는 경우에도 이 문제가 발생하는 시스템에 MDAC 2.5 SP2 해제될 때까지 이 문제를 해결하려면 핫픽스를 적용해야 합니다. 또한, MDAC 2.6 MDAC 2.5 SP1에서 직접 업그레이드할 시스템을 이 핫픽스를 적용한 수도 있어야 합니다.

해결 과정

경우에 따라서는 가능한 계산된 필드에 CInt 또는 결과를 텍스트가 아닌 데이터 형식으로 변환하는 CLng 같은 데이터 형식 변환 함수 래핑할 수 있습니다.

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열된 Microsoft 제품에서 이 문제를 확인했습니다. 이 문제는 Microsoft 데이터 액세스 구성 요소 2.5 서비스 팩 2에서 처음 수정되었습니다.

추가 정보

IIF, MAX, MIN, FIRST, 오른쪽, MID 등과 같은 일반적인 기능을 포함하는 계산된 값을 반환하는 모든 함수를 사용하여 이 문제가 발생할 수 있습니다.

참고: 이 핫픽스는 다음 Microsoft 기술 자료 문서에서 설명한 문제에 대한 수정 수도 있습니다.
271177FIX: ODBC 제어판을 통해 암호 보호된 데이터베이스를 복구할 수 없습니다

동작을 재현하는 방법

  1. Microsoft Visual C++ 콘솔 응용 프로그램에 뒤에 코드를 복사한 다음 코드를 컴파일하십시오. 참고 데이터 소스 이름, 사용자 ID와 암호를 변경해야 할 수도 있습니다.
    #include "stdafx.h"
    #include <windows.h>
    #include <stdio.h>
    #include <sql.h>
    #include <sqlext.h>
    
    
    void ShowErrors(HDBC, HSTMT);
    
    
    void main(void)
    {
    
    	SQLHANDLE henv;
    	SQLHANDLE hdbc;
    	SQLHANDLE hstmt;
    	
    	RETCODE rc = 0;
    	
    	SQLCHAR Statement[50] = "Select IIF('A' = 'A', 'Y', 'N') from shippers";	
    
    	SQLCHAR dsn[15] = "northwind2000";
    	SQLCHAR user[6] = "admin";
    	SQLCHAR pass[5] = "";
    	long sqlnts = -3;
    	
    //	variables for SQLDescribeCol
    	char  m_colname[20] = {"\0"};
    	short m_colsize = 0;
    	short m_sqltype = 0;
    	unsigned long m_prec = 0;
    	short m_scale = 0;
    	short m_nullable = 0;
    	
    
    
    	rc = SQLAllocEnv(&henv);
    	
    	rc = SQLAllocConnect(henv, &hdbc);
    	
    	rc = SQLConnect(hdbc, dsn, SQL_NTS, (SQLCHAR *) user, SQL_NTS, (SQLCHAR *) pass, SQL_NTS);
    	if ((rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO))
    		ShowErrors(hdbc, NULL);
    	rc = SQLAllocStmt(hdbc, &hstmt);
    
    	rc = SQLExecDirect(hstmt, Statement, SQL_NTS);
    	if ((rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO))
    		ShowErrors(NULL, hstmt);
    
    	rc = SQLDescribeCol(hstmt, 1, (unsigned char *)m_colname, 20, &m_colsize, &m_sqltype, &m_prec, &m_scale, &m_nullable);
    
    	printf("Size returned from SQLDescribeCol is:\t%d", m_prec);
    
    	SQLFreeStmt(hstmt, SQL_CLOSE);
    	SQLDisconnect(hdbc);
    	SQLFreeConnect(hdbc);
    	SQLFreeEnv(henv);
    }
    
    
    void ShowErrors (HDBC hdbc, HSTMT hstmt)
    {
    
    //	Variables for SQLGetDiagRec
    	SQLCHAR sqlState[20];
    	SQLCHAR errorMsg[1000];
    	SQLSMALLINT errorMsgLen;
    	SQLINTEGER nativeError;
    	char szTemp[4096];
    	
    	
    //	Retrieve the Raised error message
    	if (hdbc!= NULL) 
    		SQLGetDiagRec(SQL_HANDLE_DBC,hdbc,1,sqlState,
    			&nativeError,errorMsg,1000,&errorMsgLen);
    	else
    		SQLGetDiagRec(SQL_HANDLE_STMT,hstmt,1,sqlState,
    			&nativeError,errorMsg,1000,&errorMsgLen);
    
    //	Display the size of the returned error message, and the message itself
    	sprintf(szTemp, "Length=[%d] Text=%s", strlen((char*)errorMsg), errorMsg );
    	printf("ERROR!  %s\n\n\n", szTemp);
    
    	printf("Press any key to exit...");
    	getchar();
    
    	if (hstmt != NULL)
    	{
    		SQLFreeStmt(hstmt, SQL_CLOSE);
    		SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
    	}
    	SQLDisconnect(hdbc);
    	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    
    	exit(0);
    
    
    }
    					
  2. 코드를 실행하고 정밀도를 반환하는 값의 크기를 2 GB 입니다.

참조

추가 정보는 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 확인하십시오:
271177FIX: ODBC 제어판을 통해 암호 보호된 데이터베이스를 복구할 수 없습니다

속성

기술 자료: 272951 - 마지막 검토: 2008년 4월 28일 월요일 - 수정: 5.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 서비스 팩 1
  • Microsoft Open Database Connectivity Driver for Access 4.0
키워드:?
kbmt kbqfe kbhotfixserver kbbug kbdatabase kbfix kbjet kbmdac250sp2fix kbmdacnosweep KB272951 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com