การแก้ไข: โปรแกรมควบคุม ODBC การเข้า ถึง/Jet Microsoft กลับขนาด 2 กิกะสำหรับข้อความที่มีการคำนวณคอลัมน์

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 272951 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

ถ้าคุณใช้โปรแกรมควบคุม ODBC Microsoft Access (Jet) (Odbcjt32.dll รุ่น 4.0.5303.1), ซึ่งถูกจัดส่ง โดยใช้ Microsoft Windows 2000 Service Pack (SP) 1 เมื่อคุณเรียกใช้คำสั่งที่ประกอบด้วยการคำนวณคอลัมน์ของข้อมูลที่มีข้อความ พิมพ์ การเรียกSQLDescribeColAPI odbc ในคอลัมน์ที่มีการคำนวณส่งกลับเป็นขนาดคอลัมน์ 2147483598 (2 กิกะไบต์)

โปรแกรมประยุกต์ที่มีความพยายามที่ใช้ขนาดคอลัมน์ที่ส่งคืนจากการเรียกไปSQLDescribeColAPI ODBC การตรวจสอบการปันส่วนสำหรับคอลัมน์ จำนวนหน่วยความจำล้มเหลว ด้วย "หน่วยความไม่อยู่ที่จำ" ข้อผิดพลาด

นอกจากนี้ยังมีการติดตั้งรุ่น Odbcjt32.dll 4.0.5303.1 โดยรุ่นคอมโพเนนต์การเข้าถึงข้อมูลของ Microsoft (MDAC) 2.5, Service Pack 1

ปัญหานี้อาจเกิดขึ้นในโปรแกรมควบคุม ODBC ที่เข้าถึงอื่น ๆ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ใน Windows Vista คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
940895บนคอมพิวเตอร์ที่ใช้ Windows Vista ฟังก์ชัน SQLDescribeCol และฟังก์ชัน SQLColAttribute คืนค่าไม่ถูกต้องของ 2147483598 แทนการค่า expected 255

สาเหตุ

เจ็ตส่งกลับค่าศูนย์สำหรับการคำนวณคอลัมน์ ซึ่งโปรแกรมควบคุม Jet ODBC interprets เป็นการบ่งชี้ชนิดของข้อมูลที่ยาว จำนวนคอลัมน์ เนื่องจากความตัวนี้ ไดรเวอร์ Jet กำหนดขนาดคอลัมน์ถึงขนาดสูงสุดที่อนุญาตสำหรับชนิดของข้อมูลที่ยาว ซึ่งเป็น 2 กิกะไบต์ อย่างไรก็ตาม ถ้าชนิดข้อมูลมีชนิดข้อมูลแบบข้อความ (อักขระหรือ varchar) ชนิดจะยังคงรายงานเป็น SQL_VARCHAR ซึ่งควรมีขนาดสูงสุดที่มี 255

ตัวอย่างที่นำมาจากการสืบค้นกลับ ODBC ตามที่อธิบายขนาดคอลัมน์ 2 กิกะไบต์ที่ส่งคืนเป็นอาร์กิวเมนต์ที่ (7) seventh:

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)
				

การแก้ไข

เมื่อต้องการแก้ไขปัญหานี้ ขอรับ service pack ล่าสุดสำหรับ Microsoft 2.5 คอมโพเนนต์การเข้าถึงข้อมูล สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
293312วิธีการขอรับ service pack ล่าสุดของ MDAC 2.5
ถ้าคุณใช้โปรแกรมควบคุม ODBC ที่เข้าถึง (Aceodbc.dll) ที่จะรวมอยู่ในระบบ Microsoft Office 2007 ใช้โปรแกรมแก้ไขด่วน 941877 เพื่อแก้ไขปัญหานี้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมแก้ไขด่วน 941877 คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
941877คำอธิบายของแพคเกจโปรแกรมแก้ไขด่วนของ Access 2007: 26 กุมภาพันธ์ 2008
รุ่นภาษาอังกฤษของโปรแกรมแก้ไขนี้ควรมีแอตทริบิวต์ของแฟ้มต่างๆ ดังต่อไปนี้หรือใหม่กว่า::
   Date         Version        Size              File name     
   -----------------------------------------------------------
   08/29/00     4.0.5629.0     270,608 bytes     Odbcjt32.dll
				
หมายเหตุ::โปรแกรมแก้ไขด่วนนี้ไม่รวมอยู่ ด้วย SP5 Jet หรือ MDAC 2.6 แม้ว่าการแก้ไขจะคาดว่าจะรวมอยู่ใน MDAC 2.5 SP2 ระบบที่พบปัญหานี้ต้องใช้โปรแกรมแก้ไขด่วนเพื่อแก้ไขปัญหานี้ได้จนกว่า MDAC 2.5 SP2 ถูกนำออกใช้ นอกจากนี้ ระบบที่ปรับรุ่นโดยตรงจาก MDAC 2.5 SP1 MDAC 2.6 ควรจะมีโปรแกรมแก้ไขด่วนนี้นำไปใช้

การหลีกเลี่ยงปัญหา

ในบางกรณี อาจเป็นไปได้ตัดฟิลด์ที่คำนวณได้ในฟังก์ชันการแปลงชนิดข้อมูลเช่นCIntหรือCLngซึ่งแปลงผลลัพธ์ไปยังชนิดข้อมูลไม่ใช่ข้อความ

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "การใช้งาน" ก่อนมีแก้ไขปัญหานี้ใน Microsoft Data Access คอมโพเนนต์ 2.5 Service Pack 2

ข้อมูลเพิ่มเติม

ลักษณะการทำงานนี้อาจเกิดขึ้น ด้วยฟังก์ชันที่คำนวณได้ค่า ซึ่งรวมถึงฟังก์ชันต่าง ๆ ที่พบโดยทั่วไปเช่นการคืนค่าiif,max,ค่าน้อยที่สุด,First,ด้านขวา,midแล้วจึงกลับ

หมายเหตุ:: โปรแกรมแก้ไขด่วนนี้ยังประกอบด้วยการแก้ไขสำหรับปัญหา outlined ในบทความฐานความรู้ของ Microsoft ต่อไปนี้:
271177การแก้ไข: ไม่สามารถซ่อมแซมฐานข้อมูลได้รับการป้องกันรหัสผ่าน โดยใช้'แผงควบคุม' 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 กิกะไบต์

อ้างอิง:

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
271177FIX: Unable to repair password protected database through ODBC Control Panel

คุณสมบัติ

หมายเลขบทความ (Article ID): 272951 - รีวิวครั้งสุดท้าย: 8 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Data Access Components 2.5
Keywords: 
kbqfe kbhotfixserver kbbug kbdatabase kbfix kbjet kbmdac250sp2fix kbmdacnosweep kbmt KB272951 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:272951

ให้ข้อเสนอแนะ

 

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