Естественно, я не буду рассказывать обо всех функциях, с помощью которых можно сделать с ODBC все, что угодно. Поверьте, их очень много. Нам же для нашей практической задачи достаточно будет всего четырех:
1. Функция SQLDataSources возвращает список всех источников данных ODBC.
fDirection - задает режим работы. Может принимать значения SQL_FETCH_FIRST - вернуть первую запись и SQL_FETCH_NEXT - вернуть следующую запись. Логика работы аналогична функциям FindFirst и FindNext (помните DOS?);
szDSN - указатель на буфер длиной не менее cbDSNMax, куда будет записано имя источника данных;
cbDSNMax - длина буфера szDSN;
pcbDSN - указатель на целое, куда записывается реальная длина (не включая завершающий \0) принятого имени источника данных;
szDescription - указатель на буфер длиной как минимум 255 символов, куда запистывается описание принятого источника данных;
cbDescriptionMax - длина буфера szDescription;
pcbDescripton - указатель на целое, куда записывается реальная длина описания источника данных.
2. Функция SQLConfigDataSources добавляет, изменяет или удаляет указанный источник данных.
BOOL SQLConfigDataSources(HWND hwndParent, WORD fRequest,
LPCSTR lpszDriver, LPCSTR lpszAttributes)
hwndParent - хэндл родительского окна. Если не равен NULL, отображается стандартный для данного типа источника данных диалог настройки.
fRequest - тип запрашиваемой операции. Может принимать следующие значения:
ODBC_ADD_DSN (ODBC_ADD_SYS_DSN) - запрос на создание нового пользовательского (системного) источника данных;
ODBC_CONFIG_DSN (ODBC_CONFIG_SYS_DSN) - запрос на изменение существующего пользовательского (системного) источника данных;
ODBC_REMOVE_DSN (ODBC_REMOVE_SYS_DSN) - удаление пользовательского (системного) источника данных.
lpszDriver - указатель на строку, содержащую имя драйвера, ассоциированного с конкретным типом БД;
lpszAttributes - указатель на строку атрибутов в форме ключевое слово - значение. Каждая такая пара должна заканчиваться символом \0, в конце строки атрибутов должен стоять двойной символ \0.
Приведем несколько примеров строки атрибутов, чтобы вам было понятно, что это такое:
"DSN=MySource\0UID=MyLogin\0PWD=MyPass" - источник данных с именем MySource, логин - MyLogin, пароль - MyPass
Каждый драйвер "понимает" свои ключевые слова, чаще всего применяются:
PWD - пароль
UID - логин
DSN - имя источника данных
DATABASE - имя базы данных
SERVER - имя сервера, на котором находится база данных
Для баз данных Microsoft Access для указания имени БД вместо DATABASE используется ключевое слово DBQ.
3. Функция SQLAllocEnv создает новый хэндл для использования в других функциях и инициализирует интерфейс для работы с ODBC
RETCODE SQLAlocEnv(HENV * hEnv)
hEnv - указатель на переменную, которая будет хранить созданный хэндл в случае удачного выполнения функции
4. Функция SQLFreeEnv удаляет заданный хэндл и освобождает всю память, ассоциированную с ним.
Знаете ли Вы, что спецификация - это документ, описывающий соглашение между разработчиками и пользователями. Разработчик берется написать модуль, а пользователь соглашается не полагаться на знания о том, как именно этот модуль реализован, т.е. не предполагать ничего такого, что не было бы указано в спецификации. Такое соглашение позволяет разделить анализ реализации от собственно использования программы. Спецификации дают возможность создавать логические основы, позволяющие успешно "разделять и властвовать".