Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Access 2000 через ADO


Автор: chipset 7.4.2005, 22:34
Три шага для подключения БД Access2000 к своей программе:

1) Прежде всего, качаем файл, присоединённый к данной теме. В нём находятся 2 исходника, в которых лежат все необходимые классы и структуры. Распаковав архив, заходим в Ado2.h, и изменяем пути к длл-кам:
Цитата
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF", "EndOfFile")
#import "C:\Program Files\Common Files\System\ado\MSJRO.DLL" no_namespace

Если версия Windows - 2000 или XP, то обе длл-ки лежат в System32.

2) Подключаем файл Ado2.h к исходным кодам своей программы. Лучше всего это сделать в файле stdafx.h

3) Для того, чтобы база данных работала в любой Windows, где даже нету установленного Office, достаточно просто включить в дистрибутив своей программы два файла: msado15.dll и msjet40.dll, и в инсталляционном скрипте установить опцию авторегистрации (Register DLL server) для обеих длл-ок. При упаковке каким-нибудь InstallShield-ом или WISE, эти два файла добавят всего лишь 700-800 Кб.

Простой пример работы с ADO:
Цитата
#include  "Ado2.h"

// ...

void  SomeFunction()
{
     // коннектимся к нашей базе данных "my_database.mdb":
     CADODatabase   db;
     CString  csPath = "c:\my_database.mdb";  // измените этот путь
     db.Open("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + csPath);
     
     // вызываем хранимую процедуру (запрос) "SetSomeData":
     CADOCommand qd(&db, "SetSomeData");
     // передаём параметр типа integer
     CADOParameter theparam(ADODB::adInteger);
     theparam.SetName("param_some_data");
     theparam.SetValue(123);
     qd.AddParameter(&theparam);
     qd.Execute();

     // вызываем хранимую процедуру "GetSomeData":
     CADOCommand qd(&db, "GetSomeData");
     CADORecordset rs(&db);
     rs.Execute(&qd);
     long cntRes = rs.GetRecordCount();

     // получаем поле "some_data" из набора записей результата запроса
     if(cntRes)
     {
          rs.MoveLast();
          rs.MoveFirst();
          for(int i = 0; i < cntRes; i++)
          {
               _variant_t val;
               rs.GetFieldValue("some_data", val);

               // получаем значение поля в виде длинного целого
               long lVal = long(val);

               rs.MoveNext();
          }
     }     
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)