⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drvinfo.cpp

📁 快速SQL交互工具
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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 + -