IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
igrok
- Сообщения: 9
- Зарегистрирован: 13 янв 2006, 16:24
Сообщение
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
Спасибо за ответ

,
честно говоря какой то изврат получается....
ну чтож думаю проще будет через отдельные запросы сделать.
-
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
а я всё-таки сделал немного по-другому: связал три тэйбла и данные стали доступны для редактирования, в принципе в этом проблема и была...