Глупый вопрос (по работе с IBDataSet)

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
igrok
Сообщения: 9
Зарегистрирован: 13 янв 2006, 16:24

Глупый вопрос (по работе с IBDataSet)

Сообщение igrok » 10 мар 2006, 19:43

Сразу извиняюсь, потому как сам понимаю что вопрос глупый))))
Просто я не могу понять принцип обновления данных когда их загружаешь не через IBTable а через SQL, к примеру IBDataSet.
Раньше когда работал с базами данных делал так: есть таблица, загружаю её через Тэйбл, подрубаю к ДатаСоурсу к примеру DBEdit и могу править через этот Эдит какое либо поле.
Сейчас я пытаюсь сделать так: есть три таблицы, я их загружаю через IBDataSet (здоровым запросом), и пытаюсь изменить потом через ДБЭдит какое либо свойство, но оно недоступно для изменения. Насколько я понял нужно добавить запрос в свойство ModifySQL, но я не понимаю, как можно обновить сразу три таблицы с помощью этого свойства. Если кому несложно пожалуйсто объясните принцип.... :(

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 10 мар 2006, 19:59

Либо пишешь SP, выполняющую модификацию всех трёх на базе входных параметров и в ModifySQL вставляешь её вызов с засовыванием полей в параметры , либо в ModifySQL прописываешь модификацию одной из таблиц, а на событии BeforePost или AfterPost выполняешь изменения в двух других через отдельные TIBSQL или TIBQuery. А ещё советую почитать http://www.ibase.ru/devinfo/ibx.htm

igrok
Сообщения: 9
Зарегистрирован: 13 янв 2006, 16:24

Сообщение igrok » 10 мар 2006, 20:15

Спасибо за ответ :D ,
честно говоря какой то изврат получается.... :shock:
ну чтож думаю проще будет через отдельные запросы сделать.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 16 мар 2006, 10:12

Вообще... не все запросы SQL дадут возможность редактирования данных. Тое есть, что бы запрос был "живым" нужно придерживаться определенных ограничений... Например, нельзя использовать HAVING, GROUP BY и т.д.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 мар 2006, 10:52

никаких "живых" запросов не бывает, совсем. есть select, и есть ins/del/upd. См. www.ibase.ru/devinfo/ibx.htm, там описание свойств IBDataSet, и как с ним работать, а также ссылки на примеры.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 16 мар 2006, 11:01

kdv писал(а):никаких "живых" запросов не бывает, совсем. есть select, и есть ins/del/upd. См. www.ibase.ru/devinfo/ibx.htm, там описание свойств IBDataSet, и как с ним работать, а также ссылки на примеры.
При использовании ins/del/upd - Согласен. Хотя, и не гожусь для спора с Вами. Вот щас тоже еще вопросик напишу.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 мар 2006, 17:04

не надо спорить. Все "живые" запросы получаются следующим образом - некая фигня в компонентах или драйвере анализирует передаваемый select, и сама конструирует запросы insert/update/delete. Никаким иным образом записи удалять, вставлять или менять в SQL серверах невозможно, принципиально.
Как это делает BDE - см.
www.ibase.ru/devinfo/bde.htm
Как это делает ClientDataSet + провайдер - см. в доке по Delphi.
Но механика везде одинакова. Отсюда и ограничения на всякие order by, having и т.п. - локальный парсер этих движков не в состоянии сконструировать запросы на обновление в таких случаях.

Идеалом "живых" запросов и является IBDataSet и аналогичные - где ты сам прописываешь или автоматически генерируешь запросы для Insert, update и delete (и refresh). Более того, вручную прописываемые в этих свойствах IBDataSet запросы могут быть никак не связаны между собой - можно читать select-ом, удалять процедурой, а вставлять данные вообще в другую таблицу.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 16 мар 2006, 17:19

Спасибо за разъяснение... я и не знал как.
Выходит, что для работы IB-подобными серверами лучше всего использовать IB-компоненты? А зачем тогда стока всяких фичей напридумано? (философский вопрос)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 мар 2006, 17:29

что для работы IB-подобными серверами лучше всего использовать IB-компоненты?
по секрету скажу, что вот уже как 5-7 лет примерно, люди все больше и больше используют компоненты прямого доступа К ЛЮБОМУ СЕРВЕРУ.
И в данном вопросе, кстати, сами компоненты не имеют значения.

BDE - TQuery + TUpdateSQL
ее аналог в IBX - IBQuery + IBUpdateSQL
что также очень похоже на IBDataSet.
А зачем тогда стока всяких фичей напридумано? (философский вопрос)
каких фичей? ODBC, OLE DB, .Net и т.п.???

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 16 мар 2006, 18:03

да хоть и эти... (хотя ответ уже и так понятен... это была вспышка возмущения по поводу "невозможно объять необъятное")

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 мар 2006, 19:38

тут нет ничего необъятного. см.
http://www.ibase.ru/devinfo/choosecomp.htm

все более-менее похоже. Да, количество всяких интерфейсов для доступа к БД велико. А что делать? Главное, что к этим интерфейсам есть драйверы и компоненты для IB/FB. И их число существенно превышает число драйверов и компонент для любого другого сервера БД.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 17 мар 2006, 11:47

kdv писал(а): есть драйверы и компоненты для IB/FB. И их число существенно превышает число драйверов и компонент для любого другого сервера БД.
Это неимоверно радует. Отличненько... будем осваивать.
Спасибо.

igrok
Сообщения: 9
Зарегистрирован: 13 янв 2006, 16:24

Сообщение igrok » 18 мар 2006, 21:52

а я всё-таки сделал немного по-другому: связал три тэйбла и данные стали доступны для редактирования, в принципе в этом проблема и была...

Ответить