Конференция "Базы" » Вылет при изменении данных в гриде (Eh) [FireBird 2.5]
 
  • Дмитрий (15.07.11 20:27) [0]
    Использую связку 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 © (15.07.11 22:16) [1]

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


    Какой эффект Вы планируете получить от редактирования данных в гриде?
  • Дмитрий (15.07.11 23:30) [2]
    изменение значения на вводимые и сохранение в базе вместо текущего значения
  • SQLEXPRESS (16.07.11 00:54) [3]
    ну и надо писать в UpdateSQL соответствующий запрос, для
    > изменение значения на вводимые и сохранение в базе вместо
    > текущего значения
  • Loginov Dmitry © (16.07.11 11:04) [4]
    UpdateSQL может не прокатить. У автора 5 таблиц. Нужна хранимая процедура или вьюха (насчет редактируемых вьюх - читайте релизноты), способная раскидать данные по таблицам. Либо делать несколько UPDATE / INSERT - запросов, но программировать придется ручками. Скорее всего, в TIBXDataDriverEh (по аналогии с TDataSetProvider) должно быть что-то наподобие OnBeforeUpdateRecord, в котором следует выполнять необходимые SQL-запросы.
  • Виталий Панасенко (18.07.11 14:10) [5]
    >
    > Loginov Dmitry ©   (16.07.11 11:04) [4]


    Если 2,5, то есть execute block 100%. и ни ХП, ни вьюха - нахрен не нужна
  • Виталий Панасенко (18.07.11 14:11) [6]
    а то, что пустое выражение... так это пусть автор рулит
  • Loginov Dmitry © (18.07.11 22:16) [7]

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


    В execute block параметры фиг передашь, поэтому не ясно, можно ли его каким-то образом приспособить для UpdateSQL/InsertSQL.
    Я в свое время долго бился с этой проблемой, но в конечном итоге плюнул и решил составлять SQL-запрос динамически.
  • Loginov Dmitry © (18.07.11 23:18) [8]
    Вроде 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 нет.
  • PEAKTOP © (19.07.11 15:22) [9]
    > 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 © (19.07.11 22:06) [10]

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


    Мне ее гугл привел, я особо не вчитывался, так что не обижайся. Могу оправдаться тем, что мне оно не сильно принципиально, но хотелось все же приблизиться к истине :)
    Надеюсь, что у фибов таких проблем с execute block нет (опять же проверять - лень).
 
Конференция "Базы" » Вылет при изменении данных в гриде (Eh) [FireBird 2.5]
Есть новые Нет новых   [134431   +11][b:0][p:0.001]