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

Makale çevirileri Makale çevirileri
Makale numarası: 272951 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

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

Özellikler

Makale numarası: 272951 - Last Review: 28 Nisan 2008 Pazartesi - Gözden geçirme: 5.1
Bu makaledeki bilginin uygulandığı durum:
  • 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ü
Anahtar Kelimeler: 
kbmt kbqfe kbhotfixserver kbbug kbdatabase kbfix kbjet kbmdac250sp2fix kbmdacnosweep KB272951 KbMttr
Machine-translated Article
Ö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

Geri Bildirim Ver

 

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