strCmd=_T("select * from UserList");
try{//создание объекта экземпляра объекта Recordset
if(FAILED(pRecordUser.CreateInstance(__uuidof(Recordset))) )
throw "CreateInstance()";
//открытиеобъекта Recordset
if(FAILED(pRecordUser->Open((LPCTSTR)strCmd,(LPCTSTR)strCnn,adOpenDynamic,adLockOptimistic,adCmdUnknown)))
throw "Connection->Open";
//получение указателя на интерфейс, используемый для обмена данными
if(FAILED(pRecordUser->QueryInterface(__uuidof(IADORecordBinding),(LPVOID *)&piAdoRecordBinding1)))
_com_issue_error(E_NOINTERFACE);
// связать экземпляр класса хранения данных с набором записей
piAdoRecordBinding1->BindToRecordset(&user);
}
catch(const char *s){
MessageBox(s);
}
catch (...){
MessageBox("unknown User");
}
Класс хранения данных
// History.h: interface for the CHistory class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_HISTORY_H__6C580445_FE64_407F_885D_E9E89EDB5755__INCLUDED_)
#define AFX_HISTORY_H__6C580445_FE64_407F_885D_E9E89EDB5755__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define INITGUID
// подключение динамической библиотеки msado15.dll
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")
using namespace ADOCG;
#include "icrsint.h"
class CHistory : public CADORecordBinding
{
//назначение переменных которые будут соответствовать полям в записях базы данных
BEGIN_ADO_BINDING(CHistory) // макрос для создания класса хранения данных
ADO_FIXED_LENGTH_ENTRY(1,adInteger, m_lCount, lCountStatus, FALSE) // ложь
ADO_FIXED_LENGTH_ENTRY(2,adInteger, m_lMyNamber, lMyNamberStatus, TRUE)
ADO_FIXED_LENGTH_ENTRY(3,adInteger, m_lOutNamber, lOutNamberStatus,TRUE)
ADO_FIXED_LENGTH_ENTRY(4,adBoolean, m_bWhereFrom, lWhereFromStatus, TRUE)
ADO_FIXED_LENGTH_ENTRY(5,adDate, m_dtTime, lTimeStatus, TRUE)
ADO_VARIABLE_LENGTH_ENTRY2(6,adVarChar,m_szData,sizeof(m_szData),lDataStatus,TRUE)
END_ADO_BINDING()
public:
LONG m_lCount;
ULONG lCountStatus;
LONG m_lMyNamber;
ULONG lMyNamberStatus;
LONG m_lOutNamber;
ULONG lOutNamberStatus;
VARIANT_BOOL m_bWhereFrom;
ULONG lWhereFromStatus;
DATE m_dtTime;
ULONG lTimeStatus;
CHAR m_szData[255];
ULONG lDataStatus;
};
#endif // !defined(AFX_HISTORY_H__6C580445_FE64_407F_885D_E9E89EDB5755__INCLUDED_)
Листинг 2.
Класс производный от CAsyncSocket– перегружаем функции OnRecive(), OnSend(), OnClose() и перенаправляем их исполнение в главный класс(СClientDlg)
// MySocket.cpp : implementation file
*
*
*
// CMySocket member functions
void CMySocket::SetParent(CDialog *pWnd)
{
m_pWnd=pWnd;
}
void CMySocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if (nErrorCode == 0)
((CClientDlg*)m_pWnd)->OnReceive();
CAsyncSocket::OnReceive(nErrorCode);
}
void CMySocket::OnSend(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if (nErrorCode == 0)
((CClientDlg*)m_pWnd)->OnSend();
CAsyncSocket::OnSend(nErrorCode);
}
void CMySocket::OnClose(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if (nErrorCode == 0)
((CClientDlg*)m_pWnd)->OnClose();
CAsyncSocket::OnClose(nErrorCode);
}
1. Грегори, Кэйт «Использование Visual C++6. Специальное издание.»: Пер. с англ. –М.; СПб.; К.: издательский «Вильямс», 2002. – 864 с.: ил.
2. Чепмен, Дэвис «Освой самостоятельно Visual C++.Net За 21 день»: Пер. с англ. –М.; СПб.; К.: издательский «Вильямс», 2002. – 720 с.: ил.
3. Материалы сайта www.firststeps.ru\vc\mfchelp Шаг 56 – «Эффекты OnSysCommand».
4. Материалы сайта www.firststeps.ru\vc\mfchelp шаги 107 – 109 «Работа с SysTray».
5. Материалы сайта www.firststeps.ru\vc\mfc шаг 32 «Использование таймера».
6. Электронная документация MSDN Library April 2001.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.