-
Использую связку 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? Можете пример написать пожалуйста?
-
> Нужно что-либо писать в UpdateSQL или ModifySQL?
Какой эффект Вы планируете получить от редактирования данных в гриде?
-
изменение значения на вводимые и сохранение в базе вместо текущего значения
-
ну и надо писать в UpdateSQL соответствующий запрос, для > изменение значения на вводимые и сохранение в базе вместо > текущего значения
-
UpdateSQL может не прокатить. У автора 5 таблиц. Нужна хранимая процедура или вьюха (насчет редактируемых вьюх - читайте релизноты), способная раскидать данные по таблицам. Либо делать несколько UPDATE / INSERT - запросов, но программировать придется ручками. Скорее всего, в TIBXDataDriverEh (по аналогии с TDataSetProvider) должно быть что-то наподобие OnBeforeUpdateRecord, в котором следует выполнять необходимые SQL-запросы.
-
> > Loginov Dmitry © (16.07.11 11:04) [4]
Если 2,5, то есть execute block 100%. и ни ХП, ни вьюха - нахрен не нужна
-
а то, что пустое выражение... так это пусть автор рулит
-
> Если 2,5, то есть execute block 100%. и ни ХП, ни вьюха > - нахрен не нужна
В execute block параметры фиг передашь, поэтому не ясно, можно ли его каким-то образом приспособить для UpdateSQL/InsertSQL. Я в свое время долго бился с этой проблемой, но в конечном итоге плюнул и решил составлять SQL-запрос динамически.
-
-
> 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.
-
> Ты раз уж мою статью привел, прочитал бы ее внимательно.
Мне ее гугл привел, я особо не вчитывался, так что не обижайся. Могу оправдаться тем, что мне оно не сильно принципиально, но хотелось все же приблизиться к истине :) Надеюсь, что у фибов таких проблем с execute block нет (опять же проверять - лень).
|