Программирование arrow Visual C++ arrow Использование ODBC в Visual C++

Использование 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 приложение диалоговое окно с одной кнокой и к этой кнопке привяжите событие нажатия. Я так и делал, когда писал пример.


 
« Предыдущая статья   Следующая статья »


  • Visual C++, Работа с СУБД Oracle через интерфейс OCCI
    OCCI - расшифровывается как Oracle C++ Call Interface и представляет собой специализированное апи для работы с СУБД Oracle используя C++ что в общем то явствует из названия. Для использования необходимо подключить заголовочный файл "occi.h"....
  • Visual C++, Задача Майхилла для Microsoft Visual C++
    О синхронизации процессов в среде Windows. Задача Майхилла - еще один (наряду с задачей RS-триггера) пример решения нетривиальных проблем создания сложных систем. Справившись с ней, мы научимся организовывать взаимодействие параллельно работающих компонентов сложных программных комплексов в жестких условиях. ...
  • Visual C++, Создание простого приложения с плагинами
    В этой статье описываются принципы и решения, применяемые при проектировании приложений, которые будут использовать внешние, динамически подключаемые, модули. Эта статья более ориентирована на тех, кто хочет использовать механизмы подключения/отключения функциональности приложения, наподобии механизма Aobe Photoshop или Far, а не просто многократного использования кода в разных приложениях....
  • Visual C++, Работа с 1C Предприятие из Visual C++
    В данной статье показано, как можно работать с 1С Предприятием из С++ с помощью OLE DB. Так же она будет интересна тем, кто не пользуется C++, но хочет узнать подробности "а как оно устроено внутри 1С". В данной статье речь пойдет об 1С Предприятии версии 7.7. Полагаю, что в версии 8 мало что изменилось. Предполагается, что читатель хотя бы чуть-чуть знаком с 1С Предприятием. Так же предполагается, что вы изучали официальное руководство 1С по вопросам OLE DB (часть вторая описани...
  • Visual C++, Как самому сделать plug-in к FAR на Visual C++
    Трудно найти человека, которые не знает или не использует Far - IMHO лучший клон NC для Windows. Кроме того, что это просто очень хороший файл менеджер, к нему есть огромное количество plug-in модулей. Plug-in модуль это DLL-файл, который вместо стандартных Windows функций по работе с монитором, клавиатурой и т.д. обращается к функциям Far-а. Far поддерживает весь набор функций для работы в текстовом режиме. Установка plug-in модуля происходит предельно просто - DLL файл и файлы данных коп...
  • Visual C++, Использование директивы #import в Visual C++
    В данной статье я попытаюсь объяснить то, как работает эта директива и привести несколько примеров её использования. Надеюсь, после этого вы тоже найдёте её полезной.  Директива #import введена в Visual C++, начиная с версии 5.0. Её основное назначение облегчить подключение и использование интерфейсов COM, описание которых реализовано в библиотеках типов....
  • Visual C++, Создание VxD на Visual C++ без ассемблерных модулей
    Виртуальные драйверы устройств (VxD) в Windows во многих случаях являются единственным «честным» способом обхода ограничений, установленных системой для приложений Win32: невозможности прямого доступа к портам ввода-вывода и служебной памяти, эффективной обработки аппаратных прерываний, использования сервисных функций существующих VxD и т.п. Кроме того, без VxD не обходится практически ни один полноценный драйвер физического или виртуального устройства....
  • Visual C++, Основы разработки прикладных виртуальных драйверов
    Как уже отмечалось ранее, виртуальные драйверы служат прежде всего для виртуализации аппаратуры, то есть для предоставления одновременно выполняемым задачам возможности совместного использования устройств компьютера. Измерительная или управляющая аппаратура, подключаемая к компьютеру с целью создания автоматизированной установки, вряд ли будет эксплуатироваться в многозадачном режиме, однако использование для ее управления виртуального драйвера может заметно сократить программные издержки ...