Базы данных в интегрированной среде Microsoft Visual C++

Страницы работы

Фрагмент текста работы

работы с данным примером нам необходимо установить связь ODBC драйвера с файлом. Это очень удобно. Если у Вас есть файл на сетевом диске, то при изменении его местоположения необходимо только изменить путь в ODBC и программе. Так же и при установке нового рабочего место настраиваете доступ и программа работает.

Настройка происходит по пути - Мой компьютер -> Панель управления -> ODBC.

2_1.gif (4556 b)

Настройка связи драйвера с файлом происходит на вкладке File DNS.

2_2.gif (4143 b)

Здесь нам нужно выбрать пункт меню Configure.

2_3.gif (1867 b)

Если файл выбран, то Вы увидите запись в разделе Database, если нет, выберите пункт Select и выберите файл. Дальнейшее описание подразумевает, что файл выбран.

Ниже процедура открытия с новым параметром и обработкой ошибок.

CDatabase cdbMyDB;
try
{
 cdbMyDB.Open("MS Access 97 Database",TRUE);
 // Если TRUE не указать то по умолчанию FALSE
}
catch(CDBException cdbThrow)
{
 AfxMessageBox(cdbThrow.m_strError);
}

Функция Open имеет второй параметр который говорит и типе открытия со стороны доступа. Если здесь установлено TRUE то после открытия программой данной базы данных доступ к ней для других программ будет запрещен. А если другая программа открыла раньше ? Тогда перед вами извиняться в виде исключительной ситуации :-). Как ниже например нарисовано:

2_4.gif (2655 b)

Результат работы функции возвращается в виде исключения, у исключения определённый тип класса. Вот его мы и отлавливаем. А у этого класса есть член данных m_strError, который ответственный за строку с ошибкой.

Открывать базу данных можно и так.

cdbMyDB.Open("MS Access 97 Database",TRUE,TRUE);
// Если TRUE не указать то по умолчанию FALSE

Добавленный параметр говорит о том, что база данных будет открыта только для чтения. Это тоже полезно. Например бухгалтер по складам не имеет право никак править должности людей, но он должен иметь доступ к данным. Соответственно открывать он должен эти таблицы только для чтения. Этот режим говорит о том, что изменения в базу вноситься не будут. Если вы его явно не указали, то открыто с разрешением для правки.

На базе данных может стоять пароль. Вот так это делается в ACCESS:

2_5.gif (4122 b)

Соответственно когда если пароль установлен, и Вы запустите программу, то у Вас появится окно с именем пользователя и просьбой ввести пароль. Для автоматического ввода пароля используется следующий параметр.

cdbMyDB.Open("MS Access 97 Database",TRUE,TRUE,"ODBC;UID=ADMIN;PWD=123");

Последний параметр это текстовая строка с набором данных разделенных точной с запятой.

ODBC;      // Тип соединения. Создан для дальнейшего использования,
             // если будете пользоваться не ODBC
UID=ADMIN;   // Имя пользователя
PWD=123                      // Пароль

Этот набор может меняться от одной базы данных к другой. Например при связи с MS SQL есть дополнительные параметры, как HOST.

И последний возможный параметр:

cdbMyDB.Open("MS Access 97 Database",TRUE,TRUE,"ODBC;UID=ADMIN;PWD=123",TRUE);

Этот параметр указывает надо загружать или нет библиотеку курсоров. Библиотека курсоров улучшает функциональность ODBC, но нужна она не всегда.

 Информация о соединении

Сразу после установки соединения есть возможность проверить его работоспособность, и получить ряд параметров соединения.

Вероятно в первую очередь вы заинтересуетесь правильностью открытия и установки соединения. Эта возможность реализована в функции IsOpen. Эта функция возвращает значение отличное от нуля, если связь установлена.

// BOOL IsOpen( ) const;
//......
CDatabase cdbMyDB;
cdbMyDB.Open("MS Access 97 Database");
if (cdbMyDB.IsOpen()) 
{
 //......
}
//......

При установки связи мы передавали строку соединения, но использовали часть параметров. Функция GetConnect() возвращает строку CString, в которой перечислены все параметры используемые при установке соединения.

// const CString& GetConnect();
if (cdbMyDB.IsOpen()) 
{
 AfxMessageBox(cdbMyDB.GetConnect()); 
}

У нас появляется вот такая строка. Часть параметров в строке соединения я не упоминал, а они присутствуют так как заданы по умолчанию. И если Вы хотите посмотреть параметры соединения с конкретным сервером, то используйте этот код для получения информации.

3_1.gif (3122 b)

Теперь получим имя базы данных, с которой мы установили соединение.

// CString GetDatabaseName();
cdbMyDB.Open("MS Access 97 Database");
if (cdbMyDB.IsOpen()) 
{
 AfxMessageBox(cdbMyDB.GetDatabaseName());
}

Вот такое окно получается у меня.

3_2.gif (1060 b)

Проверим можно ли вносить в базу данных изменения. То есть убедимся, что открыли в режиме отличном от Read Only. Для этого воспользуемся функцией CanUpdate.

// BOOL CanUpdate();
cdbMyDB.Open("MS Access 97 Database");
if (cdbMyDB.IsOpen()) 
{
 if (cdbMyDB.CanUpdate()) AfxMessageBox("Update Yes");
}

И проверим возможность использования транзакций используя функцию CanTransact(). Не все драйвера ODBC имеют данную возможность.

// BOOL CanTransact();
if (cdbMyDB.IsOpen()) 
{
 if (cdbMyDB.CanTransact()) AfxMessageBox("Transact Yes");
}

 CRecordset

Recordset - это источник строк. Этот объект можно рассматривать как оболочку для строк или колонок таблицы. То есть этот объект может включать, как всю таблицу, так и часть её на основе SQL запроса. В файле базы данных может храниться не одна таблица. Базы данных для этого и предусмотрены. Только старые версии персональных баз данных типа FoxPro хранят каждую таблицу в отдельном файле.

Итак для создания объекта нам необходимо объявить переменную. Объект создается на основе конструктора. Вот описание конструктора.

CRecordset( CDatabase* pDatabase = NULL);

Как видите в конструктор можно передать указатель на объект типа CDatabase, который отвечает за доступ к базе данных. Конструктор предусматривает и простое создание без передачи объекта CDatabase

Похожие материалы

Информация о работе