Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

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

Статус
В этой теме нельзя размещать новые ответы.

Bob_Marley

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

Для работы необходимо включить описание функций, которые находятся в файле afxdb.h:
PHP:
// пример
#include "afxdb.h"
Для начала работы необходимо используя класс создать тект используя конструктор. В конструктор нет необходимости передавать параметры. После создания обьекта с ним можно проводить различные операции. Например окрывать базу данных, устанавливать тайм ауты соединения , закрывать и т.д.:
PHP:
// Описание консруктора CDatabase();
// пример
CDatabase cdbMyDB();
У данного класса есть всего один член данных. Это m_hdbc. Он указывает на текущее соединение ODBC. Имеет смысл только если оно установленно. Эта переменная имеет тип HDBC

Для установки соединения Вам необходимо вызвать функцию Open. Вот её описание.
PHP:
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, и тогда при выполнении программы Вам предложат выбрать источник. Данная ситуация изображена на рисунке ниже:
PHP:
// Пример
void CDatebaseDlg::OnOpen() 
{
CDatabase cdbMyDB;
cdbMyDB.Open(NULL);
}
Если вы укажите имя и оно будет ошибочно, то получите сообщение о ошибке, как на рисунке ниже:

/ Пример
PHP:
void CDatebaseDlg::OnOpen() 
{
CDatabase cdbMyDB;
cdbMyDB.Open("Bad date source");
}
Для контроля над данной ситуацией необходимо воспользоваться обработкой прерываний VC++. В примере ниже перехватываются все прерывания возможные при открытии источника данных. В ответ на ошибку появится диалоговое окно.
PHP:
// Пример
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("Bad date source");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
При указании правильного имени процесс установки связи может пойти двумя путями. Если с истоником не связан конкретный файл, то появится диалоговое окно с предложением выбрать файл.
PHP:
// Пример
void CDatebaseDlg::OnOpen() 
{
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
}
В случае, если с источником данных файл связан вы ничего не увидите. Но установку связи молжно проверить вызвав функцию IsOpen, которая вернет TRUE в случае успеха. Эта же функция поможет Вам при работе и ответит на вопрос - Связь установлена или нет. Например вы захотите испоьзовать один класс CDatabase для множества разных соединений.
PHP:
// Описание 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.
PHP:
// Описание 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 приложение диалоговое окно с одной кнокой и к этой кнопке привяжите событие нажатия. Я так и делал, когда писал пример.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу