[FIX] Microsoft Access および Jet の ODBC ドライバーの計算用のテキスト列の 2 GB のサイズを返します

文書翻訳 文書翻訳
文書番号: 272951 - 対象製品
すべて展開する | すべて折りたたむ

目次

現象

Microsoft Windows 2000 Service Pack (SP) 1年に付属する Microsoft Access (Jet) ODBC ドライバー (Odbcjt32.dll バージョン 4.0.5303.1) を使用するテキスト データ型、計算列に、 SQLDescribeCol の ODBC API の呼び出しの計算列を含むステートメント実行すると 2147483598 (2 GB) の列サイズを返します。

不在時のメモリで失敗する、 SQLDescribeCol ODBC API の呼び出しから返される列のサイズを使用して、列を割り当てるメモリの量を判断しようとするアプリケーションのエラー メッセージ。

Odbcjt32.dll バージョン 4.0.5303.1 は、データ アクセス コンポーネント (MDAC) バージョン 2. 5 Service Pack 1 でもインストールされます。

この問題もほかの Access ODBC ドライバーで発生します。

Windows Vista でこの問題の詳細についてはをクリックして以下「サポート技術情報」(Microsoft Knowledge Base) 資料を参照。
940895Windows Vista ベースのコンピューターを SQLDescribeCol 関数と、SQLColAttribute 関数不適切な値を返す 255 の予期される値の代わりに 2147483598 の

原因

Jet は、Jet の ODBC ドライバーの長整数型 (Long) のデータ型を示すとして解釈される計算列は、0 の列サイズを返します。 そのため、Jet ドライバー列サイズ 2 GB は長整数型 (Long) のデータ型、最大サイズに設定します。 ただし、データ型がテキスト データ型 (文字または varchar) の場合、型が SQL_VARCHAR、255 の最大サイズを持つ必要がありますとして報告も。

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 Knowledge Base) をクリックしてください:
293312MDAC 2. 5 Service Pack の入手方法
2007 Office system に含まれる Access ODBC ドライバー (Aceodbc.dll) を使用する場合はこの問題を解決する 941877 の修正プログラムを適用します。

941877 の修正プログラムに関するについては、資料の「サポート技術情報」(Microsoft Knowledge Base) を表示する次の資料番号をクリック。
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 データ アクセス コンポーネントの 2. 5 Service Pack 2 で修正されました。

詳細

この現象は、返す関数を計算値は、 IIF MAX MIN 1 場合 、およびなどなどの共通の機能を含むの発生することができます。

: この修正プログラムにも、以下の「サポート技術情報」(Microsoft Knowledge Base) 資料に記載問題の修正プログラムにはが含まれます。
271177[FIX ODBC コントロール パネルでのパスワード保護されたデータベースを修復することができません

問題の再現手順

  1. 次のコードを Microsoft Visual C++ Win32 console application にコピーして、コードをコンパイルします。 データソース名、ユーザー 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 Knowledge Base) をクリックしてください:
271177[FIX ODBC コントロール パネルでのパスワード保護されたデータベースを修復することができません

プロパティ

文書番号: 272951 - 最終更新日: 2008年4月28日 - リビジョン: 5.1
この資料は以下の製品について記述したものです。
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft ODBC (Open Database Connectivity) Driver for Access 4.0
キーワード:?
kbbug kbfix kbmdac250sp2fix kbqfe kbdatabase kbjet kbmdacnosweep kbhotfixserver kbmt KB272951 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:272951
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

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