Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: oleg_alexeev   (05.06.2007 в 10:17)
Пример тестового консольного приложения для работы с mdb-файлом:


#include "stdafx.h"
#include <atlstr.h>
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF""adoEOF")


void Test()
{
    HRESULT hr;

    // создать объект connection (соединение)
    _ConnectionPtr conn;
    hr = conn.CreateInstance(__uuidof(Connection));
    if (FAILED(hr))
    {
        printf("Creation of connection object failed.");
        return;
    }

    // открыть соединение (подключиться к базе данных)
    _bstr_t connstr("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\db1.mdb;Mode=ReadWrite");
    _bstr_t user("");
    _bstr_t password("");
    hr = conn->raw_Open(connstr, user, password, adConnectUnspecified);
    if (FAILED(hr))
    {
        printf("Failed to open database.");
        return;
    }

    // выполнить SQL-запрос [выборка записей, у которых поле ID меньше либо равно 2]
    _CommandPtr cmd;
    hr = cmd.CreateInstance(__uuidof(Command));
    if (FAILED(hr))
    {
        printf("Creation of command object failed.");
        return;
    }
    cmd->ActiveConnection = conn;
    cmd->CommandText = "SELECT * FROM table1 WHERE id <= ?;";
    cmd->Parameters->Append(cmd->CreateParameter("", adInteger, adParamInput, sizeof(int), 2));
    _RecordsetPtr rst = cmd->Execute(NULL, NULL, adCmdText);
    while (!rst->adoEOF)
    {
        // вывести на экран значение полей ID и NAME и перейти к следующей записи
        _variant_t id   = rst->GetCollect("id");
        _variant_t name = rst->GetCollect("name");
        wprintf(L"Id: %d Name: %s\n", (long)id, (wchar_t *)name.bstrVal);
        rst->MoveNext();
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    // инициализировать COM
    CoInitialize(NULL);

    try
    {
        Test();
    }
    catch (_com_error &e)
    {
        CString desc;
        desc.Format(TEXT("%s"), (const char*)e.Description());

        CString err;
        if (desc==TEXT("(null)")) err.Format(TEXT("Код ошибки: 0x%x"), (int)e.Error());
        else                      err.Format(TEXT("Код ошибки: 0x%x    Описание: %s"), (int)e.Error(), desc.GetString());

        ::MessageBox(::GetActiveWindow(), err.GetString(), TEXT("Ошибка"), MB_OK|MB_ICONEXCLAMATION);
    }

    system("pause");
    return 0;
}


Как Вам нравится этот монстрик? :))


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: