Porting a 32 bit del programma di scarico da ODBC. Tradotti in italiano alcuni messaggi di errore. Correzioni al programma di aggiornamento anagrafiche. Cambiata la sequenza di ricerca: prima cerca il driver e poi eventualmente la variabile d'ambiente SPPROOT. git-svn-id: svn://10.65.10.50/trunk@5189 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			153 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // sqlcols.cpp: implementation of the CColumns class
 | |
| //
 | |
| // This is a part of the Microsoft Foundation Classes C++ library.
 | |
| // Copyright (C) 1992-1993 Microsoft Corporation
 | |
| // All rights reserved.
 | |
| //
 | |
| // This source code is only intended as a supplement to the
 | |
| // Microsoft Foundation Classes Reference and Microsoft
 | |
| // QuickHelp and/or WinHelp documentation provided with the library.
 | |
| // See these sources for detailed information regarding the
 | |
| // Microsoft Foundation Classes product.
 | |
| 
 | |
| 
 | |
| #include "stdafx.h"
 | |
| #include "columnst.h"
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| // CColumns implementation
 | |
| 
 | |
| // IMPLEMENT_DYNAMIC(CColumns, CRecordset)
 | |
| 
 | |
| CColumns::CColumns(CDatabase* pDatabase)
 | |
|   : CRecordset(pDatabase)
 | |
| {
 | |
|   //{{AFX_FIELD_INIT(CColumns)
 | |
|   m_strQualifier = "";
 | |
|   m_strOwner = "";
 | |
|   m_strTableName = "";
 | |
|   m_strColumnName = "";
 | |
|   m_nDataType = 0;
 | |
|   m_strTypeName = "";
 | |
|   m_lPrecision = 0;
 | |
|   m_lLength = 0;
 | |
|   m_nScale = 0;
 | |
|   m_nRadix = 0;
 | |
|   m_nFields = 11;
 | |
|   //}}AFX_FIELD_INIT
 | |
|   m_strQualifierParam = "";
 | |
|   m_strOwnerParam = "";
 | |
|   m_strTableNameParam = "";
 | |
|   m_strColumnNameParam = "";
 | |
| }
 | |
| 
 | |
| BOOL CColumns::Open(UINT nOpenType /* = snapshot */,
 | |
|   LPCSTR lpszSQL /* = NULL */, DWORD dwOptions /* = none */)
 | |
| {
 | |
|   RETCODE nRetCode;
 | |
|   ASSERT(lpszSQL == NULL);
 | |
| 
 | |
|   // Allocation and opening of database not supported
 | |
|   if (m_hstmt == SQL_NULL_HSTMT)
 | |
|   {
 | |
|     CString strDefaultConnect;
 | |
|     TRY
 | |
|     {
 | |
|       if (m_pDatabase == NULL)
 | |
|       {
 | |
|         m_pDatabase = new CDatabase();
 | |
|         m_bRecordsetDb = TRUE;
 | |
|       }
 | |
| 
 | |
|       strDefaultConnect = GetDefaultConnect();
 | |
|       // If not already opened, attempt to open
 | |
|       if (!m_pDatabase->IsOpen() &&
 | |
|         !m_pDatabase->Open("", FALSE, FALSE, strDefaultConnect))
 | |
|         return FALSE;
 | |
| 
 | |
|       AFX_SQL_SYNC(::SQLAllocStmt(m_pDatabase->m_hdbc, &m_hstmt));
 | |
|       if (!Check(nRetCode))
 | |
|         ThrowDBException(SQL_INVALID_HANDLE);
 | |
|     }
 | |
|     CATCH_ALL(e)
 | |
|     {
 | |
| #ifdef _DEBUG
 | |
|       if (afxTraceFlags & 0x20)
 | |
|         TRACE0("Error: CDatabase create for CRecordset failed\n");
 | |
| #endif // _DEBUG
 | |
|       strDefaultConnect.Empty();
 | |
|       if (m_bRecordsetDb)
 | |
|       {
 | |
|         delete m_pDatabase;
 | |
|         m_pDatabase = NULL;
 | |
|       }
 | |
|       ASSERT(m_hstmt == SQL_NULL_HSTMT);
 | |
|       THROW_LAST();
 | |
|     }
 | |
|     END_CATCH_ALL
 | |
|   }
 | |
| 
 | |
|   TRY
 | |
|   {
 | |
|     // set any options, like timeouts, scrolling options
 | |
|     OnSetOptions(m_hstmt);
 | |
| 
 | |
|     // call the ODBC catalog function with data member params
 | |
|     RETCODE nRetCode;
 | |
|     AFX_SQL_ASYNC(this, ::SQLColumns(m_hstmt,
 | |
|       (m_strQualifierParam.IsEmpty()? (UCHAR FAR *)NULL: (UCHAR FAR *)(const char*)m_strQualifierParam), SQL_NTS,
 | |
|       (m_strOwnerParam.IsEmpty()? (UCHAR FAR *)NULL: (UCHAR FAR *)(const char*)m_strOwnerParam), SQL_NTS,
 | |
|       (m_strTableNameParam.IsEmpty()? (UCHAR FAR *)NULL: (UCHAR FAR *)(const char*)m_strTableNameParam), SQL_NTS,
 | |
|       NULL, SQL_NTS));
 | |
|     if (!Check(nRetCode))
 | |
|     {
 | |
|       AfxThrowDBException(nRetCode, m_pDatabase, m_hstmt);
 | |
|     }
 | |
| #ifdef WIN32
 | |
| 	AllocStatusArrays();
 | |
| 	AllocAndCacheFieldInfo();
 | |
|     AllocRowset();
 | |
| #endif
 | |
| 	// load first record
 | |
|     MoveFirst();
 | |
|   }
 | |
|   CATCH_ALL(e)
 | |
|   {
 | |
|     Close();
 | |
|     THROW_LAST();
 | |
|   }
 | |
|   END_CATCH_ALL
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| CString CColumns::GetDefaultConnect()
 | |
| {
 | |
|   // this minimal connect string will cause ODBC login dialog to be brought up
 | |
|   return "ODBC;";
 | |
| }
 | |
| 
 | |
| CString CColumns::GetDefaultSQL()
 | |
| {
 | |
|   // there is no default SQL - a direct ODBC call is made instead
 | |
|   ASSERT(FALSE);
 | |
|   return "!";
 | |
| }
 | |
| 
 | |
| void CColumns::DoFieldExchange(CFieldExchange* pFX)
 | |
| {
 | |
|   //{{AFX_FIELD_MAP(CColumns)
 | |
|   pFX->SetFieldType(CFieldExchange::outputColumn);
 | |
|   RFX_Text(pFX, "table_qualifier", m_strQualifier);
 | |
|   RFX_Text(pFX, "table_owner", m_strOwner);
 | |
|   RFX_Text(pFX, "table_name", m_strTableName);
 | |
|   RFX_Text(pFX, "column_name", m_strColumnName);
 | |
|   RFX_Int(pFX, "data_type", m_nDataType);
 | |
|   RFX_Text(pFX, "type_name", m_strTypeName);
 | |
|   RFX_Long(pFX, "precision", m_lPrecision);
 | |
|   RFX_Long(pFX, "length", m_lLength);
 | |
|   RFX_Int(pFX, "scale", m_nScale);
 | |
|   RFX_Int(pFX, "radix", m_nRadix);
 | |
|   RFX_Int(pFX, "nullable", m_nNullable);
 | |
|   //}}AFX_FIELD_MAP
 | |
| }
 |