Текущий архив: 2006.09.24;
Скачать: CL | DM;
ВнизНесколько UPDATE ов одним запросом. Возможно ли? Найти похожие ветки
← →
StriderMan © (2006-07-24 15:20) [0]Использую firebird + IBX(компоненты).
конкретно интересует можно ли провернуть такое при помощи IBUpdateSQL
← →
ORMADA © (2006-07-24 15:21) [1]мне кажется что всё что поддерживает ansi-sql на это способно
обычно разделитель команд ;
← →
Johnmen © (2006-07-24 15:21) [2]Только с помощью TIBScript.
← →
StriderMan © (2006-07-24 15:28) [3]
> ORMADA © (24.07.06 15:21) [1]
> мне кажется что всё что поддерживает ansi-sql на это способно
> обычно разделитель команд ;
";" не помогла.
Вобщем задача такая:
Есть TIBQuery в котором JOIN"ом стыкуются 2 таблицы. Как отредактировать запись в таком DataSet"е? т.е. Update нужно сделать по двум таблицам, желательно через TIBQuery.UpdateObject: TIBUpdateSQL
← →
Sergey13 © (2006-07-24 15:31) [4]2 [3] StriderMan © (24.07.06 15:28)
> Update нужно сделать по двум таблицам
C таким подходом можно поиметь неприятностей по самое немогу.
← →
StriderMan © (2006-07-24 15:39) [5]
> C таким подходом можно поиметь неприятностей по самое немогу
подозреваю...
Так как решить правильно такую задачу?
← →
ORMADA © (2006-07-24 15:44) [6]подозреваем все вместе что неплохо было бы поредактировать всё что хотят сначала в памяти (как придуешь или в кэше если компоненты позволяют или меморитаблу какую заюзаешь) а потом строй скуль на изменение и сам исполняй как уже сказали через TIBScript
тока не забудь в рамках 1 транзанкции это делать!
← →
Sergey13 © (2006-07-24 15:49) [7]> [6] ORMADA © (24.07.06 15:44)
> подозреваем все вместе что неплохо было бы поредактировать
> всё что хотят сначала в памяти
Я бы сказал - сначала в голове. 8-)
В принципе, если связь строго 1:1 то вполне можно такое сварганить. Если же 1%Многим - то я бы подумал над последствиями (вплоть до уголовного преследования 8-).
← →
StriderMan © (2006-07-24 16:24) [8]связь 1 к 1.
> подозреваем все вместе что неплохо было бы поредактировать
> всё что хотят сначала в памяти
неплохо бы конечно, но уже есть куча форм для редактирования, которые не хочется менять (они раньше редактировали в пределах 1 таблицы). Хочется просто перецепить на новые DataSet"ы и не париться.
← →
Sergey13 © (2006-07-24 16:33) [9]2 [8] StriderMan © (24.07.06 16:24)
> связь 1 к 1.
> неплохо бы конечно, но уже есть куча форм для редактирования,
> которые не хочется менять (они раньше редактировали в пределах
> 1 таблицы). Хочется просто перецепить на новые DataSet"ы
> и не париться.
Подозреваю, что раньше и была 1 таблица, но решили съэкономить дисковое пространство и разделили на 2. Так?
← →
StriderMan © (2006-07-24 16:47) [10]нет, дисковое пространство ни при чем. просто из одной таблицы сделали две: одну общую для нескольких справочников, и несколько частных, связанных с общей 1 к 1. а редактировать данные нужно в одной форме.
← →
StriderMan © (2006-07-24 17:00) [11]Вобщем решил проблему написанием наследника компонента IBUpdateSQL. Добавил св-во SQLDelimeter, которое позволяет написать в каждом запросе (ModifySQL, InsertSQL и т.д.) несколько запросов через разделитель.
← →
Johnmen © (2006-07-24 17:16) [12]Хм... Тогда уж к TIBDataSet наследника сделал бы...
← →
Desdechado © (2006-07-24 18:04) [13]А что, хранимка для сохранения изменений уже не в моде?
← →
StriderMan © (2006-07-24 18:05) [14]
> Desdechado © (24.07.06 18:04) [13]
думал над этим...
но это для каждой таблицы ХП писать. а их там штук 10.
← →
Desdechado © (2006-07-24 18:31) [15]Это элемент бизнес-логики на сервере, не зависящий от клиента.
← →
stud © (2006-07-24 18:31) [16]StriderMan © (24.07.06 18:05) [14]
но это для каждой таблицы ХП писать. а их там штук 10
это зачем же для каждой??
← →
Desdechado © (2006-07-24 18:36) [17]Нужно ХП не для таблицы, а для бизнес-операции, которая раскидывает данные по таблицам согласно бизнес-правил.
← →
StriderMan © (2006-07-24 18:39) [18]
> это зачем же для каждой??
> а для бизнес-операции
но ведь в каждой таблице свой набор полей, как их одной процедурой передавать.
← →
Desdechado © (2006-07-24 18:43) [19]Если твой датасет (в рамках бизнес-операции) работает с соединением нескольких таблиц, то поля у тебя уже есть в датасете. И в UpdateSQL они попадут. Вот толькотам пропиши не банальный UPDATE ..., а вызов процедуры.
← →
StriderMan © (2006-07-24 18:48) [20]
> толькотам пропиши не банальный UPDATE ..., а вызов процедуры
я так и понял, но повторю, что таких связок существует около 10. т.е.:
Главная таблица с общими параметрами
10 вспомогательных таблиц связанных с главной, у каждой свой набор полей.
10 Датасетов с запросом типа ГЛАВНАЯ JOIN ВСПОМОГАТЕЛЬНАЯ,
Соответственно для редактирования/добавления понадобится 10 хранимых процедур.
← →
Desdechado © (2006-07-24 18:51) [21]При такой взаимосвязи вряд ли рационально редактирование сразу главной и вспомогательной таблиц.
Если есть такое желание, рекомендую пересмотреть концептуальную модель.
← →
StriderMan © (2006-07-24 19:09) [22]
> Если есть такое желание, рекомендую пересмотреть концептуальную
> модель.
Ясно, так и думал :)
Если с [11] будет криво работать, видимо придется пересмотреть.
← →
DiamondShark © (2006-07-24 21:20) [23]
> Соответственно для редактирования/добавления понадобится
> 10 хранимых процедур.
И что в этом страшного?
← →
StriderMan © (2006-07-25 00:04) [24]
> DiamondShark © (24.07.06 21:20) [23]
> > Соответственно для редактирования/добавления понадобится
> > 10 хранимых процедур.
> И что в этом страшного?
да, 10 это еще ничего, но поразмыслив, я решил что их будет как минимум 20! т.е. по 2 процедуры на таблицу: UPDATE и INSERT. Хотя в принципе тоже ничего криминального... те же самые 20 запросов придется писать на клиенте...
Вобщем уже сделано по [11], и работает вполне корректно, хотя согласен, не слишком красиво.
← →
atruhin © (2006-07-25 12:06) [25]Удобно в такой ситуации создать соответствующее кол-во обновляемых представлений. Тогда можно работать как с обычной таблицей.
← →
StriderMan © (2006-07-25 13:44) [26]
> Удобно в такой ситуации создать соответствующее кол-во обновляемых
> представлений
а можно подробнее о представлениях? в двух словах
← →
Danilka © (2006-07-25 14:06) [27][26] StriderMan © (25.07.06 13:44)
Представление это вьюха. create view as ...
и триггера на ней, почти как на таблице, на инсерт, апдейт и делете.
а на клиенте селект из вьюхи, а не из двух таблиц.
← →
StriderMan © (2006-07-25 14:19) [28]
> Danilka © (25.07.06 14:06) [27]
попробую, спасибо
Страницы: 1 вся ветка
Текущий архив: 2006.09.24;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.043 c