Использование ODBC в Visual C++

ОГЛАВЛЕНИЕ

Класс CDatabase представляет собой класс, который обеспечивает связь с источником данных. Под источником данных может пониматься как непосредсвенно файл, в котором находится таблица, например dBase, так и файл с многими таблицами, например Microsoft Access или сервер баз данных Oracle, MS SQL Server и т.д. Для связи с источником данных используется интерфейс ODBC. У данного класса есть папа в виде класса CObject.

Установка соединения

Для работы необходимо включить описание функций, которые находятся в файле afxdb.h:

// пример
#include "afxdb.h"

Для начала работы необходимо используя класс создать тект используя конструктор. В конструктор нет необходимости передавать параметры. После создания обьекта с ним можно проводить различные операции. Например окрывать базу данных, устанавливать тайм ауты соединения , закрывать и т.д.:

// Описание консруктора CDatabase();
// пример

CDatabase cdbMyDB();

У данного класса есть всего один член данных. Это m_hdbc. Он указывает на текущее соединение ODBC. Имеет смысл только если оно установленно. Эта переменная имеет тип HDBC

Для установки соединения Вам необходимо вызвать функцию Open. Вот её описание.

virtual BOOL Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = "ODBC;",
BOOL bUseCursorLib = TRUE );
throw( CDBException, CMemoryException );

Как видите все параметры кроме первого не устанавливать. Первый параметр lpszDSN указывает на имя DNS для связи с источником данных. Эти имена находятся в настройке ODBC в панели управления на вкладке File DNS. Это имя можно установить в NULL, и тогда при выполнении программы Вам предложат выбрать источник. Данная ситуация изображена на рисунке ниже:

//  Пример
void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
cdbMyDB.Open(NULL);
}

Если вы укажите имя и оно будет ошибочно, то получите сообщение о ошибке, как на рисунке ниже:

/ Пример

void CDatebaseDlg::OnOpen() 
{
CDatabase cdbMyDB;
cdbMyDB.Open("Bad date source");
}

Для контроля над данной ситуацией необходимо воспользоваться обработкой прерываний VC++. В примере ниже перехватываются все прерывания возможные при открытии источника данных. В ответ на ошибку появится диалоговое окно.

// Пример
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("Bad date source");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}

При указании правильного имени процесс установки связи может пойти двумя путями. Если с истоником не связан конкретный файл, то появится диалоговое окно с предложением выбрать файл.

// Пример
void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
}

В случае, если с источником данных файл связан вы ничего не увидите. Но установку связи молжно проверить вызвав функцию IsOpen, которая вернет TRUE в случае успеха. Эта же функция поможет Вам при работе и ответит на вопрос - Связь установлена или нет. Например вы захотите испоьзовать один класс CDatabase для множества разных соединений.

// Описание BOOL IsOpen( ) const;
// Пример

void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database");
if (cdbMyDB.IsOpen())
AfxMessageBox("Open Base");
else
AfxMessageBox("Not Open");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
}

По завершению работы источник данных необходимо закрыть используя функцию Close.

// Описание virtual void Close( );
// Пример

void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database");
if (cdbMyDB.IsOpen())
AfxMessageBox("Ok Open Base");
else
AfxMessageBox("Not Open");
cdbMyDB.Close();
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
}

Ну на сегодня всё.

Если вы хотите попробовать, то создайте с помощью AppWizard приложение диалоговое окно с одной кнокой и к этой кнопке привяжите событие нажатия. Я так и делал, когда писал пример.

Читайте также:
  • Работа с СУБД Oracle через интерфейс OCCI
    Принятые именования объектов Environment* env;Connection* conn;Statement* stmt;ResultSet* rs;SQLException &sqlExcp; Давайте рассмотрим пример небольшой тестовой программы использующей интерфейс OCCI:#include #include "occi.h"  using namespace std;using namespace oracle::occi;#defi...
  • Задача Майхилла для Microsoft Visual C++
    Алгоритм поведения и автоматная модель стрелка На первый окрик: "Кто идет?" - он стал шутить,На выстрел в воздух закричал: "Кончай дурить!"Я чуть замешкался и, не вступая в спор,Чинарик выплюнул - и выстрелил в упор.В. Высоцкий В задаче Майхилла необходимо определить, как нужно...
  • Создание простого приложения с плагинами
    Динамически подключаемые модули (DLL) - это модули, которые содержат функции и данные. Эти модули загружаются во время выполнения программы, использующей эти модули (хоста). В ОС Windows модули содержат внутренние и экспортируемые функции (в UNIX подобных системах все функции являются экспортируе...
  • Работа с 1C Предприятие из Visual C++
    1С Предприятие предоставляем пользователям механизм OLE DB. Если Вам вдруг захотелось использовать какие либо данные из 1С Предприятия в вашей программе – вы можете воспользоваться этим механизмом. Совсем просто это делается в таких языках, как Visual Basic или Delphi. В них вся работа с O...
  • Как самому сделать plug-in к FAR на Visual C++
    FAR распространяется с полным набором файлов для написания самим plug-in на любом С компиляторе для Windows. Темой этой статьи является написание этих модулей самим на Visual C++ (я использовал Visual C++ 5.0). При установке в каталог Far копируется PlugDoc.rar, в нем есть примеры plug-in-ов и he...