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

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB: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 コントロール パネルでのパスワード保護されたデータベースを修復することができません
Jet 4. 0 sqldescribecol 2 GB ギガバイト集計計算列のメモリが不足連結 mdac25sp1 mdac25 mdac

警告: この記事は自動翻訳されています

プロパティ

文書番号:272951 - 最終更新日: 12/05/2015 21:40:21 - リビジョン: 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

  • kbnosurvey kbarchive kbbug kbfix kbmdac250sp2fix kbqfe kbdatabase kbjet kbmdacnosweep kbhotfixserver kbmt KB272951 KbMtja
フィードバック