Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не выполняется insert в ХП, вызываемой из клиентского приложения [D6, IB6.x]


Страницы:   1 2

Calm ©   (2002-12-17 12:55:00) 

Имеется хранимая процедура, которая выполняется два основных действия:
1. Добавляет в таблицу запись
2. Делает выборку.
В IBExpert процедура работает отлично.

В клиенстком приложении беру компонент MyDS:TpFIBDataSet и в SQLs.SelectSQL пишу очень простой запросец:
select * from MyStoredProc(:prm1, :prm2);
Компонент говорит, что SQL правильный ("SQL is correct")
Естественно, у компонента установлены свойства DataBase и DefaultTransaction.

Что выполнить требующеся действие делаю так:
MyDS.close;
MyDS.ParamByName("prm1").As..// присваиваю параметрам значения
Значения присваиваются вполне правильные, т.к. эти же параметры отлично проходят, если вызвать ХП из IBExpert"а.
Далее
MyDS.Open;

Процедура возвращает выборку. Причем правильно. Значение генератора ID таблицы, в которую добавляется запись инкрементируется (правильно!). Но... запись в таблицу не добавляется. Почему?

Заранее спасибо за советы

Использую FIBPlus 4.7


Alexandr   (2002-12-18 10:14:00) [1]

некогда


Prooksius   (2002-12-18 10:07:00) [2]

Alexandr, попробуй заливку данных с retaining на дятле
Все-таки интересны результаты.


Alexandr   (2002-12-18 10:00:00) [3]

в FIBPlus с этим 0.00 проблем.
Там разные транзакции на select и редактирование.


Johnmen   (2002-12-18 09:58:00) [4]

Неубедительно... Доводов не было...
И еще - интересно, как обошелся без retaining при редактируемом <...>DataSet ?


Alexandr   (2002-12-18 06:50:00) [5]

commit retaining suxxx и я без него всегда обходился.
А вообще-то я не ракламирую, а предлагаю как лучше.


Prooksius   (2002-12-17 15:42:00) [6]

2 Alexandr © (17.12.02 15:21)
Вот ты Yaffil рекламируешь, а ты не пробовал такого (куча insert-ов с CommitRetaining после 100 insert-ов) на дятле?


Alexandr   (2002-12-17 15:21:00) [7]

да все так.
Перестаньте же спорить впустую.
А то уже по второму разу одно и то же...


Johnmen   (2002-12-17 15:19:00) [8]

>Prooksius © (17.12.02 14:59)

Ну что такое ...Retaining ? Просто попытка Commit с сохранением курсоров, открытых в предыдущей тр-ии.
Я вполне допускаю, что реализовано это с глюками. Но, во-первых, я с ними не сталкивался, а, во-вторых, в твоем примере только инсерты, а значит, нужен только Commit.


Prooksius   (2002-12-17 14:59:00) [9]

Johnmen © (17.12.02 14:53)
Делал все, как ты сказал (когда заливал данные из текстового файла)
При ...Retaining тормоза и зависон, при Commit - никакого замедления (даже тенденции к замедлению) после вставки ок. 500 000 записей.
Почему?
Вроде, не должно бы...


Calm   (2002-12-17 14:54:00) [10]

Ok, напугали вы меня, убираю Retainig...


Johnmen   (2002-12-17 14:53:00) [11]

>Alexandr © (17.12.02 14:40)
>Prooksius © (17.12.02 14:44)

Друзья ! Все таки ситуация разная. Если мы занимаемся исключительно инсертами, то, однозначно, COMMIT, причем через каждые несколько сотен. У автора же и SELECT и INSERT (в одной тр-ии). А здесь я не вижу разумных альтернатив COMMITRETAINING.


Prooksius   (2002-12-17 14:47:00) [12]

2 Alexandr © (17.12.02 14:37)
FireBird - та же проблема.


Prooksius   (2002-12-17 14:44:00) [13]

2 Johnmen © (17.12.02 14:36)
На этом форуме такой случай уже был. Ситуация такая же, как описал Calm.
Дело тут точно в Retaining.
Писал как-то на www.ibase.ru Дмитрию Кузменко, он не сказал ничего, ссылаясь на то, что в моем слючае Retaining использовать нет надобности.
Тут видимо, вопрос в частоте выполнения CommitRetaining. Если не часто, прокатывает, если >1 раз в сек. - грабли.
ИМХО, конечно.


Alexandr   (2002-12-17 14:40:00) [14]

нет не другая.
Забудь про retaining
и сон будет крепким, а волосы гладкими и шелковистыми...


Alexandr   (2002-12-17 14:37:00) [15]

ну попробуй как Prooksius © (17.12.02 14:29)
раскопай грабли, они тебя по лбу и стукнут...
Я не помнб точно, правили ли это в Firebird, но на Interbase я даже не надеюсь...
И это не единственный момент, по моему... Там еще и версии копиться будет и прочее.


Johnmen   (2002-12-17 14:36:00) [16]

>Prooksius © (17.12.02 14:29)

Ситуация принципиально другая...


Johnmen   (2002-12-17 14:29:00) [17]

>Alexandr © (17.12.02 14:16)

Благодарил он меня действительно зря, т.к. это есть в хелпе...
А вот насчет <это скрытые грабли!> можно подробнее ?
А то я привык, а ломки все нет :))) Может еще рано ? :)))


Prooksius   (2002-12-17 14:29:00) [18]

2 Alexandr © (17.12.02 14:16)
Согласен.
Как-то пришлось перелить данные из *,txt в *,gdb.
В базе были обычные поля и блоб.
В Query.SQL обычный запрос на insert.
Транзакцию завершал CommitRetaining.
После вставки около 10000 записей - жуткие тормоза все намертво повисало (IB server где-то не освобождал память)
Поменял на Commit + StartTransaction - все заработало.


Alexandr   (2002-12-17 14:16:00) [19]

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


Calm   (2002-12-17 14:06:00) [20]

2 Johnmen © Вот за это спасибо :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо