Здесь кода не будет, здесь будет описание. Итак, у нас есть программа, которой нужно "присоединиться" к базе Microsoft Access, лежащей совсем рядом, в текущем каталоге. На машине пользователя нам не нужно ничего, кроме стандартного набора bpl и BDE. Но - теперь не нужны SQL Links, можно использовать, например, Install Shield, можно взять отдельный дистрибутив BDE. Поехали:
1. На основную форму проекта кидаем компоненту TDatabase. Устанавливаем ее свойства: LoginPrompt - false, DatabaseName - dbMain, AliasName - c2a (имя источника данных ODBC). Во всех компонентах TQuery или TTable свойство Database Name будет равно dbMain. Конечно, можно не использовать компоненту TDatabase, а в TQuery или TTable прямо указывать имя источника данных ODBC, но представьте, если вы написаи проект формочек на двадцать-тридцать, а потом решили, что имя источника 'MySuperDSN' не в полной мере отражает всю вашу крутость :-) Изменять свойство у полусотни компонент - очень муторное занятие, поверьте.
2. В конструкторе основной формы прописываем код примера №1, вставляя на место комментария следующий код:
if (t == "c2a") { Exists = true; break; }
а после цикла - такой фрагмент:
if (!Exists) { NewDSN(); }
3. Функция NewDSN() полностью повторяет код примера №2.
Теперь при первом запуске программы будет создан источник данных ODBC Microsoft Access с именем c2a, ссылающийся на файл db1.mdb, лежащий в том же каталоге, что и программа.
4. На всякий непредвиденный случай (если вы переместили программу в другой каталог, поменялась буква диска или сетевое имя, где лежит база данных) можно в программе предусмотреть немедленное перезаписывание DSN по горячей клавише, что-то типа такого:
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Shift.Contains(ssAlt) && Shift.Contains(ssCtrl)) if (Key==VK_F1) { if (Application -> MessageBox("Перезаписать DSN?", "Вопрос",MB_YESNO)==IDYES) { NewDSN(); } } }
Здесь для перезаписи DSN используется комбинация Alt-Ctrl-F1