Использование директивы #import в Visual C++ - ADO DB

ОГЛАВЛЕНИЕ

ADO DB

// console.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include <stdio.h>

#import "C:\Program Files\Common Files\System\ado\msado20.tlb" \
rename("EOF","ADOEOF") rename("BOF","ADOBOF")
// оператор rename необходим, т.к. EOF определён как макрос
// в файле stdio.h
using namespace ADODB;

void main()
{
::CoInitialize(NULL);
try {
// открываем соединение с БД
_ConnectionPtr con("ADODB.Connection");
con->Open(L"Provider=Microsoft.Jet.OLEDB.3.51;"
L"Data Source=Elections.mdb","","",0);

// открываем таблицу
_RecordsetPtr rset("ADODB.Recordset");
rset->Open(L"ElectTbl",(IDispatch*)con,
adOpenDynamic,adLockOptimistic,adCmdTable);

FieldsPtr flds = rset->Fields;

// добавляем
rset->AddNew();
flds->Item[L"Фамилия"] ->Value = L"Пупкин";
flds->Item[L"Имя"] ->Value = L"Василий";
flds->Item[L"Отчество"] ->Value = L"Карлович";
flds->Item[L"Голосовал ли"] ->Value = false;
flds->Item[L"За кого проголосовал"]->Value = L"Против всех";
rset->Update();

// подменяем
flds->Item[L"Голосовал ли"] ->Value = true;
flds->Item[L"За кого проголосовал"]->Value = L"За наших";
rset->Update();

// просмотр
rset->MoveFirst();
while (!rset->ADOEOF) {
char buf[1024];
sprintf(buf,"%s %s %s: %s - %s\n",
(LPCTSTR)_bstr_t(flds->Item[L"Фамилия"]->Value),
(LPCTSTR)_bstr_t(flds->Item[L"Имя"]->Value),
(LPCTSTR)_bstr_t(flds->Item[L"Отчество"]->Value),
(bool)flds->Item[L"Голосовал ли"]->Value? "Да": "Нет",
(LPCTSTR)_bstr_t(flds->Item[L"За кого проголосовал"]->Value));

CharToOem(buf,buf);
printf(buf);
rset->MoveNext();
}
} catch (_com_error& er) {
char buf[1024];
sprintf(buf,"_com_error:\n"
"Error : %08lX\n"
"ErrorMessage: %s\n"
"Description : %s\n"
"Source : %s\n",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));

CharToOem(buf,buf); // только для косольных приложений
printf(buf);
}
::CoUninitialize();
}