Düzeltme: Microsoft Access/Jet ODBC sürücüsü için hesaplanan metin sütunları 2 gigabayt boyutunu verir.

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:272951
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Belirtiler
Hesaplanan sütunlar SQLDescribeCol hesaplanan sütunları ODBC API çağrısı bir metin veri türü içeren ifadeleri çalıştırdığınızda, Microsoft Windows 2000 Service Pack (SP) 1 ile birlikte (Jet) Microsoft Access ODBC sürücüsü (Odbcjt32.dll 4.0.5303.1 sürüm) kullanıyorsanız, bir <a1>ııswebdirectory</a1> (2 GB) 2147483598 sütun boyutu döndürür.

Bu sütun için ayrılamadı, bellek miktarını belirlemek için döndürülen SQLDescribeCol ODBC API çağrısı sütun boyutunu kullanmaya uygulamalar "Out of memory" ile başarısız hata iletileri.

4.0.5303.1 Odbcjt32.dll sürüm, Microsoft Data Access Components (MDAC) sürüm tarafından 2.5 Service Pack 1'de yüklenir.

Sorun, diğer Access ODBC sürücüleri de oluşabilir.

Windows Vista'daki bu sorun hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
940895Windows Vista tabanlı bir bilgisayarda SQLDescribeCol işlev ve işlevin SQLColAttribute 2147483598 255 beklenen değer yerine, hatalı bir değer döndürür
Neden
Jet, bir sütun boyutu sıfır için Jet ODBC sürücüsü, long veri türünde bir göstergesi olarak yorumlar ve hesaplanan sütunlar döndürür. Bu nedenle, Jet sürücü, 2 GB ise, long veri türleri için izin verilen en büyük boyutu için sütun boyutunu ayarlar. Ancak, veri türü metin veri türünü (karakter veya varchar) türü hala en büyük boyutu 255 olmalıdır SQL_VARCHAR bildirdi.

Örnek bir ODBC izleme alınan (7) yedinci bağımsız değişken olarak verilen 2 GB sütun boyutunu gösteren aşağıdaki gibidir:

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)				
Çözüm
Bu sorunu gidermek için <a0></a0>, Microsoft Data Access Components 2.5 için en son hizmet paketini edinin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
293312MDAC 2.5 en son hizmet paketi nasıl elde edilir
2007 Microsoft Office sisteminde bulunan Access ODBC sürücüsü (Aceodbc.dll) kullanırsanız, <a1>düzeltme</a1> Bu sorunu gidermek için 941877 uygulanır.

<a1>Düzeltme</a1> 941877 hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
941877Access 2007 düzeltme paketinin açıklaması: 26 Şubat 2008'in açıklaması
Bu düzeltmenin İngilizce sürümünde aşağıdaki dosya öznitelikleri veya üstü bulunur:
   Date         Version        Size              File name        -----------------------------------------------------------   08/29/00     4.0.5629.0     270,608 bytes     Odbcjt32.dll				
Not: Bu düzeltmeyi Jet SP5 veya MDAC 2.6 dahil değildir. Bu sorunun yaşandığı sistemlerde, düzeltme, MDAC 2.5 SP2'ye eklenmek üzere bekleniyordu, ancak MDAC 2.5 SP2 yayımlanıncaya kadar bu sorunu çözümlemek için düzeltmeyi uygulamanız gerekir. Ayrıca, MDAC 2.6 için doğrudan MDAC 2.5 SP1'den yükseltilen sistemlerde bu düzeltme, uygulanan olmalıdır.
Pratik Çözüm
Bazı durumlarda, hesaplanan alanın veri türü dönüştürme işlevinde Cınt ya da, sonuçları metin olmayan bir veri türüne dönüştüren CLng, kaydırma mümkün olabilir.
Durum
Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır. Bu sorun ilk olarak Microsoft Data Access Components 2.5 Service Pack 2'de giderilmiştir.
Daha fazla bilgi
IIF, MAX, MIN, FIRST, SAğ, PARÇAAL ve diğerleri gibi sık kullanılan işlevler içeren hesaplanmış değerleri, döndüren bir işlev ile bu davranış oluşabilir.

Not: Bu düzeltme, aşağıdaki Microsoft Knowledge Base makalesinde anlatılan soruna yönelik bir düzeltme de içerir:
271177Düzeltme: ODBC Denetim Masası yoluyla parola korumalı veritabanını onarmak için

Davranışı yeniden oluşturma adımları

  1. Bir Microsoft Visual C++ konsol uygulamasına aşağıdaki kodu kopyalayın ve sonra kodu derleyin. Lütfen veri kaynağı adı, kullanıcı KIMLIĞINI ve parolasını değiştirmeniz gerekebileceğini unutmayın.
    #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. Kodu çalıştırmak ve duyarlığı için döndürülen değer boyutu 2 GB'dir olduğunu unutmayın.

Başvurular

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
271177Düzeltme: ODBC Denetim Masası yoluyla parola korumalı veritabanını onarmak için
Jet 4.0 sqldescribecol 2 GB gigabayt hesaplanan hesaplanan sütunlar bellek yetersiz mdac25sp1 mdac25 mdac art arda eklemek

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 272951 - Son İnceleme: 12/05/2015 21:40:25 - Düzeltme: 5.1

Microsoft Data Access Components 2.5, Microsoft Data Access Components 2.5 Service Pack 1, Access 4.0 için Microsoft Open Database Connectivity Sürücüsü

  • kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbdatabase kbfix kbjet kbmdac250sp2fix kbmdacnosweep KB272951 KbMttr
Geri bildirim