home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
mfc
/
database
/
odbcinfo
/
catsets.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-26
|
3KB
|
112 lines
// catsets.cpp - recordsets that describe the type info
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#include "catsets.h"
/////////////////////////////////////////////////////////////////////////////
// CGetTypeInfo
CGetTypeInfo::CGetTypeInfo(CDatabase* pDatabase)
: CRecordset(pDatabase)
{
m_strTypeName = _T("");
m_fDataType = 0;
m_nPrecision = 0;
m_strLiteralPrefix = _T("");
m_strLiteralSuffix = _T("");
m_strCreateParams = _T("");
m_fNullable = 0;
m_bCaseSensitive = 0;
m_fSearchable = 0;
m_fUnsignedAttribute = 0;
m_bMoney = 0;
m_fAutoIncrement = 0;
m_strLocalTypeName = _T("");
m_nMinimumScale = 0;
m_nMaximumScale = 0;
m_nFields = 15;
}
BOOL CGetTypeInfo::Open(short fSqlType,
UINT nOpenType)
{
RETCODE nRetCode;
UWORD bFunctionExists;
// make suer SQLGetTypeInfo exists
AFX_SQL_SYNC(::SQLGetFunctions(m_pDatabase->m_hdbc,
SQL_API_SQLGETTYPEINFO,&bFunctionExists));
if (!Check(nRetCode) || !bFunctionExists)
{
if (!bFunctionExists)
TRACE(_T("SQLGetTypeInfo not supported\n"));
return FALSE;
}
// Cache state info and allocate hstmt
SetState(nOpenType, NULL, readOnly);
if(!AllocHstmt())
return FALSE;
TRY
{
OnSetOptions(m_hstmt);
// Build SQL and prep/execute or just execute direct
AllocStatusArrays();
// call the ODBC function
AFX_SQL_ASYNC(this,::SQLGetTypeInfo(m_hstmt,fSqlType));
if (!Check(nRetCode))
ThrowDBException(nRetCode,m_hstmt);
// Allocate memory and cache info
AllocAndCacheFieldInfo();
AllocRowset();
// Fetch the first row of data
MoveNext();
// If EOF, then result set empty, so set BOF as well
m_bBOF = m_bEOF;
}
CATCH_ALL(e)
{
Close();
THROW_LAST();
}
END_CATCH_ALL
return TRUE;
}
void CGetTypeInfo::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("TYPE_NAME"), m_strTypeName);
RFX_Int(pFX, _T("DATA_TYPE"), m_fDataType);
RFX_Long(pFX, _T("PRECISION"), m_nPrecision);
RFX_Text(pFX, _T("LITERAL_PREFIX"), m_strLiteralPrefix);
RFX_Text(pFX, _T("LITERAL_SUFFIX"), m_strLiteralSuffix);
RFX_Text(pFX, _T("CREATE_PARAMS"), m_strCreateParams);
RFX_Int(pFX, _T("NULLABLE"), m_fNullable);
RFX_Int(pFX, _T("CASE_SENSITIVE"), m_bCaseSensitive);
RFX_Int(pFX, _T("SEARCHABLE"), m_fSearchable);
RFX_Int(pFX, _T("UNSIGNED_ATTRIBUTE"), m_fUnsignedAttribute);
RFX_Int(pFX, _T("MONEY"), m_bMoney);
RFX_Int(pFX, _T("AUTO_INCREMENT"), m_fAutoIncrement);
RFX_Text(pFX, _T("LOCAL_TYPE_NAME"), m_strLocalTypeName);
RFX_Int(pFX, _T("MINIMUM_SCALE"), m_nMinimumScale);
RFX_Int(pFX, _T("MAXIMUM_SCALE"), m_nMaximumScale);
}