📄 afxdb.h
字号:
// 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.
#ifndef __AFXDB_H__
#define __AFXDB_H__
#ifdef _AFX_NO_DB_SUPPORT
#error Database classes not supported in this library variant.
#endif
#ifndef __AFXEXT_H__
#include <afxext.h>
#endif
#ifndef __AFXDB__H__
#include <afxdb_.h> // shared header DAO database classes
#endif
// include standard SQL/ODBC "C" APIs
#ifndef __SQL
#define SQL_NOUNICODEMAP
#include <sql.h> // core
#endif
#ifndef __SQLEXT
#include <sqlext.h> // extensions
#endif
#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, off)
#endif
#ifndef _AFX_FULLTYPEINFO
#pragma component(mintypeinfo, on)
#endif
#ifndef _AFX_NOFORCE_LIBS
/////////////////////////////////////////////////////////////////////////////
// Win32 libraries
#ifdef _AFXDLL
#if defined(_DEBUG) && !defined(_AFX_MONOLITHIC)
#ifndef _UNICODE
#pragma comment(lib, "mfcd42d.lib")
#else
#pragma comment(lib, "mfcd42ud.lib")
#endif
#endif
#endif
#pragma comment(lib, "odbc32.lib")
#pragma comment(lib, "odbccp32.lib")
#endif //!_AFX_NOFORCE_LIBS
/////////////////////////////////////////////////////////////////////////////
#ifdef _AFX_PACKING
#pragma pack(push, _AFX_PACKING)
#endif
/////////////////////////////////////////////////////////////////////////////
// AFXDB - MFC SQL/ODBC/Database support
// Classes declared in this file
//CException
class CDBException; // abnormal return value
//CFieldExchange
class CFieldExchange; // Recordset Field Exchange
//CObject
class CDatabase; // Connecting to databases
class CRecordset; // Data result sets
//CObject
//CCmdTarget;
//CWnd
//CView
//CScrollView
//CFormView
class CRecordView; // view records with a form
// Non CObject classes
class CDBVariant;
struct CRecordsetStatus;
struct CFieldInfo;
struct CODBCFieldInfo;
struct CODBCParamInfo;
/////////////////////////////////////////////////////////////////////////////
// ODBC helpers
// return code left in 'nRetCode'
// This MACRO is now out-of-date (kept for backward compatibility)
#define AFX_ODBC_CALL(SQLFunc) \
do \
{ \
} while ((nRetCode = (SQLFunc)) == SQL_STILL_EXECUTING)
// Not really required, but kept for compatibilty
#define AFX_SQL_SYNC(SQLFunc) \
do \
{ \
nRetCode = SQLFunc; \
} while (0)
// Now out-of-date (prs not used) but kept for compatibility
#define AFX_SQL_ASYNC(prs, SQLFunc) AFX_ODBC_CALL(SQLFunc)
// Max display length in chars of timestamp (date & time) value
#define TIMESTAMP_PRECISION 23
// AFXDLL support
#undef AFX_DATA
#define AFX_DATA AFX_DB_DATA
// Miscellaneous sizing info
#define MAX_CURRENCY 30 // Max size of Currency($) string
#define MAX_TNAME_LEN 64 // Max size of table names
#define MAX_FNAME_LEN 256 // Max size of field names
#define MAX_DBNAME_LEN 32 // Max size of a database name
#define MAX_DNAME_LEN 256 // Max size of Recordset names
#define MAX_CONNECT_LEN 512 // Max size of Connect string
#define MAX_CURSOR_NAME 18 // Max size of a cursor name
#define DEFAULT_FIELD_TYPE SQL_TYPE_NULL // pick "C" data type to match SQL data type
// Timeout and net wait defaults
#define DEFAULT_LOGIN_TIMEOUT 15 // seconds to before fail on connect
#define DEFAULT_QUERY_TIMEOUT 15 // seconds to before fail waiting for results
// Field Flags, used to indicate status of fields
#define AFX_SQL_FIELD_FLAG_DIRTY 0x1
#define AFX_SQL_FIELD_FLAG_NULL 0x2
// Update options flags
#define AFX_SQL_SETPOSUPDATES 0x0001
#define AFX_SQL_POSITIONEDSQL 0x0002
#define AFX_SQL_GDBOUND 0x0004
/////////////////////////////////////////////////////////////////////////////
// CDBException - something gone wrong
// Dbkit extended error codes
#define AFX_SQL_ERROR 1000
#define AFX_SQL_ERROR_CONNECT_FAIL AFX_SQL_ERROR+1
#define AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY AFX_SQL_ERROR+2
#define AFX_SQL_ERROR_EMPTY_COLUMN_LIST AFX_SQL_ERROR+3
#define AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH AFX_SQL_ERROR+4
#define AFX_SQL_ERROR_ILLEGAL_MODE AFX_SQL_ERROR+5
#define AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED AFX_SQL_ERROR+6
#define AFX_SQL_ERROR_NO_CURRENT_RECORD AFX_SQL_ERROR+7
#define AFX_SQL_ERROR_NO_ROWS_AFFECTED AFX_SQL_ERROR+8
#define AFX_SQL_ERROR_RECORDSET_READONLY AFX_SQL_ERROR+9
#define AFX_SQL_ERROR_SQL_NO_TOTAL AFX_SQL_ERROR+10
#define AFX_SQL_ERROR_ODBC_LOAD_FAILED AFX_SQL_ERROR+11
#define AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED AFX_SQL_ERROR+12
#define AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED AFX_SQL_ERROR+13
#define AFX_SQL_ERROR_API_CONFORMANCE AFX_SQL_ERROR+14
#define AFX_SQL_ERROR_SQL_CONFORMANCE AFX_SQL_ERROR+15
#define AFX_SQL_ERROR_NO_DATA_FOUND AFX_SQL_ERROR+16
#define AFX_SQL_ERROR_ROW_UPDATE_NOT_SUPPORTED AFX_SQL_ERROR+17
#define AFX_SQL_ERROR_ODBC_V2_REQUIRED AFX_SQL_ERROR+18
#define AFX_SQL_ERROR_NO_POSITIONED_UPDATES AFX_SQL_ERROR+19
#define AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED AFX_SQL_ERROR+20
#define AFX_SQL_ERROR_DATA_TRUNCATED AFX_SQL_ERROR+21
#define AFX_SQL_ERROR_ROW_FETCH AFX_SQL_ERROR+22
#define AFX_SQL_ERROR_INCORRECT_ODBC AFX_SQL_ERROR+23
#define AFX_SQL_ERROR_UPDATE_DELETE_FAILED AFX_SQL_ERROR+24
#define AFX_SQL_ERROR_DYNAMIC_CURSOR_NOT_SUPPORTED AFX_SQL_ERROR+25
#define AFX_SQL_ERROR_FIELD_NOT_FOUND AFX_SQL_ERROR+26
#define AFX_SQL_ERROR_BOOKMARKS_NOT_SUPPORTED AFX_SQL_ERROR+27
#define AFX_SQL_ERROR_BOOKMARKS_NOT_ENABLED AFX_SQL_ERROR+28
#define AFX_SQL_ERROR_MAX AFX_SQL_ERROR+29
class CDBException : public CException
{
DECLARE_DYNAMIC(CDBException)
// Attributes
public:
RETCODE m_nRetCode;
CString m_strError;
CString m_strStateNativeOrigin;
// Implementation (use AfxThrowDBException to create)
public:
CDBException(RETCODE nRetCode = SQL_SUCCESS);
virtual void BuildErrorString(CDatabase* pdb, HSTMT hstmt,
BOOL bTrace = TRUE);
void Empty();
virtual ~CDBException();
virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError,
PUINT pnHelpContext = NULL);
#ifdef _DEBUG
void TraceErrorMessage(LPCTSTR szTrace) const;
#endif // DEBUG
};
void AFXAPI AfxThrowDBException(RETCODE nRetCode, CDatabase* pdb, HSTMT hstmt);
//////////////////////////////////////////////////////////////////////////////
// CDatabase - a SQL Database
class CDatabase : public CObject
{
DECLARE_DYNAMIC(CDatabase)
// Constructors
public:
CDatabase();
enum DbOpenOptions
{
openExclusive = 0x0001, // Not implemented
openReadOnly = 0x0002, // Open database read only
useCursorLib = 0x0004, // Use ODBC cursor lib
noOdbcDialog = 0x0008, // Don't display ODBC Connect dialog
forceOdbcDialog = 0x0010, // Always display ODBC connect dialog
};
virtual BOOL Open(LPCTSTR lpszDSN, BOOL bExclusive = FALSE,
BOOL bReadonly = FALSE, LPCTSTR lpszConnect = _T("ODBC;"),
BOOL bUseCursorLib = TRUE);
virtual BOOL OpenEx(LPCTSTR lpszConnectString, DWORD dwOptions = 0);
virtual void Close();
// Attributes
public:
HDBC m_hdbc;
BOOL IsOpen() const; // Database successfully opened?
BOOL CanUpdate() const;
BOOL CanTransact() const; // Are Transactions supported?
CString GetDatabaseName() const;
const CString& GetConnect() const;
DWORD GetBookmarkPersistence() const;
int GetCursorCommitBehavior() const;
int GetCursorRollbackBehavior() const;
// Operations
public:
void SetLoginTimeout(DWORD dwSeconds);
void SetQueryTimeout(DWORD dwSeconds);
// transaction control
BOOL BeginTrans();
BOOL CommitTrans();
BOOL Rollback();
void ExecuteSQL(LPCTSTR lpszSQL);
// Cancel asynchronous operation
void Cancel();
// Overridables
public:
// set special options
virtual void OnSetOptions(HSTMT hstmt);
// Implementation
public:
virtual ~CDatabase();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
BOOL m_bTransactionPending;
#endif //_DEBUG
// general error check
virtual BOOL Check(RETCODE nRetCode) const;
BOOL PASCAL CheckHstmt(RETCODE, HSTMT hstmt) const;
// Note: CDatabase::BindParameters is now documented and is no longer
// officially 'implementation.' Feel free to use it. It stays here
// because moving it would break binary compatibility.
virtual void BindParameters(HSTMT hstmt);
void ReplaceBrackets(LPTSTR lpchSQL);
BOOL m_bStripTrailingSpaces;
BOOL m_bIncRecordCountOnAdd;
BOOL m_bAddForUpdate;
char m_chIDQuoteChar;
char m_reserved1[3]; // pad to even 4 bytes
void SetSynchronousMode(BOOL bSynchronous); // Obsolete, doe nothing
protected:
CString m_strConnect;
CPtrList m_listRecordsets; // maintain list to ensure CRecordsets all closed
int nRefCount;
BOOL m_bUpdatable;
BOOL m_bTransactions;
SWORD m_nTransactionCapable;
SWORD m_nCursorCommitBehavior;
SWORD m_nCursorRollbackBehavior;
DWORD m_dwUpdateOptions;
DWORD m_dwBookmarkAttributes; // cache driver bookmark persistence
DWORD m_dwLoginTimeout;
HSTMT m_hstmt;
DWORD m_dwQueryTimeout;
virtual void ThrowDBException(RETCODE nRetCode);
void AllocConnect(DWORD dwOptions);
BOOL Connect(DWORD dwOptions);
void VerifyConnect();
void GetConnectInfo();
void Free();
// friend classes that call protected CDatabase overridables
friend class CRecordset;
friend class CFieldExchange;
friend class CDBException;
};
//////////////////////////////////////////////////////////////////////////////
// CFieldExchange - for field exchange
class CFieldExchange
{
// Attributes
public:
enum RFX_Operation
{
BindParam, // register users parameters with ODBC SQLBindParameter
RebindParam, // migrate param values to proxy array before Requery
BindFieldToColumn, // register users fields with ODBC SQLBindCol
BindFieldForUpdate, // temporarily bind columns before update (via SQLSetPos)
UnbindFieldForUpdate, // unbind columns after update (via SQLSetPos)
Fixup, // Set string lengths, clear status bits
MarkForAddNew, // Prepare fields and flags for addnew operation
MarkForUpdate, // Prepare fields and flags for update operation
Name, // append dirty field name
NameValue, // append dirty name=value
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -