Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вылет при изменении данных в гриде (Eh) [FireBird 2.5]


Дмитрий ©   (2011-07-15 20:27:00) 

Использую связку TIBXDataDriverEh -> TMemTableEh -> TDataSource -> TDBGridEh. БД - Firebird 2.5. Делфи - 2010, Ehlib 5.2
Выполняю SELECT запрос с нескольких таблиц (JOIN):

SELECT m.mash_name,sup.supp_name,det.det_name,r.det_code,
det.det_unit,st.cost,st.in_order,st.in_storage,st.notes,
r.date_add FROM Storage st
JOIN Relation r ON st.rel_id = r.rel_id
JOIN Detail det ON r.det_id = det.det_id
JOIN Supplier sup ON r.supp_id = sup.supp_id
JOIN Mashine m ON r.mas_id = m.mas_id

На Грид данные выводит нормально, но при изменении их вываливает EIBClientError "empty SQL statement" . Как исправить?
Нужно что-либо писать в UpdateSQL или ModifySQL? Можете пример написать пожалуйста?


Loginov Dmitry   (2011-07-19 22:06:00) [1]


> Ты раз уж мою статью привел, прочитал бы ее внимательно.


Мне ее гугл привел, я особо не вчитывался, так что не обижайся. Могу оправдаться тем, что мне оно не сильно принципиально, но хотелось все же приблизиться к истине :)
Надеюсь, что у фибов таких проблем с execute block нет (опять же проверять - лень).


PEAKTOP   (2011-07-19 15:22:00) [2]

> http://peaktopsoft.blogspot.com/2009/03/firebird-2-01.html
> Однако у меня на IBX-компонентах упорно выдает "Unknown SQL Data type (0)". ParamCheck=False - не помогает.
> Ну хоть у фибов проблем с execute block нет.


Ты раз уж мою статью привел, прочитал бы ее внимательно. Даже там написано, что передача параметров в динамическую хранимую процедуру (EXECUTE BLOCK) - невозможна.

У меня самописная библиотека доступа к Firebird на основе IBX, и когда я столкнулся с аналогичной проблемой, то я просто "выпилил" из нее передачу параметров в запросы через двоеточие, оставив исключительно вопросительный знак (в оригинале IBX можно и так, и так, и даже одновременно обоими способами вперемежку).

Но править там много нужно, ибо криворукий дядя Джефф Оверкеш напихал запросов по всем unit-ам библиотеки в самых разнообразных местах и везде - передачи параметров через двоеточие.
Кстати там еще и пару грабелек заботливо разложено в IBSQL.PAS.


Loginov Dmitry   (2011-07-18 23:18:00) [3]

Вроде execute block должен работать в UpdateSQL, судя по
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=300731&msg=2738067
http://peaktopsoft.blogspot.com/2009/03/firebird-2-01.html
Однако у меня на IBX-компонентах упорно выдает "Unknown SQL Data type (0)". ParamCheck=False - не помогает.
Ну хоть у фибов проблем с execute block нет.


Loginov Dmitry   (2011-07-18 22:16:00) [4]


> Если 2,5, то есть execute block 100%. и ни ХП, ни вьюха
> - нахрен не нужна


В execute block параметры фиг передашь, поэтому не ясно, можно ли его каким-то образом приспособить для UpdateSQL/InsertSQL.
Я в свое время долго бился с этой проблемой, но в конечном итоге плюнул и решил составлять SQL-запрос динамически.


Виталий Панасенко   (2011-07-18 14:11:00) [5]

а то, что пустое выражение... так это пусть автор рулит


Виталий Панасенко   (2011-07-18 14:10:00) [6]

>
> Loginov Dmitry ©   (16.07.11 11:04) [4]


Если 2,5, то есть execute block 100%. и ни ХП, ни вьюха - нахрен не нужна


Loginov Dmitry   (2011-07-16 11:04:00) [7]

UpdateSQL может не прокатить. У автора 5 таблиц. Нужна хранимая процедура или вьюха (насчет редактируемых вьюх - читайте релизноты), способная раскидать данные по таблицам. Либо делать несколько UPDATE / INSERT - запросов, но программировать придется ручками. Скорее всего, в TIBXDataDriverEh (по аналогии с TDataSetProvider) должно быть что-то наподобие OnBeforeUpdateRecord, в котором следует выполнять необходимые SQL-запросы.


SQLEXPRESS   (2011-07-16 00:54:00) [8]

ну и надо писать в UpdateSQL соответствующий запрос, для
> изменение значения на вводимые и сохранение в базе вместо
> текущего значения


Дмитрий   (2011-07-15 23:30:00) [9]

изменение значения на вводимые и сохранение в базе вместо текущего значения


Loginov Dmitry   (2011-07-15 22:16:00) [10]


> Нужно что-либо писать в UpdateSQL или ModifySQL?


Какой эффект Вы планируете получить от редактирования данных в гриде?


Наверх

Титульная страница Поиск, карта сайта Написать письмо