Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.032 c
2-1157308619
Juri
2006-09-03 22:36
2006.09.24
Что делать если Windows 2000 professional не понимает приложение?


4-1147948198
serguar
2006-05-18 14:29
2006.09.24
как изменить свойства объектов на форме VFP приложения


9-1134746549
злобная танька
2005-12-16 18:22
2006.09.24
как сделать стеныы


4-1148375787
Stanislav
2006-05-23 13:16
2006.09.24
Запуск приложения от имени Администратора


1-1155547369
DelphiLexx
2006-08-14 13:22
2006.09.24
Сменить вид курсора контрола в его MouseDown е