青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

陋居

淡薄名利,修身養(yǎng)性

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  31 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

常用鏈接

留言簿

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

網(wǎng)上關(guān)于ADO的使用方法很多,這邊我個(gè)人就整理出一個(gè)使用ADO的方法的具體步驟:
1
#import引入ADO庫(kù)文件
stdafx.h文件中添加#import "c:\program files\common files\system\ado\msado15.dll"no_namespaces rename("EOF" adoEOF") 

2、 數(shù)據(jù)庫(kù)連接,創(chuàng)建CDBConnection,代碼如下:

class CDBConnection  
{
public:
    
//數(shù)據(jù)庫(kù)是否已連接
    BOOL m_Actived;
    
//關(guān)閉連接
    void Close();
    
//打開(kāi)連接
    BOOL Open(CString CnnStr);

    
//ADO的連接對(duì)象指針
    _ConnectionPtr m_pConn;

    CDBConnection();
    
virtual ~CDBConnection();

}
;
CDBConnection::CDBConnection()
{
    
//創(chuàng)建連接對(duì)象
    m_pConn.CreateInstance("ADODB.Connection");
    m_Actived 
= FALSE;
}


CDBConnection::
~CDBConnection()
{
    
//釋放連接對(duì)象
    m_pConn.Release();
}


BOOL CDBConnection::Open(CString CnnStr)
{
    
try
     
{
        m_pConn
->Open(_bstr_t(CnnStr), """", adConnectUnspecified);

        m_Actived 
= TRUE;

        
return TRUE;
    }

    
catch(_com_error &e)
     
{
        
return FALSE;
    }

}


void CDBConnection::Close()
{
    
if (m_Actived)
     
{
        m_pConn
->Close();
        m_Actived 
= FALSE;
    }

}

相關(guān)函數(shù):
1)HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )

      ConnectionString 例子:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strCommandLine + "WhMgrDB.mdb;Persist Security Info=False"。其中strCommandLine 為數(shù)據(jù)庫(kù)的地址,WhMgrDB.mdb為所要用到的數(shù)據(jù)庫(kù)。
      UserID和Password分別為建立連接時(shí)所使用的用戶名和密碼
      Options: 決定是使用同步方式(adConnectUnspecified默認(rèn))還是異步方式(adAsyncConnext)打開(kāi)數(shù)據(jù)庫(kù)。當(dāng)使用同步方式打開(kāi)數(shù)據(jù) 庫(kù)時(shí),只有打開(kāi)完成,Open方法才返回;而是用異步方式打開(kāi)數(shù)據(jù)庫(kù)時(shí),Open方法在建立連接完成之前就返回。
3
、 通用數(shù)據(jù)訪問(wèn)模塊的實(shí)現(xiàn)
class CDataSet  
{
protected:
    
//打開(kāi)查詢
    BOOL Open(CString SQL);
public:
    
//刪除當(dāng)前記錄
    void Delete();
    
//更新記錄
    void Update();
    
//將Field列的值設(shè)置為Value
    void SetAsString(CString Field, CString Value);
    
//關(guān)閉查詢
    void Close();
    
//加載數(shù)據(jù)
    virtual BOOL LoadData();
    
//得到Field列的值
    CString GetAsString(CString FieldName);
    
//是否在第一條記錄之前
    BOOL IsBOF();
    
//是否在最后一條記錄之后
    BOOL IsEOF();
    
//移動(dòng)到上一條記錄
    void MovePrevious();
    
//移動(dòng)到下一條記錄
    void MoveNext();
    
//移動(dòng)到最后一條記錄
    void MoveLast();
    
//移動(dòng)到第一條記錄
    void MoveFirst();

    
//數(shù)據(jù)庫(kù)連接對(duì)象
    CDBConnection * m_cnn;

    CDataSet();
    
virtual ~CDataSet();

private:
    BOOL m_Actived;
    _RecordsetPtr m_pRs;
}
;

CDataSet::CDataSet()
{
    m_pRs.CreateInstance(
"ADODB.RecordSet");
    m_Actived 
= FALSE;
}


CDataSet::
~CDataSet()
{
    m_pRs.Release();
}


BOOL CDataSet::Open(CString SQL)
{
    ASSERT(m_cnn);
    ASSERT(m_cnn
->m_Actived);
    
try
    
{
        m_pRs
->Open(_variant_t(SQL), _variant_t(m_cnn->m_pConn, true), adOpenStatic, adLockOptimistic, adCmdText);
    
        m_Actived 
= TRUE;

        
return TRUE;
    }

    
catch(_com_error &e)
    
{
        
return FALSE;
    }

}


void CDataSet::MoveFirst()
{
    m_pRs
->MoveFirst();
}


void CDataSet::MoveLast()
{
    m_pRs
->MoveLast();
}


void CDataSet::MoveNext()
{
    m_pRs
->MoveNext();
}


void CDataSet::MovePrevious()
{
    m_pRs
->MovePrevious();
}


BOOL CDataSet::IsEOF()
{
    
return m_pRs->EndOfFile;
}


BOOL CDataSet::IsBOF()
{
    
return m_pRs->BOF;
}


CString CDataSet::GetAsString(CString FieldName)
{
    ASSERT(
!IsBOF() && !IsEOF());

    _variant_t vValue 
= m_pRs->Fields->Item[_variant_t(FieldName)]->Value;

    
//如果為空值則返回空
    if ((V_VT(&vValue) == VT_NULL) || (V_VT(&vValue) == VT_EMPTY))
    
{
        
return "";
    }

    
return _com_util::ConvertBSTRToString(_bstr_t(vValue));
}


BOOL CDataSet::LoadData()
{
    
return FALSE;
}


void CDataSet::Close()
{
    
if (m_Actived)
    
{
        m_pRs
->Close();
    }

}


void CDataSet::SetAsString(CString Field, CString Value)
{
    ASSERT(
!IsBOF() && !IsEOF());
    m_pRs
->Fields->Item[_variant_t(Field)]->Value = _variant_t(Value);
}


void CDataSet::Update()
{
    m_pRs
->Update();
}


void CDataSet::Delete()
{
    m_pRs
->Delete(adAffectCurrent);
}

相關(guān)函數(shù):

1)HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )
      Source:變體型,計(jì)算Command對(duì)象的變量名、SQL語(yǔ)句、表名、存儲(chǔ)過(guò)程調(diào)用或持久Recordset文件名。
      ActiveConnection:計(jì)算有效地Connection對(duì)象變量名或字符串,包含ConnectionString參數(shù)。
      CursorType:確定提供者打開(kāi)Recordset時(shí)應(yīng)該使用的游標(biāo)類(lèi)型。
      LockType:adLockReadOnly(默 認(rèn)值,只讀)、adLockPessimistic(保守式鎖定)、adLockOptimistic(開(kāi)放式鎖定,只有使用Update時(shí)才鎖定記 錄)、adLockBatchOptimistic(開(kāi)放式批更新)
      Options:有adCmdText、adCmdTable、adCmdTableDirect和adCmdStoredProc等。
2)_variant_t vValue = m_pRs->Fields->Item[_variant_t(FieldName)]->Value;
      _com_util::ConvertBSTRToString(_bstr_t(vValue));
      m_pRs->Fields->Item[_variant_t(Field)]->Value = _variant_t(Value);
4
 通用數(shù)據(jù)命令模塊的實(shí)現(xiàn)
class CDBCommand  
{
public:
    
//數(shù)據(jù)庫(kù)連接對(duì)象
    CDBConnection * m_cnn;
    
//執(zhí)行SQL
    BOOL ExecuteSQL(CString SQL);
    CDBCommand();
    
virtual ~CDBCommand();
}
;

CDBCommand::CDBCommand()
{

}


CDBCommand::
~CDBCommand()
{

}


BOOL CDBCommand::ExecuteSQL(CString SQL)
{
    ASSERT(m_cnn);
    ASSERT(m_cnn
->m_Actived);
    
try
    
{
        m_cnn
->m_pConn->Execute(_bstr_t(SQL), NULL, adCmdText);
        
return TRUE;
    }

    
catch(_com_error &e)
    
{
        
return FALSE;
    }

}

1)_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )
      CommandText:設(shè)置或返回包含提供者的命令。
      RecordsAffected:可選,提供者向其返回操作所影響的記錄書(shū)目。
      Options:有adCmdText、adCmdTable、adCmdTableDirect和adCmdStoredProc等。5、借用表命令類(lèi)——CBorrowCommand(繼承了CDBCommand)

#include "DBCommand.h"

class CBorrowCommand : public CDBCommand  
{
public:
    
//進(jìn)行借用
    
//返回值為借用號(hào)
    CString DoBorrow();
    
    
//各項(xiàng)借用信息
    CString m_MaterialNum;
    CString m_Count;
    CString m_Department;
    CString m_Use;
    CString m_State;
    CString m_Jsr;
    CString m_Lqr;

    CBorrowCommand();
    
virtual ~CBorrowCommand();

private:
    
//得到當(dāng)前最大借用號(hào)
    int GetMaxBorrowID();

}
;

CBorrowCommand::CBorrowCommand()
{

}


CBorrowCommand::
~CBorrowCommand()
{

}


int CBorrowCommand::GetMaxBorrowID()
{
    _RecordsetPtr pRs(
"ADODB.RecordSet");
    pRs
->Open(_variant_t("Select Max(ID) as MAXID From tblBorrow"), _variant_t(m_cnn->m_pConn, true), adOpenStatic, adLockOptimistic, adCmdText);    
    
    
int nResult;

    _variant_t vValue 
= pRs->Fields->Item[_variant_t("MAXID")]->Value;
    
    
//如果不為空,返回最大值;否則返回0
    if (V_VT(&vValue) != VT_NULL)
    
{
        nResult 
= atoi(_bstr_t(vValue));    
    }

    
else
    
{
        nResult 
= 0;
    }

    
    pRs
->Close();
    
    
return nResult;
}


CString CBorrowCommand::DoBorrow()
{
    
//得到當(dāng)前時(shí)間
    CString strData;
    CTime time 
= CTime::GetCurrentTime();
    strData.Format(
"%d-%d-%d %d:%d:%d"
        time.GetYear(), 
        time.GetMonth(), 
        time.GetDay(),
        time.GetHour(),
        time.GetMinute(),
        time.GetSecond());

    CString strSQL;

    
//得到新的借用ID
    int nMaxID = GetMaxBorrowID();
    nMaxID
++;
    CString strNewID;
    strNewID.Format(
"%d", nMaxID);

    strSQL 
= "Insert into tblBorrow([ID], [MaterialNum], [Count], [Department], [Data], [Use], [State], [Jsr], [Lqr]) Values("
        
+ strNewID + "" 
        
+ m_MaterialNum + "" 
        
+ m_Count + ", \"" 
        + m_Department + "\", #" 
        + strData + "#, \""
        + m_Use + "\", \""
        
+ m_State + "\", \""
        
+ m_Jsr + "\", \""
        
+ m_Lqr + "\")";

    
if(ExecuteSQL(strSQL))
    
{
        
return strNewID;
    }

    
else
    
{
        
return "";
    }

}

 6、借用表訪問(wèn)類(lèi)——CBorrowDataSet(繼承了CDataSet)
#include "DataSet.h"

class CBorrowDataSet : public CDataSet  
{
public:
    CString GetID();
    CString GetMaterialNum();
    
void SetCount(CString Value);
    CString GetCount();
    CString GetUse();
    CString GetLqr();
    CString GetState();
    CString GetData();
    CString GetDepartment();
    CString GetJsr();

    BOOL LoadDataByID(CString ID);
    BOOL LoadData();
    CBorrowDataSet();
    
virtual ~CBorrowDataSet();
}
;

CBorrowDataSet::CBorrowDataSet()
{

}


CBorrowDataSet::
~CBorrowDataSet()
{

}


BOOL CBorrowDataSet::LoadData()
{
    
return Open("Select * From tblBorrow");
}


BOOL CBorrowDataSet::LoadDataByID(CString ID)
{
    
return Open("Select * From tblBorrow Where ID = " + ID);
}


CString CBorrowDataSet::GetCount()
{
    
return GetAsString("Count");
}


void CBorrowDataSet::SetCount(CString Value)
{
    SetAsString(
"Count", Value);
}


CString CBorrowDataSet::GetMaterialNum()
{
    
return GetAsString("MaterialNum");
}


CString CBorrowDataSet::GetID()
{
    
return GetAsString("ID");
}


CString CBorrowDataSet::GetJsr()
{
    
return GetAsString("Jsr");
}


CString CBorrowDataSet::GetDepartment()
{
    
return GetAsString("Department");
}


CString CBorrowDataSet::GetData()
{
    
return GetAsString("Data");
}


CString CBorrowDataSet::GetState()
{
    
return GetAsString("State");
}


CString CBorrowDataSet::GetLqr()
{
    
return GetAsString("Lqr");
}


CString CBorrowDataSet::GetUse()
{
    
return GetAsString("Use");
}

7、用戶信息表訪問(wèn)類(lèi)——CUserInfoDataSet(繼承了CDataSet)

#include "DataSet.h"

class CUserInfoDataSet : public CDataSet  
{
public:
    
//得到密碼
    CString GetPassword();
    
//根據(jù)用戶名加載數(shù)據(jù)
    BOOL LoadData(CString UserName);

    CUserInfoDataSet();
    
virtual ~CUserInfoDataSet();

}
;

CUserInfoDataSet::CUserInfoDataSet()
{

}


CUserInfoDataSet::
~CUserInfoDataSet()
{

}


BOOL CUserInfoDataSet::LoadData(CString UserName)
{
    
return Open("Select * From UserInfo Where Username like \"" + UserName + "\"");
}


CString CUserInfoDataSet::GetPassword()
{
    
return GetAsString("Password");
}
8、主程序的初始化
class CWhMgrApp : public CWinApp
{
public:
    CDBConnection 
* m_pConn;
    CWhMgrApp();

// Overrides
    
// ClassWizard generated virtual function overrides
    
//{{AFX_VIRTUAL(CWhMgrApp)
    public:
    
virtual BOOL InitInstance();
    
virtual int ExitInstance();
    
//}}AFX_VIRTUAL

// Implementation

    
//{{AFX_MSG(CWhMgrApp)
        
// NOTE - the ClassWizard will add and remove member functions here.
        
//    DO NOT EDIT what you see in these blocks of generated code !
    
//}}AFX_MSG
    DECLARE_MESSAGE_MAP()
}
;

CWhMgrApp::CWhMgrApp()
{
    
// TODO: add construction code here,
    
// Place all significant initialization in InitInstance
}


/////////////////////////////////////////////////////////////////////////////
// The one and only CWhMgrApp object

CWhMgrApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CWhMgrApp initialization

BOOL CWhMgrApp::InitInstance()
{
    
//初始化Com
    ::CoInitialize(NULL);

    
//初始化數(shù)據(jù)庫(kù)連接
    m_pConn = new CDBConnection;

    
//得到當(dāng)前程序所在的文件夾
    CString strCommandLine = ::GetCommandLine();
    
int i;
    
int nLen = strCommandLine.GetLength();
    
for(i = nLen - 1; i >= 0; i--)
    
{
        CHAR a 
= strCommandLine.GetAt(i);
        
if(a == '\\')
        
{
            
break;
        }

    }

    strCommandLine.ReleaseBuffer(i 
+ 1);
    strCommandLine.Delete(
01);

    
//打開(kāi)數(shù)據(jù)庫(kù)連接,數(shù)據(jù)庫(kù)地址為:當(dāng)前程序所在文件夾\WhMgrDB.mdb
    if(!m_pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strCommandLine + "WhMgrDB.mdb;Persist Security Info=False"))
    
{
        ::AfxMessageBox(
"打開(kāi)數(shù)據(jù)庫(kù)失敗!");
        
return FALSE;
    }


    
//用戶登錄
    BOOL bLogined;
    CLoginDlg loginDlg;
    CUserInfoDataSet dsUserInfo;
    dsUserInfo.m_cnn 
= m_pConn;

    bLogined 
= FALSE;
    
//給3次登錄機(jī)會(huì)
    for(i = 0; i < 3; i++)
    
{
        
if(loginDlg.DoModal() == IDOK)
        
{
            dsUserInfo.LoadData(loginDlg.m_strUserName);
            
if(!dsUserInfo.IsEOF())
            
{
                
if(dsUserInfo.GetPassword() == loginDlg.m_strPassword)
                
{
                    bLogined 
= TRUE;
                    
break;
                }

            }

            
else
            
{
                ::AfxMessageBox(
"用戶名或者密碼不正確,請(qǐng)重試!");
            }

            dsUserInfo.Close();
        }

        
else
        
{
            
break;
        }

    }


    
if(!bLogined)
    
{
        
return FALSE;
    }



    AfxEnableControlContainer();

    
// Standard initialization
    
// If you are not using these features and wish to reduce the size
    
//  of your final executable, you should remove from the following
    
//  the specific initialization routines you do not need.

#ifdef _AFXDLL
    Enable3dControls();            
// Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();    
// Call this when linking to MFC statically
#endif

    CWhMgrDlg dlg;
    
//給dlg的m_pConn成員變量賦值
    dlg.m_pConn = m_pConn;
    m_pMainWnd 
= &dlg;
    
int nResponse = dlg.DoModal();
    
if (nResponse == IDOK)
    
{
        
// TODO: Place code here to handle when the dialog is
        
//  dismissed with OK
    }

    
else if (nResponse == IDCANCEL)
    
{
        
// TODO: Place code here to handle when the dialog is
        
//  dismissed with Cancel
    }


    
// Since the dialog has been closed, return FALSE so that we exit the
    
//  application, rather than start the application's message pump.
    return FALSE;
}


int CWhMgrApp::ExitInstance() 
{
    m_pConn
->Close();
    delete m_pConn;
    ::CoUninitialize();
    
return CWinApp::ExitInstance();
}

1 )::CoInitialize(NULL);和::CoUninitialize();:ADO庫(kù)是一組COM動(dòng)態(tài)庫(kù),這意味應(yīng)用程序在調(diào)用ADO前,必須初始化OLE/COM庫(kù)環(huán)境。在MFC應(yīng)用程序里,一個(gè)比較好的方法是在應(yīng)用程序主類(lèi)的InitInstance成員函數(shù)里初始化OLE/COM庫(kù)環(huán)境。也可用
if(!AfxOleInit())//這就是初始化COM庫(kù)
{
AfxMessageBox(“OLE初始化出錯(cuò)!”);
return FALSE;
}
2)得到當(dāng)前程序所在的文件夾:
 CString strCommandLine = ::GetCommandLine();
 int i;
 int nLen = strCommandLine.GetLength();
 for(i = nLen - 1; i >= 0; i--)
 {
  CHAR a = strCommandLine.GetAt(i);
  if(a == '\\')
  {
   break;
  }
 }
 strCommandLine.ReleaseBuffer(i + 1);
 strCommandLine.Delete(0, 1);
9、歸還的實(shí)現(xiàn)

class COutDialog : public CDialog
{
// Construction
public:
    CDBConnection 
* m_pConn;
    CString m_strMaterialNum;
    COutDialog(CWnd
* pParent = NULL);   // standard constructor

// Dialog Data
    
//{{AFX_DATA(COutDialog)
    enum { IDD = IDD_OUT_DIALOG };
    CStatic    m_Unit;
    CComboBox    m_MaterialNum;
    BOOL    m_bNeedReturn;
    CString    m_strCount;
    CString    m_strDepartment;
    CString    m_strJsr;
    CString    m_strLqr;
    CString    m_strState;
    CString    m_strUse;
    
//}}AFX_DATA


// Overrides
    
// ClassWizard generated virtual function overrides
    
//{{AFX_VIRTUAL(COutDialog)
    protected:
    
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    
//}}AFX_VIRTUAL

// Implementation
protected:

    
// Generated message map functions
    
//{{AFX_MSG(COutDialog)
    virtual void OnOK();
    afx_msg 
void OnSelchangeComboMaterialnum();
    
//}}AFX_MSG
    DECLARE_MESSAGE_MAP()
}
;

COutDialog::COutDialog(CWnd
* pParent /*=NULL*/)
    : CDialog(COutDialog::IDD, pParent)
{
    
//{{AFX_DATA_INIT(COutDialog)
    m_bNeedReturn = FALSE;
    m_strCount 
= _T("");
    m_strDepartment 
= _T("");
    m_strJsr 
= _T("");
    m_strLqr 
= _T("");
    m_strState 
= _T("");
    m_strUse 
= _T("");
    
//}}AFX_DATA_INIT
}



void COutDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    
//{{AFX_DATA_MAP(COutDialog)
    DDX_Control(pDX, IDC_STATIC_UNIT, m_Unit);
    DDX_Control(pDX, IDC_COMBO_MATERIALNUM, m_MaterialNum);
    DDX_Check(pDX, IDC_CHECK_NEEDRETURN, m_bNeedReturn);
    DDX_Text(pDX, IDC_EDIT_COUNT, m_strCount);
    DDX_Text(pDX, IDC_EDIT_DEPARTMENT, m_strDepartment);
    DDX_Text(pDX, IDC_EDIT_JSR, m_strJsr);
    DDX_Text(pDX, IDC_EDIT_LQR, m_strLqr);
    DDX_Text(pDX, IDC_EDIT_STATE, m_strState);
    DDX_Text(pDX, IDC_EDIT_USE, m_strUse);
    
//}}AFX_DATA_MAP
    CMaterialInfoDataSet dsMaterialInfo;
    dsMaterialInfo.m_cnn 
= m_pConn;
    
if(!dsMaterialInfo.LoadData())
    
{
        ::AfxMessageBox(
"加載物資信息失敗!");
    }

    
else
    
{
        
while(!dsMaterialInfo.IsEOF())
        
{
            m_MaterialNum.AddString(dsMaterialInfo.GetMaterialNum());
            dsMaterialInfo.MoveNext();
        }

        dsMaterialInfo.Close();
    }

    
if(m_MaterialNum.GetCount() > 0)
    
{
        m_MaterialNum.SetCurSel(
0);
        OnSelchangeComboMaterialnum();
    }

}



BEGIN_MESSAGE_MAP(COutDialog, CDialog)
    
//{{AFX_MSG_MAP(COutDialog)
    ON_CBN_SELCHANGE(IDC_COMBO_MATERIALNUM, OnSelchangeComboMaterialnum)
    
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COutDialog message handlers

void COutDialog::OnOK() 
{
    
int nIndex = m_MaterialNum.GetCurSel();
    
if(nIndex >= 0)
    
{
        m_MaterialNum.GetLBText(nIndex, m_strMaterialNum);
    }

    
else
    
{
        m_strMaterialNum 
= "0";
    }

    CDialog::OnOK();
}


void COutDialog::OnSelchangeComboMaterialnum() 
{
    
int nIndex = m_MaterialNum.GetCurSel();
    
if(nIndex >= 0)
    
{
        CMaterialInfoDataSet dsMaterialInfo;
        dsMaterialInfo.m_cnn 
= m_pConn;
        CString strNum;
        m_MaterialNum.GetLBText(nIndex, strNum);
        dsMaterialInfo.LoadDataByNum(strNum);
        
if(!dsMaterialInfo.IsEOF())
        
{
            m_Unit.SetWindowText(dsMaterialInfo.GetUnit());
        }

        dsMaterialInfo.Close();
    }
    
}

1)給部分程序不僅給出了關(guān)于借出表的實(shí)現(xiàn),還參有出庫(kù)的實(shí)現(xiàn)(關(guān)于出庫(kù)的出庫(kù)表命令類(lèi)和出庫(kù)表訪問(wèn)類(lèi)這邊沒(méi)介紹,與借出表的差不多)。如有疑問(wèn)可以聯(lián)系我。

這次利用一個(gè)工程中的一部分代碼對(duì)VC中ADO做了比較詳細(xì)的介紹,如有錯(cuò)誤希望給與指正!!!!!!!!!!
posted on 2010-11-08 13:49 eircQ 閱讀(449) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): COM
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲中字在线| 欧美午夜视频一区二区| 亚洲高清免费在线| 久久综合狠狠综合久久综青草 | 一区二区高清| 亚洲毛片在线观看.| 亚洲人成亚洲人成在线观看图片 | 欧美怡红院视频一区二区三区| 亚洲精品麻豆| 亚洲伦伦在线| 亚洲一区在线免费观看| 性欧美精品高清| 久久成人羞羞网站| 蜜臀av国产精品久久久久| 亚洲第一偷拍| 亚洲欧美日韩国产精品| 美女尤物久久精品| 国产精品社区| 亚洲黄色一区| 久久国产精品免费一区| 亚洲电影成人| 欧美一区免费视频| 欧美日韩高清区| 狠狠噜噜久久| 亚洲私人影院| 欧美jizz19性欧美| 亚洲在线播放| 欧美激情精品久久久久久久变态| 国产精品mm| 亚洲电影下载| 久久av一区二区三区漫画| 亚洲国产99精品国自产| 欧美一区二区在线视频| 欧美视频在线不卡| 亚洲国产国产亚洲一二三| 欧美一区永久视频免费观看| 亚洲欧洲精品天堂一级| 久久精品99国产精品酒店日本| 欧美日韩国产黄| 亚洲电影网站| 久久久久久尹人网香蕉| 在线视频亚洲一区| 欧美激情中文字幕乱码免费| 在线日本欧美| 久久婷婷国产综合精品青草| 亚洲一区二区综合| 国产一区二区高清视频| 亚洲一级黄色av| 模特精品在线| 久久精品国产99精品国产亚洲性色 | 欧美华人在线视频| 欧美在线亚洲在线| 国产日韩欧美在线观看| 亚洲欧美视频一区二区三区| 日韩一区二区精品视频| 欧美精品一区二区蜜臀亚洲| 亚洲电影免费在线| 亚洲成色www8888| 久久精品视频播放| 国产一区二区视频在线观看| 欧美一区激情| 欧美在线视频免费观看| 精品成人一区| 欧美成人按摩| 欧美黄色影院| 99精品福利视频| 亚洲精品男同| 国产精品国内视频| 久久xxxx| 久久一区亚洲| 亚洲麻豆国产自偷在线| 亚洲第一精品福利| 欧美日韩国产综合新一区| 99视频精品| 亚洲欧美国产精品专区久久| 国产日产欧美一区| 久久久久久综合| 男人的天堂亚洲| 亚洲人成艺术| 日韩一区二区精品葵司在线| 欧美日韩一区二区三区视频| 亚洲一区二区日本| 欧美一区二区高清在线观看| 精品动漫3d一区二区三区| 蜜桃精品久久久久久久免费影院| 久久天天躁夜夜躁狠狠躁2022 | 日韩视频免费在线观看| 国产精品久久久久免费a∨| 久久久中精品2020中文| 欧美高清成人| 欧美在线视频观看| 免费久久精品视频| 亚洲欧美日韩国产综合精品二区| 久久成年人视频| avtt综合网| 性欧美暴力猛交69hd| 最近中文字幕日韩精品| 亚洲欧美日韩在线| 亚洲美女在线观看| 亚洲欧美综合v| 99精品久久| 好吊一区二区三区| 欧美大片免费观看在线观看网站推荐| 欧美在线观看你懂的| 久久精品最新地址| 99re热这里只有精品视频| 亚洲一区图片| 日韩视频免费| 久久久久久久久久久一区 | 久久免费高清视频| 亚洲一区二区精品在线观看| 久久免费一区| 日韩视频免费观看高清完整版| 国产精品久久看| 亚洲国产老妈| 影院欧美亚洲| 亚洲欧美精品一区| 日韩午夜电影在线观看| 久久美女性网| 欧美一区二区在线免费观看| 欧美激情1区2区| 久久久精品国产免大香伊| 欧美午夜理伦三级在线观看| 亚洲肉体裸体xxxx137| 亚洲第一毛片| 午夜精品99久久免费| 一二美女精品欧洲| 欧美日韩ab片| 亚洲黄色成人| 亚洲精品国产精品国自产观看| 性18欧美另类| 欧美一区二区久久久| 国产精品久久久久aaaa| 一本色道久久88亚洲综合88| 亚洲视频www| 欧美日韩视频专区在线播放| 欧美激情一区二区三区在线| 亚洲国产日韩一区二区| 麻豆国产精品777777在线| 亚洲成色www久久网站| 亚洲剧情一区二区| 欧美日本在线观看| 一本色道久久综合亚洲91| 亚洲欧美综合网| 国产午夜精品一区二区三区视频| 香蕉成人伊视频在线观看 | 亚洲国产一区二区三区青草影视| 另类激情亚洲| 亚洲人成在线观看| 亚洲一级网站| 国产毛片久久| 久久综合伊人77777| 亚洲电影网站| 亚洲一区网站| 国产一区二区三区四区五区美女 | 国内精品久久久久影院 日本资源| 性欧美1819性猛交| 欧美fxxxxxx另类| 一区二区三区精品国产| 欧美性生交xxxxx久久久| 欧美一区二区三区视频在线观看 | 欧美国产精品日韩| 99精品热6080yy久久| 欧美伊人久久大香线蕉综合69| 国产视频一区欧美| 男女激情久久| 亚洲中午字幕| 牛牛影视久久网| 亚洲精品社区| 国产美女精品一区二区三区| 久久福利毛片| 亚洲精品字幕| 久久久水蜜桃av免费网站| 亚洲高清一区二区三区| 欧美日韩日日骚| 久久精品国产第一区二区三区最新章节 | 国产自产v一区二区三区c| 久久久久九九视频| 亚洲电影免费观看高清| 亚洲专区一二三| 狠狠v欧美v日韩v亚洲ⅴ| 欧美区在线播放| 亚洲一区二区高清| 亚洲高清免费| 玖玖玖国产精品| 午夜精品久久久久久久| 亚洲国产福利在线| 国产欧美日韩精品在线| 欧美日韩1234| 欧美福利一区二区三区| 久久精品二区| 欧美一级播放| 亚洲视频在线视频| 91久久国产综合久久| 美日韩精品视频| 久久久精品国产一区二区三区 | 亚洲一区免费视频| 日韩视频―中文字幕| 亚洲成人中文| 国产综合欧美|