![]() |
|
Модераторы: Akella |
![]()
|
|
| ksili |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Есть хранимая процедура, которая должна вырезать из таблицы строку с наименьшим значением ключевого поля.
Пишу на Builder 6. Вызываю процедуру так:
Так вот процедура удаляет запись, но ничего не возвращает (:p_phone и :p_time - выходные параметры процедуры). После её вызова у меня стоит
И BufferQuery->RecordCount равно нулю. Значит выходные параметры выполняемой процедуры это не набор данных? Их надо читать не как поля, а как параметры? Как это сделать? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||||
|
|||||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
var_id_call должен быть объявлен, как выходной параметр. тогда
Добавлено @ 11:34 что это? Добавлено @ 11:35 или
Это сообщение отредактировал(а) Akella - 14.5.2007, 11:40 |
||||
|
|||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Так var_id_call это внутренняя переменная процедуры. Её возвращать не надо.
Ну я для интереса попробовал - ничего не изменилось. Интересно хранимки можно как-то пошагово выполнять, что-то типа отладочного режима? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
от блин, та я просто к примеру Добавлено через 21 секунду
нельзя Добавлено через 1 минуту и 17 секунд можно что-то типа такого: создаешь таблицу, куда будут попадать сообщения а в процедуре на нужных тебе шагах пишешь значения в эту таблицу, вот и всё |
||||
|
|||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Получилось через select, только при этом возвращается всегда одна запись (пустая или непустая), поэтому код стал такой:
А BufferQuery это TpFIBQuery. Кверя короче из FIBPlus Это сообщение отредактировал(а) ksili - 14.5.2007, 12:01 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
||||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Да я читал когда-то. Вроде там между begin и end выполняются действия для каждой записи попавшей в select. Только зачем мне это? Результатом моей ХП должны быть два поля из самой старой записи (то есть с наименьшим ID), если в таблице что-то есть, либо вообще ничего, если таблица пустая. А что там с остальными записями мне всё равно. Так что for select, по-моему, здесь неуместен.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
да, неуместен. Тебе же нужно одну запись получать из хранимки
|
|||
|
||||
| Deniz |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
>Akella & ksili
Пошагово отлаживать ХП МОЖНО для этого можно воспользоваться IBExpert >ksili
Не совсем понял. Если транзакция закрывается (Commit), то и набор данных закрывается, (если это не UpdateTransaction FIBPlus) а след-но
должна быть ошибка
уж лучше проверить
BufferQuery->ExecQuery(); заменить на BufferQuery->Open(); и без Commit -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||||||
|
|||||||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
||||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
BufferQuery->Transaction это не UpdateTransaction:
И тем не менее всё работает, никакой ошибки нет. Зачем
если всё работает? Про отладку ХП тоже интересно -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Подробнее.
Ну не совсем отладка, но пошаговое выполнение процедуры это реальность. Вы пользуетесь IBExpert'ом? Добавлено через 7 минут и 20 секунд
Если бы все работало, и никаких ошибок не было, то и вопросов бы не было ;-) Не понимаю, или не хватает кода, как у тебя после Commit набор данных остается открытый, неужто кешированный апдейт настроен? -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Я ничего вроде не настраивал, всё по-умолчанию. Я всегда так работаю с кверями:
Выполняю её, подтверждаю, а затем вытягиваю, то что нужно в переменные.
Вот как раз если её не подтвердить, то BufferQuery->FieldByName("P_PHONE")->AsString ничего не даст. Я поначалу не подтверждал (недавно вообще БД занимаюсь) но методом тыка догадался, что нужно подтвердить. Правда если следом идет несколько запросов, и в промежутках не надо из них вытаскивать какие-то данные (например они все обновляющие), то можно Commit поставить только после последнего запроса.
Так сейчас вопросов и нет, они были раньше, а сейчас уже вопрос помечен как решённый Это сообщение отредактировал(а) ksili - 18.5.2007, 12:10 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Принцип работы сл-щий:
1. открыть транзакцию 2. прочитать данные 3. подтвердить/отменить транзакцию (здесь она закрывается и все связанные с ней DataSet'ы) а вот здесь при попытке узнать значение поля должна быть ошибка. Вероятно у тебя транзакция открывается автоматически или еще чего делается. В общем не буду больше приставать. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Так это что ли получается транзакция дважды выполняется? Один раз мной, второй раз автоматически? Нехорошо...
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |