Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2009, 11:12   #1
Cabyrc
Пользователь
 
Регистрация: 17.03.2009
Сообщений: 17
По умолчанию Как осуществить возможность выбора БД в процессе работы программы

Каким образом в Delphi головной модуль связать с любой из распространенных СУБД (Access, MySQL, Oracle, FoxPro, InterBase), при этом соединение должно быть динамическим, т.е. пользователь при помощи диалогового окна выбирает БД, с которой будут производиться вычисления???
Cabyrc вне форума Ответить с цитированием
Старый 17.03.2009, 11:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ради бога. ADO компоненты.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.03.2009, 12:05   #3
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

Tсли Вы используете доступ к базе через ADO, в ADOConnection есть свойство: ConnectionString, вот сюда передавайте данные для установки связи, и потом свойство Сonnected:=true;
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 17.03.2009, 13:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ой. Боюсь, что всё далеко не так всё безоблачно...
в разных СУБД чуть-чуть отличается синтаксис SQL/DDL... :-(
Конечно, если не уходить в запросах дальше чем SELECT * FROM Table1 Where ...
или UPDATE Table1 SET Pole1 = Значение WHERE ....
то оно всё будет работать, но вложенные запросы, запросы в связанных таблицах, запросы с вариантами и т.д. и т.п. — всё это на разных СУБД будет глючить по разному...
я уже не говорю про использование триггеров и встроенных в сервер процедурных языков (Transact-SQL, PL/SQL и т.д.)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2009, 06:30   #5
Cabyrc
Пользователь
 
Регистрация: 17.03.2009
Сообщений: 17
По умолчанию

При помощи ConnectionString в динамике файл самой БД должен ведь обязательно лежать в директории с exe-файлом нашего скомпилированного проекта, насколько мне известно. А реализация проекта иная, пользователь открывает готовый про-дукт, выбирает нужную ему БД, после чего идет подключение проги к выбранной БД и вывод данных таблиц на экран??
Cabyrc вне форума Ответить с цитированием
Старый 18.03.2009, 07:11   #6
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
При помощи ConnectionString в динамике файл самой БД должен ведь обязательно лежать в директории с exe-файлом нашего скомпилированного проекта
не обязательно, чтобы использовать бд из другой папки нужно указывать полный путь к этой папке
например:
Код:
C:\temp\myproject\baza.mdb
Можно также использовать ini файлы для сохранения а затем дальнейшего извлечения пути к базе и имени.
Код:
options:=TiniFile.Create('.\'+'settings.ini');

path:=options.ReadString('paths', 'pathbd', '') ;
namebase:=options.ReadString('names', 'namebd', '') ;
ADOConnection.Connected:=False;
ADOConnection.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source="'+path+namebase+'";Persist Security Info=False' ;
ADOConnection.Connected:=True;
Где структура ini файла
Код:
[paths]
pathbd="c:\temp\myproject"

[names]
namebd="baza.mdb"

Последний раз редактировалось S@fer; 18.03.2009 в 07:16.
S@fer вне форума Ответить с цитированием
Старый 19.03.2009, 09:01   #7
Cabyrc
Пользователь
 
Регистрация: 17.03.2009
Сообщений: 17
По умолчанию

S@fer: в твоих вариантах указывается имя БД и ее расширения (в конкретном примере это Access). Также используется соответствующий драйвер Microsoft.Jet.OLEDB.4.0 опять же для Access. И потому прога будет присоединять конкретный файл БД по конкретному адресу, т.е. БД Access с именем baza.mdb, лежащая в C:\temp\myproject\. В моем понимании это жесткая связь с БД. Меня же интересует реализация в одном приложении подключения к различным БД (Access, MySQL, Oracle, FoxPro, InterBase), и при этом БД выбирает сам пользователь и соответственно имя БД может быть абсолютно любым, а расширение не только .mdb
Cabyrc вне форума Ответить с цитированием
Старый 19.03.2009, 10:04   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и при этом БД выбирает сам пользователь и соответственно имя БД может быть абсолютно любым, а расширение не только .mdb
Помоему разници нет. Сафер правильно тебе пример подогнал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.03.2009, 10:10   #9
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Cabyrc
Из OpenDialog сохраняешь полный путь к выбранной базе в переменную, парсишь её, в зависимости от расширения выбираешь соответсвующий драйвер
И в зависимости какой будет драйвер формируешь уже Connection
S@fer вне форума Ответить с цитированием
Старый 21.03.2009, 08:30   #10
Cabyrc
Пользователь
 
Регистрация: 17.03.2009
Сообщений: 17
По умолчанию

Спасиб, так и сделал
Cabyrc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать время работы программы в паскаль? bullvinkle Помощь студентам 2 26.12.2008 11:20
Можно ли ввести данные в таблицу StringGrid не в процессе выполнения программы а заранее Arassir Помощь студентам 5 02.11.2008 17:34
Блокировка функции в процессе ее работы Andr180nag JavaScript, Ajax 2 11.08.2008 18:07
Как ограничить срок работы программы Allegro87 Microsoft Office Access 7 26.11.2007 12:15
Как программно нажать клавишу в чужом процессе? Sere0ga Win Api 2 27.03.2007 18:43