Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 317
от 30.04.2007, 23:35

Администратор:Gh0stik
В рассылке:Подписчиков: 316, Экспертов: 43
В номере:Вопросов: 3, Ответов: 3


Вопрос № 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) в клиентской программе нужно запустить его ожидание.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 25.04.2007, 14:08


Вопрос № 84.156
Добрый день, уважаемые Эксперты!
Ситуация: компонент 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 ?

Приложение:

Отправлен: 25.04.2007, 15:49
Вопрос задал: Дмитрий Александрович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: 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 следующим кодом:

constr:='Provider=SQLOLEDB.1;Persist Security Info=False;';
constr:=constr+'User ID='+EditLogin.Text;
constr:=constr+';Password='+EditPassword.Text;
constr:=constr+';Initial Catalog='+EditDBName.Text;
constr:=constr+';Data Source='+EditServerName.Text;
Connection.ConnectionString:=constr;

EditLogin.Text - имя пользователя
EditPassword.Text - пароль
EditDBName.Text - имя базы данных
EditServerName.Text - имя сервера

Всё это можно прописать и в designtime
Ответ отправил: Крылов Александр Владимирович (статус: 3-ий класс)
Ответ отправлен: 25.04.2007, 16:56
Оценка за ответ: 4
Комментарий оценки:
Хотелось бы получить ссылку на материалы по этой теме. Вопросов возникает множество и большенство из них уже рассматривалось где-то. Я ранее работал с БД только локально, поэтому интересует все по этой теме.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.51 (beta) от 27.04.2007
Яндекс Rambler's Top100

В избранное