Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / непонятки с выполнением ХП / 17 сообщений из 17, страница 1 из 1
15.12.2003, 14:16
    #32352708
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Люди, ситуация такая:

есть таблица, в нее заносятся данные, после сохранения в той же транзакции вызывается ХП, которая для новой записи делает некоторые расчеты, которые пишутся в таблицу. Все работает в одной транзакции. Так вот изменения, вносимые с помощью ХП не видны. Если же выйти из программы и запустить ее заново, и перейти в режим редактирования записи, то после сохранения (опять производится вызов ХП, эти изменения видны). Я уже полдня мучаюсь, ничего не понимаю.
...
Рейтинг: 0 / 0
15.12.2003, 14:33
    #32352728
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
А невидны чем? Просто допустим если ты открыл IBQuery или IBTable которые работают с этой твоей таблицей, потом запусти процедуру, и после работы процедуры изменения невидны с помощью этих самых открытых IBQuery или IBTable. То все правильно нужно пенеоткрыть запрос/таблицу.
...
Рейтинг: 0 / 0
15.12.2003, 14:40
    #32352739
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Transaction.CommitRetaining сделай после выполнения ХП и всё будет видно.
...
Рейтинг: 0 / 0
15.12.2003, 14:42
    #32352742
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
2Andrey_

я испльзую pFIBDataSet, подключенный к 2-м транзакциям.
после коммита транзакции я смотрю ibexpert-ом и видно, что изменения именно от ХП не внесены (а то что я добавлял - присутствует).
...
Рейтинг: 0 / 0
15.12.2003, 14:52
    #32352764
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
>я испльзую pFIBDataSet, подключенный к 2-м транзакциям
Чесно говоря смущает. Ну да ладно.

Попробуй так. После заполнения таблици и перед запуском процедуры в той же тарнзакции открой запрос и посмотри данные которые должны поменятся. Потом закрой запрос, запусти процедуру, и после окончания процедуры открой запрос опять, если данные не поменялись, значит всетаки заполнение таблици и процедура работают в разных транзакциях.
...
Рейтинг: 0 / 0
15.12.2003, 15:46
    #32352860
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
2 Andrey_

Все выполняется в одной транзакции, нихрена не понимаю.
...
Рейтинг: 0 / 0
15.12.2003, 16:15
    #32352901
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Поставь параметры пишущей транзакции
read_committed
rec_version
...
Рейтинг: 0 / 0
15.12.2003, 16:16
    #32352902
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Да, ну и транзакция на чтение должна быть тоже что-то типа
read
nowait
read_committed
rec_version

В общем читайте про режимы изоляции.
...
Рейтинг: 0 / 0
15.12.2003, 16:20
    #32352913
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
2Gold

у меня
- параметры читающей транзакции:
read
read_committed
rec_version
nowait

- параметры пишущей транзакции:
write
concurrency
nowait
...
Рейтинг: 0 / 0
15.12.2003, 16:21
    #32352914
Dimasis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Если разрабатываешь в Делфях, проверь, не открыта ли у тебя БД постоянно
через TIBDataBase (при незапущенном exe-шнике). Я уже много раз на эту фишку нарывался.
...
Рейтинг: 0 / 0
15.12.2003, 16:24
    #32352919
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
пробовал разные параметры пишущей транзакции, все равно одно и то же получается. Но прикольно, что если закрыть, а потом открыть программу, и дерактировать данные, то все отлично выполняется и сохраняется
...
Рейтинг: 0 / 0
15.12.2003, 16:55
    #32352982
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Ошибка где-то в твоей программе, это точно - ищи.
...
Рейтинг: 0 / 0
15.12.2003, 16:59
    #32352992
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Вопрос, а процедура как запускается
- через execute procedure
- или select * from proc

Ксожалению я неимею представления о том как работает pFIBDataSet но есть предположение что запросы начинающиеся с select он запускает в одной (читающей) транзакции, а остальные (не select) из обновляющей транзакции и при этом обновляющяя транзакция редко делает commit.

Следовательно, если допустить, что заполнение произошло в обновляющей транзакции (и после заполнения транзакция не завершилась commit-ом), а потом была запущена (через select) процедура (в читающей транзакцией) получаем результат: процедура неполучает доступ к данным таблици добавленым при заполнении.
...
Рейтинг: 0 / 0
15.12.2003, 17:16
    #32353012
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Да уж. Если вникнуть в написанное, то он говорит, что заносит данные в таблицу и потом вызывает ХП и всё это в одной пишущей транзакции - всё должно работать при любом уровне изоляции.
А читающей транзакцией полюбому ничего записать не получится, даже если программа переоткроется...
Странно всё это. Я даже не представляю как можно так сделать чтоб одна транзакция свои же данные не видела Что-то он не договаривает...
Я тут только могу предположить, что в программе несколько пишуших транзакций и изменение таблицы выполняется таки в одной транзакции, а выхов ХП в другой.
...
Рейтинг: 0 / 0
15.12.2003, 18:09
    #32353095
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
В общем тут немного прояснилось дело. ХП отрабатывает, но во время работы она вызывает другую ХП, и вот из нее данные то вызываются, то нет, передаваемые параметры я смотрел, вроде правильно передаются, а почему через работает, не пойму
...
Рейтинг: 0 / 0
15.12.2003, 18:49
    #32353158
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Напиши UDF для отладки, которая выдаёт значение на экран с помощью MessageBox и его же возвращает и смотри чё будет.
Я вот часто пользуюсь такой (правда она не для строк):
Код: plaintext
1.
2.
3.
4.
function var i:integer:integer; cdecl;
begin
  ShowMessage(IntToStr(i));
  Result:=i
end;
...
Рейтинг: 0 / 0
15.12.2003, 19:10
    #32353188
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятки с выполнением ХП
Всем спасибо, ошибку поборол.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / непонятки с выполнением ХП / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]