Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Несколько 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
2-1157365340
Sherhan
2006-09-04 14:22
2006.09.24
Слежение за памятью видео карты


2-1157620743
fly_mer
2006-09-07 13:19
2006.09.24
Тип TRecord и его копирование...


2-1157548368
svt
2006-09-06 17:12
2006.09.24
Как можно в 20 компонентах edit обнулить text?


3-1153319574
barakuda
2006-07-19 18:32
2006.09.24
как ускорить процедуру


5-1139839358
Святослав
2006-02-13 17:02
2006.09.24
Как запустить процедуру после установки Parent?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский