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

Вниз

Вставка данных с помощью Stored Procedure   Найти похожие ветки 

 
Sergey13 ©   (2007-03-30 11:37) [40]

> [39] Neo Trinitron ©   (30.03.07 11:30)
> но мне ещё надо было заставить эти данные правильно отобразиться
> в гриде, минуя процедуру post.

Не понял я этой фразы.


 
Bless ©   (2007-03-30 11:41) [41]


> ANB ©   (29.03.07 18:22) [23]
>
>
> > Neo Trinitron ©   (29.03.07 18:01) [22]
>
> Бросай ты это дурацкое ADO + MS SQL.
>
> В связке Oracle + Odac дейтасеты ведут себя именно так,
> как тебе надо. И даже рефреш одной записи есть, на случай,
>  если на сервере она поменялась сильно.
>
> :)


В связке MSSQL + SDAC  датасеты ведут себя ничуть не хуже.
И если пробить замену ADO на SDAC не проблема, то будет тебе счастье.
Наверное ;)

Можешь также взять ClientDataset. У него тоже есть OnApplyRecord. И от ADO отказываться не придется. Минус (лично для меня) - я не знаю, как через него обновить одну запись (чтоб из базы, и не весь датасет переоткрывать).

Можешь попробовать MemTableEh из набора EhLib.


>
> Neo Trinitron ©   (29.03.07 16:41) [11]
> И ещё интересно как можно в "стандартный способ реализации
> логики на сервере" вьюху передать параметры, фильтрации
> например. Очень интересно.


Во вьюху никак. А зачем? Если тебе нужно выбрать отфильтрованные записи, то вместо SELECT ... FROM my_table WHERE... пиши SELECT ... FROM my_view WHERE ... делов-то.


 
Neo Trinitron ©   (2007-03-30 11:46) [42]

1. В гриде добавляется запись. Dataset.State=dsInsert;
2. Вносим данные в запись;
3. Переходим на другую запись или постим введённые данные;
4. Поскольку надо чтобы вставку данных сделала ХП, нужно в BeforePost это сделать;
5. Если не поменять тип блокировки у датасета на тот что я писал выше, то после BeforePost выполнится процедура Post которая попытается добавить в базу данных эту запись. Но этого делать то уже не нужно. Произойдёт ошибка. Если в конце BeforePost поставить Abort, то ошибки не произойдёт, но в гриде запись так и останется в режиме редактирования. Cancel вообще сотрёт из грида эту запись, хотя в базе она уже есть.


 
Jan   (2007-03-30 11:46) [43]


> (это уже из разряда секретов фирмы)

сказал бы проще - лень или не надо придумывать что сделал...


> Вот столкнулся с ADO, а там немного по-другому, как выяснилось.

тебе б еще и на королевстве почитать про АДО - цены б тебе не было


> минуя процедуру post. Тип блокировки датасета решил проблему.
>  Мелочь такая, а такие вещи делает.

ага еще она наверное данные возвращает, которые делаются с данными на стороне сервера...


 
Neo Trinitron ©   (2007-03-30 11:52) [44]

>Во вьюху никак. А зачем? Если тебе нужно выбрать отфильтрованные записи, то вместо SELECT ... FROM my_table WHERE... пиши SELECT ... FROM my_view WHERE ... делов-то.

Так то оно так, но это достаточно простой случай. В моём случае логика будет посложнее обычных параметров фильтрации и одного селекта. В процедуре выполняется ещё масса кода, кроме селекта и ход выполнения этих веток зависит от параметров. Вот я и говорю что функциональность вьюхи мала для многих задач. А мне утверждают что это "стандарт" и хоть ты тресни.

По поводу SDAC. Не глючные компоненты? Платные?


 
Neo Trinitron ©   (2007-03-30 11:58) [45]

>сказал бы проще - лень или не надо придумывать что сделал...

Опять по себе судишь? У кого лень, а у кого и увольнение за разглашение без возможности устроиться в нормальную фирму в моём городе. И потом, что тебе так здалась эта хранимая процедура? Что она меняет? Какое отношение она имеет к вопросу? Связи не вижу.

>тебе б еще и на королевстве почитать про АДО - цены б тебе не было

Ты хочешь сказать что здесь все ламеры, а там нет? Не думаешь что кто-то может обидеться?

>ага еще она наверное данные возвращает, которые делаются с данными на стороне сервера...

ага, и ещё она делает всё на свете, что надо и что не надо, для особо одарённых. А для не особо одарённых (это я о себе) данные может возвращать та же самая хранимая процедура.


 
Jan   (2007-03-30 12:08) [46]


> Так то оно так, но это достаточно простой случай. В моём
> случае логика будет посложнее обычных параметров фильтрации
> и одного селекта. В процедуре выполняется ещё масса кода,
>  кроме селекта и ход выполнения этих веток зависит от параметров.
>  

ты не думал что что-то со структурой базы не то?


> По поводу SDAC. Не глючные компоненты? Платные?

тебе не подойдут. там хелп читать надо.


 
Neo Trinitron ©   (2007-03-30 12:18) [47]

jan, иди играйся своими игрушками, тут взрослые дяди разговаривают :P Вот когда дорастёшь до уровня базы большой корпорации, тогда и потолкуем. Прощай.


 
Bless ©   (2007-03-30 12:25) [48]


> Neo Trinitron ©   (30.03.07 11:52) [44]
> По поводу SDAC. Не глючные компоненты? Платные?
>


Платные. Плотно я с ними не работал, поэтому по поводу глючности судить с опыта не могу.
Но компоненты определенно серьезные, той же конторы, что и нахваливаемые в [23] ODAC для оракла.
Поищи мнения в Инете. Обший характер отзывов: компоненты хороши.


 
Bless ©   (2007-03-30 12:34) [49]


> Но компоненты определенно серьезные, той же конторы, что
> и нахваливаемые в [23] ODAC для оракла.


Добавлю еще(на правах имхи, сформированной от беглого знакомства):
Код у SDAC и ODAC тоже во многом общий.
Насколько я могу судить, грубо говоря, у них самописный мемори-датасет, одинаковый и для SDAC и для ODAC, поверх механизма доступа к базе данных, который у каждого свой.


 
Jan   (2007-03-30 12:39) [50]


> Вот когда дорастёшь до уровня базы большой корпорации, тогда
> и потолкуем

не завидую я твоей корморации...


 
Jan   (2007-03-30 17:22) [51]

2 Neo Trinitron ©

1. Вот интересно, ты говоришь что логика на сервере, а кто знает что после поста надо запускать такую-то и такую-то ХП? Только клиент. Так где логика реализована?
2. Вот ты говоришь что параметры нельзя передать во вьюху? А кто сказал что нельзя создать виртуальные колонки? Заполняй их и будут тебе параметры.
3. Триггеры говоришь в три этажа? а кто запрещает запустить в них твои трех-этажные ХП?

ЗЫ Закончи высшее свое заведение, поработай лет так 5 хотябы на серезных проектах, закончи хотя-бы один, да на боевых серверах а потом указывай, что делать...
ИМХО все. Бо наболело...


 
MsGuns ©   (2007-04-01 21:16) [52]

Очень тяжело (а, главное - нужно ли ?) при редактировании в гриде заменять функции датасета - без изгаляций не получится. Кроме того, нет никакой гарантии, что добавленная в грид запись реально добавилась в БД.
Непонятно также, как при таком "точечном" редактировании пользователь увидит все добавленные записи (в т.ч. другими) без перечитки всего датасета.
ИМХО, сама проблема, вероятно, от неправильной концепции проектирования интерфейса обмена с сервером. Если имеются в виду потоковые изменения неперекающихся данных (что-то типа опердня), то лучше клиентского датасета (который тут, кстати, советовали очень к месту) вряд ли можно найти.
Если изменения записи требуют комплексных операций на всей базе, то тут самое место триггерам, из которых, собственно, вызываются необходимые элементы бизнес-логики.

Кстати, еще вопрос: как автор сабжа при такой технологии сбирается управлять транзакциями, ведь они в датасете как бы "свои", а в хранимке "свои" ?


 
Jan1   (2007-04-02 11:33) [53]

Похоже автор поста самодовольный студент, который вилез впервые в инет...


 
Neo Trinitron ©   (2007-04-02 11:39) [54]

>нет никакой гарантии, что добавленная в грид запись реально добавилась в БД

А разве ошибку от ХП нельзя обработать на клиенте? Я обрабатываю легко.

>Непонятно также, как при таком "точечном" редактировании пользователь увидит все добавленные записи (в т.ч. другими) без перечитки всего датасета.

Никто не запрещает делать перечитку датасета, если это нужно :) Даже если стандартно постить, данные сами не перечитываются. Если нужно перечитать, то пожалуйста, никто же не запрещает! И что значит "точечное"? Насколько я знаю в гриде после редактирования или добавления записи постится одна запись, не более.

>Кстати, еще вопрос: как автор сабжа при такой технологии сбирается управлять транзакциями, ведь они в датасете как бы "свои", а в хранимке "свои" ?

Управление транзакциями на клиенте не использую, только на сервере. Предполагается что база данных будет работать с клиентом написанном не только на дельфи, в общем, клиент здесь дело десятое.

По поводу триггеров. Не юзаю. Ибо добавляю записи не в конкретную таблицу, а в документ. Документ состоит из нескольких таблиц. Пополняться эти таблицы могут в нескольких случаях и в разных вариантах (с нормализацией всё в порядке). На какую таблицу вешать триггер? Да и зачем триггер когда можно всю логику увязать в одной ХП. Хочу я добавить документ. Я могу зайти в Query Analyzer, вызвать соответствующую ХП, указать нужные параметры и если у меня есть права, выполнить эту ХП. Всё. Документ добавлен, проблем не вижу никаких. Иначе документ нельзя добавить - на редактирование таблиц прав нет. Всё через ХП, чем плохо? Вся система учёта корпорации насчитывающей уже более 200-т дочерних магазинов работает уже более 5-ти лет так и ничего, глюков не наблюдается. База уже более 200Гб и не загинается. Поэтому

>ИМХО, сама проблема, вероятно, от неправильной концепции проектирования интерфейса обмена с сервером

невероятное утверждение.


 
PETR   (2007-04-02 11:54) [55]

Наверное Neo Trinitron имел ввиду Б , что когда использует ХП , не обновляется GRID , т.е. запрос , т.к. не при использовании ХП нет метода Post ,  Refresh . Мне приходилось обновлять запрос .


 
Neo Trinitron ©   (2007-04-02 12:00) [56]

PETR, обновить запрос часто занимает много времени, если база данных немалая. Разве стОит в таком случае обновлять весь набор данных для того чтобы отобразить одну только что добавленную запись? Да ещё небойсь и искать её потом надо для того чтобы установить на неё курсор. Вышеперечисленные недостатки заставили меня отказаться от этой затеи и найти тот вариант который я в итоге нашёл.


 
sniknik ©   (2007-04-02 12:16) [57]

зачем обновлять "запрос", если надо обновить 1 запись? что времени много занять ну никак не может.
советовать, объяснять, не дай бог учить "всезнающегононепольующегося..." не смею, просто скромно интересуюсь зачем? что за причина побуждает на это?


 
Neo Trinitron ©   (2007-04-02 12:34) [58]

sniknik, а зачем мне нужно обновлять запись которая и так уже есть в гриде? Если произойдёт ошибка, о ней ругнётся ХП, если ошибок не будет, то обновлённая запись будет выглядеть идентично с уже имеющейся. Тогда зачем её надо обновлять?

ЗЫ: Меня вообще не интересовал вопрос обновления данных, это другие товарищи про это толк вели. В общем, без прочтения трёх страниц темы трудно делать правильные выводы о дискуссии.


 
Jan1   (2007-04-02 14:18) [59]


> запись будет выглядеть идентично с уже имеющейся. Тогда
> зачем её надо обновлять?

т.е. логика работы с данными на клиенте у тебя такая же как и на сервере? и? к чему пришли? ты дублируешь логику в двух местах! или одно из двух - тебе ХП лишь бы було или прийдет время и ты откажешься от них...


 
NKT   (2007-04-02 14:22) [60]

Попробуй trigger  -  условие -> после обновления , нормально работает с ХП .


 
MsGuns ©   (2007-04-02 23:02) [61]

>Neo Trinitron ©   (02.04.07 11:39) [54]
>А разве ошибку от ХП нельзя обработать на клиенте? Я обрабатываю легко.

Можно поинтересоваться КАК, тем более что попытка откорректить несуществующую запись (которую, например, секунду назад удалили) ни к какой ошибке не приведет ?

>Насколько я знаю в гриде после редактирования или добавления записи постится одна запись, не более.

Плохо знаете. Есть кэширование изменений например.

>Управление транзакциями на клиенте не использую, только на сервере.

Неужели ? Если у Вас нет явного Begin/Commit/Rollback Trans, это не значит, что его нет вообще ;)

>Предполагается что база данных будет работать с клиентом написанном не только на дельфи, в общем, клиент здесь дело десятое.

Что такое "клиент-дело десятое" и каким боком к этой доктрине приходится собственно Дельфи ?

>Neo Trinitron ©   (02.04.07 12:34) [58]
>sniknik, а зачем мне нужно обновлять запись которая и так уже есть в гриде?

Заблуждение

>Если произойдёт ошибка, о ней ругнётся ХП, если ошибок не будет, то обновлённая запись будет выглядеть идентично с уже имеющейся. Тогда зачем её надо обновлять?

Заблуждение еще одно

Спорить с Вами, вероятно, глупо,- Вы не просто не понимаете принцип взаимодействия сервера с "десятым" клиентом (равно как и наоборот), но еще весьма агрессивно пытаетесь тут поучать всех. Непонятно только с какой целью Вы тут появились с весьма мутным сабжем - типа себя показать ?

На сем откланиваюсь, примите и проч.


 
Neo Trinitron ©   (2007-04-03 10:59) [62]

>Можно поинтересоваться КАК, тем более что попытка откорректить несуществующую запись (которую, например, секунду назад удалили) ни к какой ошибке не приведет ?

...
INSERT INTO TAB1
VALUES(@v1,@v2,@v3,@v4)

SELECT
   @ERROR = @@ERROR,
   @RC = @@ROWCOUNT

IF @RC=0 OR @ERROR<>0
.....
RAISEERROR(...)
.....

>Плохо знаете. Есть кэширование изменений например.

Не пользую, не обессуттьте, я в основном на сервере пишу, клиент это скорее подработка. Могу всего (ненужного мне) не знать. Вы же тоже не всё знаете.

>Неужели ? Если у Вас нет явного Begin/Commit/Rollback Trans, это не значит, что его нет вообще ;)

Ну и что что есть? Это ничего не меняет в этой методологии. Одна ХП выполняется в рамках одной транзакции и мне всё равно что там на клиенте. В самой же ХП есть управление транзакциями.

>Заблуждение

Приведите контрпример пожалуйста.

>весьма агрессивно пытаетесь тут поучать всех. Непонятно только с какой целью Вы тут появились с весьма мутным сабжем - типа себя показать ?

Как в зеркало смотрите :))) Напыщенные, гиперумные, гордые. Я и сам жалею что сюда пришёл. Пришёл за помощью, а получил кал в лицо. Ни на одном ресурсе таких заумных и шибкограмотных возомнивших товарищей я не встречал. Это однозначно не мой ресурс. Жалею что сюда зашёл, лучше бы я где-нить по знакомым пробил инфу (кстати, они мне и подсказали как надо делать).

>Вы не просто не понимаете принцип взаимодействия сервера с "десятым" клиентом (равно как и наоборот), но еще весьма агрессивно пытаетесь тут поучать всех. Непонятно только с какой целью Вы тут появились с весьма мутным сабжем - типа себя показать ?

Оскорбить меня не получится, милейший. Я не гордый и не возомнивший. Я написал много приложений и в вашу гипотезу не поверю никак, зря стараетесь. Поучать агрессивно меня пытались здесь, причём довольно агрессивным и оскорбительным тоном. И это скорее такие как эти товарищи пытаются себя показать, мне это уже лет 10 как нафик не нужно. На вопросы ламерские с бережным терпением отвечают, а как не знакомая тема встретилась, так сразу переиначить всё надо бо ответа не знаем. Ещё и натупить нужно, типа сам дурак. В общем, не надо никаких контрпримеров, ничего не надо от вас. Злые вы, ухожу я от вас. :) Тем более что ответ я уже получил ещё на той неделе. Сейчас я вижу какие-то попытки натупить меня и метнуть лишний раз грязью. Спасибо товарищам пытавшимся помочь. Остальным... Почаще смотреться в зеркало.


 
sniknik ©   (2007-04-03 11:44) [63]

>> Плохо знаете. Есть кэширование изменений например.
> Не пользую, не обессуттьте
ранее
> LockType = ltBatchOptimistic
это и есть кэширование изменений.

...  ну и т.д.

> так сразу переиначить всё надо бо ответа не знаем.
не переиначить, а попытаться вытянуть зачем извраты, понять смысл  (помогать бездумно, не понимая откуда что взялось сдесь както не принято... медвежья услуга получается).
я например до сих пор так и не понял, зачем менять вне грида то что по уверениям совпадает с табличным(/записываемым)... а если не совпадает то почему стандартный рефреш с сервера добавленной записи не подходит. не понял не потому что "туго доходит" а потому что были и те и другие взаимоисключающие уверения (вскользь, ничего не объясняя но были. а если бы было четкое описание ситуации, без лирики, собственного "всезнайства" и "наездов/обидок" на отвечающих,  думаю и разговор был бы другой).

> Злые вы, ухожу я от вас. :)
какому богу молиться, за сию радостную весть? ;о)

p.s. явный оффтопик пошол, толи закрыть толи в потрепаться перенести... ???


 
Johnmen ©   (2007-04-03 21:35) [64]


> Злые вы, ухожу я от вас. :)

На кого ж ты нас покинул, Дима-сан?
Вернись! Мы всё простим!


 
Кщд ©   (2007-04-04 09:25) [65]


> Neo Trinitron ©   (30.03.07 12:18) [47]
>
> jan, иди играйся своими игрушками, тут взрослые дяди разговаривают
> :P Вот когда дорастёшь до уровня базы большой корпорации,
>  тогда и потолкуем. Прощай.

офф - любопытства ради: можно узнать о какой корпорации идет речь?
или это тоже сверхвоенный секрет?


 
Jan1   (2007-04-04 10:09) [66]

он ушел. но обещал вернуться :)


 
Кщд ©   (2007-04-04 11:40) [67]


> Jan1   (04.04.07 10:09) [66]
>
> он ушел. но обещал вернуться :)

ну, пока высоколобые умники в поте лица отрабатывают свои миллионные гонорары на разработке "баз для больших корпораций", всем остальным, думаю, можно расслабиться и пойти поиграть со своими игрушками



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.007 c
11-1155488079
rainstuff
2006-08-13 20:54
2007.07.01
Помогите с реестром!


3-1175756389
vl
2007-04-05 10:59
2007.07.01
Тригеры


2-1181040517
Lavrenty
2007-06-05 14:48
2007.07.01
Stack overflow


1-1178205438
Ламонов Олег
2007-05-03 19:17
2007.07.01
ListView


2-1181491812
{RASkov}
2007-06-10 20:10
2007.07.01
Не полное сравнение данных





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский