📄 drvinfo.cpp
字号:
// DrvInfo.cpp : implementation file
//
// 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"
#include "DrvInfo.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyPage property page - base class for all other pages
// static members
CDatabase* CMyPage::m_pDatabase = 0;
CImageList* CMyPage::m_pImageList = 0;
int CMyPage::m_nClients = 0;
// SQLGetInfo helpers
//
CString CMyPage::SQLGetInfoString(UWORD fInfoType)
{
UCHAR buffer[200];
SWORD cbData;
::SQLGetInfo(m_pDatabase->m_hdbc, fInfoType,
(PTR)buffer,200,&cbData);
return CString(buffer);
}
UWORD CMyPage::SQLGetInfoShort(UWORD fInfoType)
{
UWORD value;
SWORD cbData;
::SQLGetInfo(m_pDatabase->m_hdbc, fInfoType,
(PTR)&value,2,&cbData);
return value;
}
UDWORD CMyPage::SQLGetInfoLong(UWORD fInfoType)
{
UDWORD value;
SWORD cbData;
::SQLGetInfo(m_pDatabase->m_hdbc, fInfoType,
(PTR)&value,4,&cbData);
return value;
}
// formatting helpers
//
void CMyPage::ZeroIsNoneLong(CString& string,UWORD fInfoType)
{
UDWORD value = SQLGetInfoLong(fInfoType);
if (value)
string.Format(_T("%d"),value);
else
string = _T("<none>");
}
void CMyPage::ZeroIsNoneShort(CString& string,UWORD fInfoType)
{
UWORD value = SQLGetInfoShort(fInfoType);
if (value)
string.Format(_T("%d"),value);
else
string = _T("<none>");
}
void CMyPage::YIsYes(CString& string,UWORD fInfoType)
{
string = SQLGetInfoString(fInfoType);
if (string == _T("Y"))
string = _T("Yes");
else if (string == _T("N"))
string = _T("No");
}
void CMyPage::YIsSupported(CString& string,UWORD fInfoType)
{
string = SQLGetInfoString(fInfoType);
if (string == _T("Y"))
string = _T("Supported");
else if (string == _T("N"))
string = _T("Not Supported");
}
// CMyPage construction and destruction
CMyPage::CMyPage(CDatabase* pDatabase, UINT nIdTemplate)
: CPropertyPage(nIdTemplate)
{
// Interim soution only
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT(pFrame != NULL);
CChildFrame* pChildFrame = (CChildFrame*)pFrame->MDIGetActive();
ASSERT(pChildFrame != NULL);
m_pDatabase = &pChildFrame->m_database;
// if no other page has created the image list, create it
if(!m_pImageList)
{
m_pImageList = new CImageList;
m_pImageList->Create(IDB_IMAGELIST,16,0,RGB(255,255,255));
}
m_nClients++;
}
CMyPage::~CMyPage()
{
// decrement imagelist client count, delete if it becomes 0
m_nClients--;
if (!m_nClients)
{
if(m_pImageList != NULL)
{
delete m_pImageList;
m_pImageList = NULL;
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CDriverInfo property page
IMPLEMENT_DYNCREATE(CDriverInfo, CPropertyPage)
CDriverInfo::CDriverInfo(CDatabase* pDatabase)
: CMyPage(pDatabase,CDriverInfo::IDD)
{
//{{AFX_DATA_INIT(CDriverInfo)
m_strSqlUserName = _T("");
m_strSqlServerName = _T("");
m_strSqlDbmsName = _T("");
m_strSqlDbmsVer = _T("");
m_strSqlDriverName = _T("");
m_strSqlDriverOdbcVer = _T("");
m_strSqlDriverVer = _T("");
m_strSqlOdbcVer = _T("");
m_strSqlOdbcApiConformance = _T("");
m_strSqlOdbcSagCliConformance = _T("");
m_strSqlOdbcSqlConformance = _T("");
m_strSqlOdbcSqlOptIef = _T("");
m_strSqlActiveConnections = _T("");
m_strSqlActiveStatements = _T("");
m_strSqlMultResultSets = _T("");
m_strSqlFileUsage = _T("");
m_strSqlDataSourceReadOnly = _T("");
m_strSqlDataSourceName = _T("");
m_strSqlAccessibleProcedures = _T("");
m_strSqlAccessibleTables = _T("");
m_strSqlDatabaseName = _T("");
//}}AFX_DATA_INIT
OnNewDSN();
}
CDriverInfo::~CDriverInfo()
{
}
void CDriverInfo::DumpToFile(CStdioFile& file)
{
if (m_pDatabase->IsOpen())
{
CString string;
file.WriteString(_T("Driver Info\n-----------\n"));
string.Format(_T(" Data Source Name - %s\n"),m_strSqlDataSourceName);
file.WriteString(string);
string.Format(_T(" Database Name - %s\n"),m_strSqlDatabaseName);
file.WriteString(string);
string.Format(_T(" User Name - %s\n"),m_strSqlUserName);
file.WriteString(string);
string.Format(_T(" Server Name - %s\n"),m_strSqlServerName);
file.WriteString(string);
string.Format(_T(" DBMS - %s version %s\n"),
m_strSqlDbmsName,m_strSqlDbmsVer);
file.WriteString(string);
string.Format(_T(" Driver - %s version %s\n"),
m_strSqlDriverName,m_strSqlDriverVer);
file.WriteString(string);
string.Format(_T(" Driver ODBC Ver. - %s\n"),m_strSqlDriverOdbcVer);
file.WriteString(string);
string.Format(_T(" ODBC Version - %s\n"),m_strSqlOdbcVer);
file.WriteString(string);
string.Format(_T(" API Conformance - %s\n"),m_strSqlOdbcApiConformance);
file.WriteString(string);
string.Format(_T(" SQL Conformance - %s\n"),m_strSqlOdbcSqlConformance);
file.WriteString(string);
string.Format(_T(" SAG CLI Conformance - %s\n"),m_strSqlOdbcSagCliConformance);
file.WriteString(string);
string.Format(_T(" Optional SQL IEF - %s\n"),m_strSqlOdbcSqlOptIef);
file.WriteString(string);
string.Format(_T(" Active Connections - %s\n"),m_strSqlActiveConnections);
file.WriteString(string);
string.Format(_T(" Active Statements - %s\n"),m_strSqlActiveStatements);
file.WriteString(string);
string.Format(_T(" Multiple Result Sets - %s\n"),m_strSqlMultResultSets);
file.WriteString(string);
string.Format(_T(" File Usage - %s\n"),m_strSqlFileUsage);
file.WriteString(string);
string.Format(_T(" Read/Write Status - %s\n"),m_strSqlDataSourceReadOnly);
file.WriteString(string);
string.Format(_T("Accessible Procedures - %s\n"),m_strSqlAccessibleProcedures);
file.WriteString(string);
string.Format(_T(" Accessible Tables - %s\n\n"),m_strSqlAccessibleTables);
file.WriteString(string);
}
}
void CDriverInfo::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDriverInfo)
DDX_Text(pDX, IDC_SQL_USER_NAME, m_strSqlUserName);
DDX_Text(pDX, IDC_SQL_SERVER_NAME, m_strSqlServerName);
DDX_Text(pDX, IDC_SQL_DBMS_NAME, m_strSqlDbmsName);
DDX_Text(pDX, IDC_SQL_DBMS_VER, m_strSqlDbmsVer);
DDX_Text(pDX, IDC_SQL_DRIVER_NAME, m_strSqlDriverName);
DDX_Text(pDX, IDC_SQL_DRIVER_ODBC_VER, m_strSqlDriverOdbcVer);
DDX_Text(pDX, IDC_SQL_DRIVER_VER, m_strSqlDriverVer);
DDX_Text(pDX, IDC_SQL_ODBC_VER, m_strSqlOdbcVer);
DDX_Text(pDX, IDC_SQL_ODBC_API_CONFORMANCE, m_strSqlOdbcApiConformance);
DDX_Text(pDX, IDC_SQL_ODBC_SAG_CLI_CONFORMANCE, m_strSqlOdbcSagCliConformance);
DDX_Text(pDX, IDC_SQL_ODBC_SQL_CONFORMANCE, m_strSqlOdbcSqlConformance);
DDX_Text(pDX, IDC_SQL_ODBC_SQL_OPT_IEF, m_strSqlOdbcSqlOptIef);
DDX_Text(pDX, IDC_SQL_ACTIVE_CONNECTIONS, m_strSqlActiveConnections);
DDX_Text(pDX, IDC_SQL_ACTIVE_STATEMENTS, m_strSqlActiveStatements);
DDX_Text(pDX, IDC_SQL_MULT_RESULT_SETS, m_strSqlMultResultSets);
DDX_Text(pDX, IDC_SQL_FILE_USAGE, m_strSqlFileUsage);
DDX_Text(pDX, IDC_SQL_DATA_SOURCE_READ_ONLY, m_strSqlDataSourceReadOnly);
DDX_Text(pDX, IDC_DSN, m_strSqlDataSourceName);
DDX_Text(pDX, IDC_SQL_ACCESSIBLE_PROCEDURES, m_strSqlAccessibleProcedures);
DDX_Text(pDX, IDC_SQL_ACCESSIBLE_TABLES, m_strSqlAccessibleTables);
DDX_Text(pDX, IDC_SQL_DATABASE_NAME_X, m_strSqlDatabaseName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDriverInfo, CPropertyPage)
//{{AFX_MSG_MAP(CDriverInfo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDriverInfo message handlers
void CDriverInfo::OnNewDSN()
{
if (m_pDatabase->IsOpen())
{
SWORD value;
CString string;
m_strSqlDataSourceName = SQLGetInfoString(SQL_DATA_SOURCE_NAME);
m_strSqlUserName = SQLGetInfoString(SQL_USER_NAME);
m_strSqlServerName = SQLGetInfoString(SQL_SERVER_NAME);
m_strSqlDatabaseName = SQLGetInfoString(SQL_DATABASE_NAME);
m_strSqlDbmsName = SQLGetInfoString(SQL_DBMS_NAME);
m_strSqlDbmsVer = SQLGetInfoString(SQL_DBMS_VER);
m_strSqlDriverName = SQLGetInfoString(SQL_DRIVER_NAME);
m_strSqlDriverVer = SQLGetInfoString(SQL_DRIVER_VER);
m_strSqlDriverOdbcVer = SQLGetInfoString(SQL_DRIVER_ODBC_VER);
m_strSqlOdbcVer = SQLGetInfoString(SQL_ODBC_VER);
switch (SQLGetInfoShort(SQL_ODBC_API_CONFORMANCE))
{
case SQL_OAC_NONE:
m_strSqlOdbcApiConformance = _T("Core");
break;
case SQL_OAC_LEVEL1:
m_strSqlOdbcApiConformance = _T("Level 1");
break;
case SQL_OAC_LEVEL2:
m_strSqlOdbcApiConformance = _T("Level 2");
break;
}
switch (SQLGetInfoShort(SQL_ODBC_SQL_CONFORMANCE))
{
case SQL_OSC_MINIMUM:
m_strSqlOdbcSqlConformance = _T("Minimum");
break;
case SQL_OSC_CORE:
m_strSqlOdbcSqlConformance = _T("Core");
break;
case SQL_OSC_EXTENDED:
m_strSqlOdbcSqlConformance = _T("Extended");
break;
}
switch (SQLGetInfoShort(SQL_ODBC_SAG_CLI_CONFORMANCE))
{
case SQL_OSCC_NOT_COMPLIANT:
m_strSqlOdbcSagCliConformance = _T("No");
break;
case SQL_OSCC_COMPLIANT:
m_strSqlOdbcSagCliConformance = _T("Yes");
break;
}
YIsSupported(m_strSqlOdbcSqlOptIef,SQL_ODBC_SQL_OPT_IEF);
if (value = SQLGetInfoShort(SQL_ACTIVE_CONNECTIONS))
m_strSqlActiveConnections.Format(_T("%d"),value);
else
m_strSqlActiveConnections = _T("No Limit");
if (value = SQLGetInfoShort(SQL_ACTIVE_STATEMENTS))
m_strSqlActiveStatements.Format(_T("%d"),value);
else
m_strSqlActiveStatements = _T("No Limit");
YIsSupported(m_strSqlMultResultSets,SQL_MULT_RESULT_SETS);
switch (SQLGetInfoShort(SQL_FILE_USAGE))
{
case SQL_FILE_NOT_SUPPORTED:
m_strSqlFileUsage = _T("<n/a>, Driver not single-tier");
break;
case SQL_FILE_TABLE:
m_strSqlFileUsage = _T("Files are Tables");
break;
case SQL_FILE_QUALIFIER:
m_strSqlFileUsage = _T("Files are Qualifiers");
break;
}
string = SQLGetInfoString(SQL_DATA_SOURCE_READ_ONLY);
if (string == _T("Y"))
m_strSqlDataSourceReadOnly = _T("Data source is read-only");
else if (string == _T("N"))
m_strSqlDataSourceReadOnly = _T("Data source is read-write");
YIsYes(m_strSqlAccessibleProcedures,SQL_ACCESSIBLE_PROCEDURES);
YIsYes(m_strSqlAccessibleTables,SQL_ACCESSIBLE_TABLES);
if (IsWindow(m_hWnd))
UpdateData(FALSE);
}
}
BOOL CDriverInfo::OnInitDialog()
{
CWaitCursor wait;
CPropertyPage::OnInitDialog();
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/////////////////////////////////////////////////////////////////////////////
// CFunctions property page
IMPLEMENT_DYNCREATE(CFunctions, CPropertyPage)
#define CONVERSIONS_START 0
#define NUM_CONVERSIONS 1
#define NUMERIC_START 1
#define NUM_NUMERICS 24
#define STRINGS_START 25
#define NUM_STRINGS 19
#define SYSTEMS_START 44
#define NUM_SYSTEMS 3
#define TIMEDATES_START 47
#define NUM_TIMEDATES 17
SDWORD CFunctions::m_dwConversionsMasks[] =
{
SQL_FN_CVT_CONVERT
};
SDWORD CFunctions::m_dwNumericMasks[] =
{
SQL_FN_NUM_ABS,
SQL_FN_NUM_ACOS,
SQL_FN_NUM_ASIN,
SQL_FN_NUM_ATAN,
SQL_FN_NUM_ATAN2,
SQL_FN_NUM_CEILING,
SQL_FN_NUM_COS,
SQL_FN_NUM_COT,
SQL_FN_NUM_DEGREES,
SQL_FN_NUM_EXP,
SQL_FN_NUM_FLOOR,
SQL_FN_NUM_LOG,
SQL_FN_NUM_LOG10,
SQL_FN_NUM_MOD,
SQL_FN_NUM_PI,
SQL_FN_NUM_POWER,
SQL_FN_NUM_RADIANS,
SQL_FN_NUM_RAND,
SQL_FN_NUM_ROUND,
SQL_FN_NUM_SIGN,
SQL_FN_NUM_SIN,
SQL_FN_NUM_SQRT,
SQL_FN_NUM_TAN,
SQL_FN_NUM_TRUNCATE
};
SDWORD CFunctions::m_dwStringsMasks[] =
{
SQL_FN_STR_ASCII,
SQL_FN_STR_CHAR,
SQL_FN_STR_CONCAT,
SQL_FN_STR_DIFFERENCE,
SQL_FN_STR_INSERT,
SQL_FN_STR_LCASE,
SQL_FN_STR_LEFT,
SQL_FN_STR_LENGTH,
SQL_FN_STR_LOCATE,
SQL_FN_STR_LOCATE_2,
SQL_FN_STR_LTRIM,
SQL_FN_STR_REPEAT,
SQL_FN_STR_REPLACE,
SQL_FN_STR_RIGHT,
SQL_FN_STR_RTRIM,
SQL_FN_STR_SOUNDEX,
SQL_FN_STR_SPACE,
SQL_FN_STR_SUBSTRING,
SQL_FN_STR_UCASE
};
SDWORD CFunctions::m_dwSystemsMasks[] =
{
SQL_FN_SYS_DBNAME,
SQL_FN_SYS_IFNULL,
SQL_FN_SYS_USERNAME,
};
SDWORD CFunctions::m_dwTimeDatesMasks[] =
{
SQL_FN_TD_CURDATE,
SQL_FN_TD_CURTIME,
SQL_FN_TD_DAYNAME,
SQL_FN_TD_DAYOFMONTH,
SQL_FN_TD_DAYOFWEEK,
SQL_FN_TD_DAYOFYEAR,
SQL_FN_TD_HOUR,
SQL_FN_TD_MINUTE,
SQL_FN_TD_MONTH,
SQL_FN_TD_MONTHNAME,
SQL_FN_TD_NOW,
SQL_FN_TD_QUARTER,
SQL_FN_TD_SECOND,
SQL_FN_TD_TIMESTAMPADD,
SQL_FN_TD_TIMESTAMPDIFF,
SQL_FN_TD_WEEK,
SQL_FN_TD_YEAR,
};
LPCTSTR CFunctions::m_szSqlFunctions[] =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -