亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ex28ddoc.cpp

?? Visual C++技術內幕(第四版).zip
?? CPP
字號:
// ex28dDoc.cpp : implementation of the CEx28dDoc class
//

#include "stdafx.h"
#include "ex28d.h"

#include "ex28dDoc.h"
#include "MainFrm.h"
#include "TableSel.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CEx28dDoc

IMPLEMENT_DYNCREATE(CEx28dDoc, CDocument)

BEGIN_MESSAGE_MAP(CEx28dDoc, CDocument)
	//{{AFX_MSG_MAP(CEx28dDoc)
    ON_COMMAND(IDC_REQUERY, OnRequery)
    ON_UPDATE_COMMAND_UI(IDC_REQUERY, OnUpdateRequery)
	ON_COMMAND(ID_FILE_ODBCCONNECT, OnFileOdbcConnect)
	ON_UPDATE_COMMAND_UI(ID_FILE_ODBCCONNECT, OnUpdateFileOdbcConnect)
	ON_COMMAND(ID_FILE_ODBCDISCONNECT, OnFileOdbcDisconnect)
	ON_UPDATE_COMMAND_UI(ID_FILE_ODBCDISCONNECT, OnUpdateFileOdbcDisconnect)
	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEx28dDoc construction/destruction

CEx28dDoc::CEx28dDoc()
{
    m_bConnected = FALSE;
    m_pRecordset = NULL;
    m_nFields = 0;
    m_nRowCount = 0;
}

CEx28dDoc::~CEx28dDoc()
{
}

BOOL CEx28dDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;
    m_strConnect.Empty(); // in case we're SDI
    m_strQuery.Empty();
	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CEx28dDoc serialization

void CEx28dDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring()) {
     	ar << m_strConnect << m_strQuery;
    }
    else {
    	ar >> m_strConnect >> m_strQuery;
    }
}

/////////////////////////////////////////////////////////////////////////////
// CEx28dDoc diagnostics

#ifdef _DEBUG
void CEx28dDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CEx28dDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CEx28dDoc commands

BOOL CEx28dDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
    PutQuery();
	OpenOdbc();
	return TRUE;
}

void CEx28dDoc::OnCloseDocument() 
{
    m_strQuery.Empty();
    PutQuery();
    if (m_bConnected) {
      delete m_pRecordset; // destructor calls Close
      m_database.Close();
      m_bConnected = FALSE;
      m_pRecordset = NULL;
	  m_nRowCount = 0;
    }
	CDocument::OnCloseDocument();
}

void CEx28dDoc::GetQuery()
{    // get SQL string from dialog bar
	char text[201];   
    CDialogBar& rBar = ((CMainFrame*) AfxGetApp()->m_pMainWnd)->m_wndQueryBar;
    rBar.GetDlgItemText(IDC_QUERY, text, 200);
	TRACE("GetQuery - text = %s\n", text);
    m_strQuery = text;
}

void CEx28dDoc::PutQuery()
{    // write SQL string to dialog bar
    CDialogBar& rBar = ((CMainFrame*) AfxGetApp()->m_pMainWnd)->m_wndQueryBar;
    rBar.SetDlgItemText(IDC_QUERY, m_strQuery);
}

void CEx28dDoc::GetFieldSpecs()
{
	m_nFields = (int) m_pRecordset->GetODBCFieldCount();
	m_arrayFieldName.SetSize(m_nFields);
	m_arrayFieldSize.SetSize(m_nFields);
	CODBCFieldInfo fi;
	for(int i = 0; i < m_nFields; i++) {
		m_pRecordset->GetODBCFieldInfo(i, fi);
		m_arrayFieldName[i] = fi.m_strName;
		if(fi.m_nSQLType == SQL_DATE) {
			m_arrayFieldSize[i] = 15;
		}
		else {
			m_arrayFieldSize[i] = (short) max(min((short) fi.m_nPrecision, 50),
								fi.m_strName.GetLength());
		}
		TRACE("field name = %s, type = %d, precision = %d, scale = %d\n",
			fi.m_strName, fi.m_nSQLType, fi.m_nPrecision, fi.m_nScale);
	}
}

void CEx28dDoc::OnRequery()
{ 
    GetQuery();
    // Requery won't work because we're changing the SQL statement
    BeginWaitCursor();
	if(m_pRecordset->IsOpen()) {
		m_pRecordset->Close();
	}
    try {	
      m_pRecordset->Open(CRecordset::dynaset, m_strQuery, CRecordset::readOnly);
    }
    catch (CDBException* pe) {
	  AfxMessageBox(pe->m_strError);
	  m_nRowCount = 0;
      UpdateAllViews(NULL);
      EndWaitCursor();
      pe->Delete();
      return;
    }
    if (!m_pRecordset->IsBOF()) {
		while(!m_pRecordset->IsEOF()) {
			m_pRecordset->MoveNext(); // to validate record count
		}
    }	
    m_nRowCount = m_pRecordset->GetRecordCount() + 1;
    TRACE("m_nRowCount = %d\n", m_nRowCount);
    GetFieldSpecs();
    UpdateAllViews(NULL); 
    EndWaitCursor();
}

/////////////////////////////////////////////////////////////////////////////
void CEx28dDoc::OnUpdateRequery(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(m_bConnected);
}

void CEx28dDoc::OnFileOdbcConnect()
{
	m_strConnect.Empty();
    m_strQuery.Empty();
	OpenOdbc();
}

void CEx28dDoc::OpenOdbc()
{
    // can't open ODBC via Access driver
    if (m_strConnect.IsEmpty()) {
      m_strConnect = "ODBC;";
    }
    BeginWaitCursor();
	BOOL bRet;
    try {
      // non-exclusive, read-only, no cursor library (dynaset)
        bRet = m_database.Open("", FALSE, TRUE, m_strConnect, FALSE);
//		bRet = m_database.OpenEx(m_strConnect, CDatabase::openReadOnly);
   }
    catch (CDBException* pe) {
	  AfxMessageBox(pe->m_strError);
      EndWaitCursor();
      pe->Delete();
      return;
    }
	if(bRet) {
		m_strConnect = m_database.GetConnect();
		TRACE("connect = %s\n", m_strConnect);
		OpenRecordset();
	}
    EndWaitCursor();
}

// helper used by OnFileOdbcConnect
void CEx28dDoc::OpenRecordset()
{
    GetQuery();
	if (m_strQuery.IsEmpty()) {
      CTableSelect tableDlg(&m_database);
      if (tableDlg.DoModal() != IDOK) {
        m_database.Close();  // escape route
        return;
      }
	   m_strQuery.Format("select * from [%s]", tableDlg.m_strSelection);
	  PutQuery();
    }

    m_pRecordset = new CRecordset(&m_database);
    try {	
      m_pRecordset->Open(CRecordset::dynaset, m_strQuery, CRecordset::readOnly);
    }
    catch (CDBException* pe) {
	  AfxMessageBox(pe->m_strError);
      UpdateAllViews(NULL);
      m_bConnected = FALSE;
      pe->Delete();
      return;
    }
	if (!m_pRecordset->IsBOF()) {
		while(!m_pRecordset->IsEOF()) {
			m_pRecordset->MoveNext(); // to validate record count
		}
	}
	m_nRowCount = m_pRecordset->GetRecordCount() + 1;
    TRACE("m_nRowCount = %d\n", m_nRowCount);
    GetFieldSpecs();
    UpdateAllViews(NULL);
    m_bConnected = TRUE;
}

void CEx28dDoc::OnUpdateFileOdbcConnect(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(!m_bConnected);
}

void CEx28dDoc::OnUpdateFileSave(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(!m_bConnected);
}

 
void CEx28dDoc::OnFileOdbcDisconnect() 
{
   if (m_bConnected) {
      delete m_pRecordset; // destructor calls Close
      m_database.Close();
      m_bConnected = FALSE; 
      m_pRecordset = NULL;
	  m_nRowCount = 0;
	  UpdateAllViews(NULL);
    }
}

void CEx28dDoc::OnUpdateFileOdbcDisconnect(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(m_bConnected);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产在线观看| 日韩欧美一区二区视频| 国产一区二区三区美女| 日本不卡的三区四区五区| 五月婷婷久久综合| 午夜久久久影院| 国产专区综合网| 国产不卡视频在线观看| 91免费在线视频观看| 91猫先生在线| 日韩一区二区三区四区| 国产欧美视频一区二区| 亚洲欧美综合另类在线卡通| 亚洲成人一区在线| 国产一区二区免费视频| 99在线精品观看| 国产电影一区在线| 99在线精品一区二区三区| 在线播放亚洲一区| 国产精品麻豆久久久| 洋洋av久久久久久久一区| 久久国产精品露脸对白| 色久综合一二码| 久久亚洲综合色| 日韩一区精品视频| 欧美三级电影网站| 美腿丝袜亚洲综合| 国产福利视频一区二区三区| 在线不卡a资源高清| 中文字幕亚洲在| 国产精品18久久久久久久久| 日韩一区二区在线观看视频| 亚洲人成网站影音先锋播放| 成人免费毛片a| 久久精品人人做人人爽人人| 久久激情综合网| 91精品国产综合久久香蕉的特点| 1024成人网色www| 91女人视频在线观看| 国产精品污网站| 亚洲电影视频在线| 99久久精品一区二区| 久久久综合视频| 韩国av一区二区三区在线观看| 欧美性三三影院| 国产精品福利在线播放| 懂色av一区二区三区免费看| 精品久久久久久最新网址| 秋霞午夜av一区二区三区| 欧美美女直播网站| 亚洲四区在线观看| 欧美日韩色一区| 视频在线在亚洲| 欧美成人猛片aaaaaaa| 美女视频网站久久| 欧美精品一区视频| 国产aⅴ综合色| 亚洲欧美一区二区在线观看| 91啪九色porn原创视频在线观看| 亚洲日本va午夜在线电影| 91啪亚洲精品| 青青草原综合久久大伊人精品 | 欧美日韩国产经典色站一区二区三区| 中文字幕日韩av资源站| 91成人免费在线| 奇米影视一区二区三区小说| 欧美中文字幕一区二区三区| 亚洲精品第一国产综合野| 欧美色综合久久| 蜜臀av一区二区| 中文字幕在线一区| 欧美四级电影网| 无吗不卡中文字幕| 欧美国产精品一区二区三区| 欧美吞精做爰啪啪高潮| 波多野结衣中文字幕一区| 视频一区中文字幕| 亚洲精品乱码久久久久久| 日韩午夜在线观看视频| 色久综合一二码| 国产91色综合久久免费分享| 男女男精品视频网| 亚洲精品乱码久久久久久久久| 精品欧美乱码久久久久久| www.欧美日韩| 国产99久久久久| 韩国理伦片一区二区三区在线播放| 久久久www成人免费无遮挡大片| 91黄视频在线观看| 色婷婷久久久亚洲一区二区三区| 一区二区日韩电影| 亚洲综合丝袜美腿| 亚洲成人先锋电影| 午夜影视日本亚洲欧洲精品| 一区二区三区不卡视频在线观看| 亚洲色图.com| 亚洲三级免费电影| 亚洲另类春色校园小说| 国产精品成人一区二区艾草| 国产欧美视频一区二区| 欧美人牲a欧美精品| 欧美精选一区二区| 精品国产区一区| 日本一区二区电影| 亚洲国产激情av| 午夜电影久久久| 国产精品资源在线| 国内精品免费在线观看| 粉嫩av亚洲一区二区图片| 成av人片一区二区| 日本韩国一区二区三区视频| 6080午夜不卡| 亚洲色图20p| 精品夜夜嗨av一区二区三区| 国产一区二区福利| 欧美日韩日日夜夜| 亚洲国产精品av| 看片的网站亚洲| 91黄色在线观看| 国产亚洲欧美日韩在线一区| 亚洲小说春色综合另类电影| 激情五月播播久久久精品| 一本大道久久a久久精品综合| 在线综合亚洲欧美在线视频| 亚洲少妇中出一区| 日韩精品一卡二卡三卡四卡无卡| 不卡视频免费播放| 日韩你懂的在线播放| 夜夜揉揉日日人人青青一国产精品| 精品亚洲欧美一区| 日韩免费性生活视频播放| 亚洲大片免费看| 日本道免费精品一区二区三区| 欧美一级片在线看| 免费人成精品欧美精品| 欧美日韩高清在线| 亚洲午夜久久久久久久久电影院 | 国产一区欧美二区| 欧美一级精品大片| 亚洲一区av在线| 欧美色图激情小说| 五月激情六月综合| 日韩一区二区三区视频在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美男男青年gay1069videost | 日韩中文字幕1| 欧美肥妇free| 国产成人av资源| 国产欧美一区二区精品仙草咪| 麻豆一区二区99久久久久| 精品国产成人在线影院 | 欧美性极品少妇| 日本美女一区二区| xfplay精品久久| 91浏览器打开| 精品一区二区免费| 2023国产一二三区日本精品2022| 国产精品911| 天天av天天翘天天综合网 | 99久久综合精品| 国产精品乱人伦| 欧美日韩精品一区二区三区| 国产传媒一区在线| 久久99精品久久久久久久久久久久| 最新成人av在线| 国产欧美一区二区三区在线老狼| 91精品国产手机| 欧美三级韩国三级日本三斤| 色婷婷av一区二区三区软件| 99久久er热在这里只有精品15| 国产剧情一区在线| 狠狠色伊人亚洲综合成人| 婷婷综合在线观看| 日本三级韩国三级欧美三级| 亚洲动漫第一页| 日韩国产在线观看| 久久国产精品无码网站| 国产一区二区三区四区五区美女 | 国产视频一区不卡| 国产情人综合久久777777| 国产欧美日韩久久| **欧美大码日韩| 亚洲国产日韩精品| 日本中文在线一区| 国产精品1区二区.| 欧美最猛黑人xxxxx猛交| 欧美日韩一区二区不卡| 日韩免费一区二区| 国产精品三级视频| 舔着乳尖日韩一区| 国产东北露脸精品视频| 91黄视频在线| 久久精品一区蜜桃臀影院| 亚洲欧美日韩系列| 久久99精品国产麻豆婷婷洗澡| 国产iv一区二区三区| 3atv在线一区二区三区| 中文字幕在线一区免费| 蜜桃精品视频在线观看| 91视视频在线观看入口直接观看www |