А для работы в многопользовательской среде сляпаем, а потом будем пасти пул генераторов, на случай одновременного запуска аналогичных задач несколькими пользователями одновременно. Ну, если очень хочется, то можно, конечно. Генератор, внешнюю таблицу (а чем не пацанский вариант?) и ышо что-нибудь прикрутить.Ivan_Pisarevsky писал(а):Если развить тему про генераторы, хочь это и квадратноколесный лисапет, ну раз уж назвался груздем...
Можно сделать так: В основной программе растим специально обученый генератор и ...
Начисляем деньги. А если способ начисления изменится?
Модератор: kdv
Доброе утро,
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
На запуске крейт генератор, на входе дроп генератор, правда работать с ХП с динамически меняющимся генератором секс явно нетрадиционный, извратиться с чем-то вроде экзекут стэйтмент...А для работы в многопользовательской среде сляпаем, а потом будем пасти пул генераторов, на случай одновременного запуска аналогичных задач несколькими пользователями одновременно.
Да я вообще за то, чтоб показать юзеру анимашку и пусть любуется и сервер БД фигней не парягает
Добро пожаловать на борт нашего самолета к вашим услугам бар, сауна, бассейн... А теперь со всем этим добром мы попытаемся взлететь, пристегните ремни!Генератор, внешнюю таблицу (а чем не пацанский вариант?) и ышо что-нибудь прикрутить.
А вот с помощью этого угла колеса мона и задницу отбить об седло. Ва-первых, дроп генератор появился не так давно, счастливые обладатели IB меньше 7 этого сделать не могут. Ва-втарых, этот дроп только сносит данные о генераторе из системной таблицы и не освобождает место на странице генераторов, тут порядок может навести только b/r. И исчерпание там места ведёт к получению corrupted database. Не знаю какие цифры нынче предельные в этом смысле для текущих версий какого клона, но упомянутые счастливые обладатели были ограничены вовсе не астрономическими цифрами, зависящими от номера версии и размера страницы, сотни какие-то в общем. В МИ табличка даже есть, там где причины повреждения баз расписаны, сам для Ковязина рисовал, уже не помню ни хрена этих цифирек.Ivan_Pisarevsky писал(а):На запуске крейт генератор, на входе дроп генератор
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Да, пожалуй, что так. Убедили. Наступили песне прямо на горло... не такое уж у меня крутое программо, чтобы прогресс был сложнее всего.Ivan_Pisarevsky писал(а):А теперь со всем этим добром мы попытаемся взлететь, пристегните ремни!
Придется показывать crHourGlass...
Вот есть более приземленный вопрос: опять же про начисление денег.
Читал-читал я про хранимые процедуры, но до конца не понял. Зауск одной процы из другой - понял и использую. Но передача параметров пока не требовалась. И вот потребовалась, а как забрать-то значение выходной переменной, так и не понял.
Конкретнее: процедура начисления оценивает SmallInt-поле "KATEGORY". В зависимости от значения этой самой категории CASE-методом предполагается вызывать разные процедуры расчета. С передачей в них значений других полей:
Код: Выделить всё
CASE :KATEG IN /*или какой там синтаксис, не помню... ну смысл такой - если категория = числу*/
1 : begin EXECUTE PROCEDURE PERVAYA(PRICE, KOLVO) end;
2 : begin EXECUTE PROCEDURE VTORAYA(PRICE, KOLVO) end;
... и т.д.
Заранее благодарю за подробный пример
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
begin EXECUTE PROCEDURE PERVAYA(PRICE, KOLVO) end;
дочитай доку до слова "RETURNING_VALUES"
Что мешает в конце процедуры поставить "suspend" и в вызывающей процедуре просто выбирать селектом?
дочитай доку до слова "RETURNING_VALUES"
Что мешает в конце процедуры поставить "suspend" и в вызывающей процедуре просто выбирать селектом?
Положи на форму Танимэйт и показывай, например, анимашку поиска файлов. делов-то...Придется показывать crHourGlass...
Да читал я эту доку. И фак читал, и статьи скачал... Только до стихов про InterBase не добрался еще. Везде так и написано хитроумно да с вывертом. Вот мы в простой ХП делаем FOR SELECT что-нибудь откуда-нибудь. И потом сажаем эти значения полей в переменные:Ivan_Pisarevsky писал(а):begin EXECUTE PROCEDURE PERVAYA(PRICE, KOLVO) end;
дочитай доку до слова "RETURNING_VALUES"
INTO :Переменная1, :Переменная2, .... и т.д.
Во-о-о-от. Потом с ними работаем, потом некоторые из них передаем в расчетную процедуру (Цену, количество и т.п.), потом забираем результат.
Потом INSERT в таблицу начислений на предмет присвоения значений ее полям. Причем в одно из них и попадает результат.
Это ясно.
А как должна выглядеть строка, где мы забираем выходную переменную-то, сиречь результат?
Select из таблицы INTO в переменные
а тут что SELECT'ить - то? Как это оформить документально?
Статьи читать. Купи еще книжку "Мир Interbase"(по вопросу см.главу "Хранимые процедуры")solo писал(а):Да читал я эту доку. И фак читал, и статьи скачал...
Еще:
http://www.ibase.ru/firebird.htm#doc
доки и релизные ноты скачать, изучить.
см.тут
http://www.ibase.ru/v6/doc/langref.zip
Language Reference
Procedures and Triggers
и даже тут :
http://www.ibase.ru/v6/doc/embedsql.zip
Embedded SQL Guide
CHAPTER 10 WORKING WITH STORED PROCEDURES
USING SELECT PROCEDURES
USING EXECUTABLE PROCEDURES
(хоть это мануал подходит "только если вы используете GPRE", 10 глава ответит на твой последний вопрос:
SELECT PROJ_ID FROM GET_EMP_PROJ (:number);
или
EXECUTE PROCEDURE DEPT_BUDGET( 100 ) RETURNING_VALUES :sumb;)
solo писал(а):Только до стихов про InterBase не добрался еще. Везде так и написано хитроумно да с вывертом.
Типа опять ворнинг. Да, зануда я, зануда По идее не мешает ничего, но по состоянию дел на текущий момент я бы этим _увлекаться_ не советовал. Нет, где нужно, значит нужно. А при singleton-result, где можно обойтись Execute, лучше не надо. Бажок там есть с ужором памяти, вот пофиксят, тогда уж...Ivan_Pisarevsky писал(а): Что мешает в конце процедуры поставить "suspend" и в вызывающей процедуре просто выбирать селектом?
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
to Merlin
Ну раз ворнинг, примем к сведению
Налево пойдешь (это про старый баг с TIBStoreProc, типа не пользоваться запускными процедурами, а лучше выборками...) направо пойдешь (теперь наоборот, пользоваться лучше запускаемыми процедурами, а не выборками...) Куда бедному программеру податься...
Ну раз ворнинг, примем к сведению
дык за конструктивную критику я не в обидеДа, зануда я, зануда
Налево пойдешь (это про старый баг с TIBStoreProc, типа не пользоваться запускными процедурами, а лучше выборками...) направо пойдешь (теперь наоборот, пользоваться лучше запускаемыми процедурами, а не выборками...) Куда бедному программеру податься...
Старый баг чиста клиентский и чиста IB-шный, усиленный маразмиком в FIB-IBX, а этот наоборот, чиста серверный, при селекте из процедуры внутри другой процедуры. Так шта судьба наша - преодолевать склероз и помнить где какие грабли и как обходить. Кстати, вот насчёт борьбы со склерозом - медики рекомендуют http://www.medicus.ru/?cont=news&nws_id=7905Ivan_Pisarevsky писал(а): Налево пойдешь (это про старый баг с TIBStoreProc, типа не пользоваться запускными процедурами, а лучше выборками...) направо пойдешь (теперь наоборот, пользоваться лучше запускаемыми процедурами, а не выборками...) Куда бедному программеру податься...
Но я поступил просче - выкинул из IBX эту дурость, а поскольку клиент FB-шный, то при работе с клиента и помнить ничо не надо стало.
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34