Использование ODBC в Visual C++ - Продолжаем устанавливать соединение
ОГЛАВЛЕНИЕ
Продолжаем устанавливать соединение
Для работы с данным примером нам необходимо установить связь ODBC драйвера с файлом. Это очень удобно. Если у Вас есть файл на сетевом диске, то при изменении его местоположения необходиом только изменить путь в ODBC и программе. Так же и при установке нового рабочего место настраиваете доступ и программа работает.
Настройка происходит по пути - Мой компьютер -> Панель управления -> ODBC.
Настройка связи драйвера с файлом происходит на вкладке File DNS. Здесь нам нужно выбрать пункт меню Configure.
Если файл выбран, то Вы увидите запись в разделе Database, если нет, выберите пунк Select и выберите файл. Дальнейшее описание подразумевает, что файл выбран.
В прошлый раз мы с вами упустили ряд параметров и обработку исключительных ситуаций. Так как в Подробности этого сайта я включил описание исключительных ситуаций мы их можем обрабатывать. Для знакомства сначала сходите в подробности, если знаете то вперед !!
Ниже процедура открытия с новым параметром и обработкой ошибок.
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database",TRUE);
// Если TRUE не указать то по умолчанию FALSE
}
catch(CDBException cdbThrow)
{
AfxMessageBox(cdbThrow.m_strError);
}
Функция Open итмеет второй параметр который говорит и типе открытия со стороны доступа. Если здесь установлено TRUE то после открытия программой данной базы данных доступ к ней для других программ будет запрещен. А если другая программа открыла раньше ? Тогла перед вами извеняться в виде исключительной ситуации :-).
Внимание В реализацию этих функций встроены макросы ASSERT, и поэтому для проверки работоспособности данного кода надо пользоваться типом реализации Release иначе вы просто получите сообщение о прерывании программы.
Соберите и запустите программу. Нажмите кнопку. Все нормально. Выйдите из программы. Запустите ACCESS откройте таблицу и опять запустите программу, жмите кнопку. Вот теперь, так как таблица открыта, Вы и получите сообщение, как на рисунке выше. Эксклюзивный доступ подразумевает, что только один пользуется таблицей.
Данный тип доступа применим часто. Например 1C бухгалтерия использует его для востановления работоспособности таблиц. Он нужен если с Вашей базой одновременно могут работать несколько человек. Так как базы данных должны быть нормализованны, и в них выделяются таблицы с классфикаторами, то в момент изменения таблиц классификаторов доступ к ним должне быть запрешен. Вот пример. У Вас поменялся материально отвественный на складе. Есть таблица со списком данных людей. Вы перед внесением изменений должны заблокировать данную таблицу, дабы фамилия несушествуюшего человека не попала в расходные ведомости. У других остановится работа, но что сделаешь - OnLine :-).
Результат работы функции возвращается в виде иключения, у исключения конктерный тип класса. Вот его мы и отлавливаем. А у этого класса есть член данных m_strError, который отвественнен за строку с ошибкой.
Открывать базу данных можно и так.
cdbMyDB.Open("MS Access 97 Database",TRUE,TRUE);
// Если TRUE не указать то по умолчанию FALSE
Добавленный параметр говорит о том, что база данных будет открыта только для чтения. Это тоже полезно. Например бухгалтер по складам не имеет право никак править должности людей, но он должен иметь доступ к данным. Соотвественно открывать он должен эти таблицы только для чтения. Этот режим говорит о том, что изменения в базу вноситься не будут. Если вы его явно не указали, то открыто с разрешением для правки.
На базе данных может стоять пароль. Вот так это делается в ACCESS.
Соотвественно когда если пароль установлен, и Вы запустите программу, то у Вас появится окно с именем пользователя и просьбой ввести пароль. Для автоматического ввода пароля используется следующий параметр.
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, но нужна она не всегда.