Вопрос № 84140: Здравствуйте!!! Подскажите пожалуйсто, как узнать или точнее зоздать событие ADOTable1, которое будет реагировать на изменение таблицы в БД. Пытался с тригерами придумать, но вот как их с Delphi связать недодумал.
SQL Server 2005
Delphi 7...Вопрос № 84156: Добрый день, уважаемые Эксперты!
Ситуация: компонент TIBDataSet "собирает" информацию из нескольких таблиц.
Допустим:
Table1:
t_id,
fam,
imya,
Otch,
Komm
Table2:
country,
state,
gorod,<br...Вопрос № 84161: Уважаемые эксперты, у меня стоит проблема перехода с программирования локальной СУБД на "клиент/серверное" приложение. Пока вопорос стоит в организации соединения с MS SQL из программы. Как я понял, лучше использовать ADO. Приведите пример ...
Вопрос № 84.140
Здравствуйте!!! Подскажите пожалуйсто, как узнать или точнее зоздать событие ADOTable1, которое будет реагировать на изменение таблицы в БД. Пытался с тригерами придумать, но вот как их с Delphi связать недодумал.
SQL Server 2005
Delphi 7
Отправлен: 25.04.2007, 13:55
Вопрос задал: Глеб (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Архангельский Андрей Германович
Здравствуйте, Глеб!
А триггера не связываются с Delphi.
Они работают внутри БД в контексте текущей транзакции.
Если нужно управлять какими-то операциями из Delphi в БД, то нужно использовать хранимые процедуры.
Использование механизма "Events" тоже проблематично:
1) оно передается не тогда, когда возникло, а после завершения транзакции.
2) в клиентской программе нужно запустить его ожидание.
--------- Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Добрый день, уважаемые Эксперты!
Ситуация: компонент TIBDataSet "собирает" информацию из нескольких таблиц.
Допустим:
Table1:
t_id,
fam,
imya,
Otch,
Komm
Table2:
country,
state,
gorod,
ul,
dom,
tt
Table3:
zavod,
korpus,
otdel,
boss,
telefon,
cc
Select Table1.t_id, Table1.imya, Table1.fam,
Table2.gorod, Table2.ul, Table2.tt,
Table3.otdel, Table3.telefon, Table3.cc
from Table1, Table2, Table3
where ((Table2.tt = Table1.t_id) and (Table3.cc = Table1.t_id))
Т.е. запрос выбирает данные из трех таблиц у которых одинаковые значения полей t_id, tt, cc.
Получаемый набор должен быть изменяемым. Подскажите пожалуйста что в данном случае нужно прописать в свойствах RefreshSQL, InsertSQL, DeleteSQL и ModifySQL этого TIBDataSet - a ?
Отвечает: sir henry
Здравствуйте, Дмитрий Александрович!
По современному стандарту связь между таблицами делается не после where, а для нее выделена специальная секция:
SELECT table1.t_id, table1.imya, table1.fam,
table2.gorod, table2.ul, table2.tt,
table3.otdel, table3.telefon, table3.cc
FROM table1 INNER JOIN table2 ON table1.t_id=table2.tt
INNER JOIN table3 ON table1.t_id=table3.cc
Хотя Ваш запрос и не является ошибочным, однако в случае если у Вас, наряду со связью, будут еще и дополнительные условия выборки записей (например table1.fam LIKE 'Иванов%'), Вам легче будет отделить мух от котлет (связь и условие выборки записей ) :)
Возможность изменения в xxxxxxSQL будет зависеть от наличия в Вашем запросе признака уникальности записи (ключевого поля). У Вас это поля "t_id", "tt" и "cc", для них обязательно должны быть созданы PRIMARY KEY. По значению этого поля и будет отыскана та запись, которая должна быть обновленаудаленазанесена новая.
Теперь от теории к практике. :) Самому, вручную, лучше туда ничего не писать, а воспользуйтесь генератором SQL. Крайне желательно, до того как Вы сгенерируете необходимые скрипты, зайти в редактор полей Вашего TIBDataSet и оставить там список только тех полей, которые действительно будут нужны для вышеуказанных действий.
Для генерации SQL-скриптов щелкните правой кнопкой мышки по компоненту TIBDataSet и выбирете пункт меню DataSet Editor. В появившемся окне Вам в принципе только нужно будет выбрать ключи кнопкой "Select primary keys", а потом нажать на "Generate SQL" и скрипты для ModifyInsertDeleteRefresh будут сгенерированы автоматически, в чем и можно убедиться зайдя на вкладку SQL.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 25.04.2007, 16:34 Оценка за ответ: 5 Комментарий оценки: Спасибо за подсказку и ликбез :) О том, что можно воспользоваться "Generate SQL" я знал. Просто хотелось бы заполнять все это в runtime.
Вопрос № 84.161
Уважаемые эксперты, у меня стоит проблема перехода с программирования локальной СУБД на "клиент/серверное" приложение. Пока вопорос стоит в организации соединения с MS SQL из программы. Как я понял, лучше использовать ADO. Приведите пример кода для соединения и порекомендуйте сайт или литературу для изучения.
Отправлен: 25.04.2007, 16:40
Вопрос задал: Zolotarev (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Крылов Александр Владимирович
Здравствуйте, Zolotarev!
Вам необходимо настроить ADOConnection
Это можно сделать в самой IDE либо при выполнении программы. Настройки ADOConnection заключуется в прописывании значений драйвера, источника, логина, пароля (опциально) и некоторых других данных.
В runtime для MS SQL я создаю ADO.Connection следующим кодом:
EditLogin.Text - имя пользователя
EditPassword.Text - пароль
EditDBName.Text - имя базы данных
EditServerName.Text - имя сервера
Всё это можно прописать и в designtime
Ответ отправил: Крылов Александр Владимирович (статус: 3-ий класс)
Ответ отправлен: 25.04.2007, 16:56 Оценка за ответ: 4 Комментарий оценки: Хотелось бы получить ссылку на материалы по этой теме. Вопросов возникает множество и большенство из них уже рассматривалось где-то. Я ранее работал с БД только локально, поэтому интересует все по этой теме.