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

Вниз

Помогите организовать ХП (Firebird)   Найти похожие ветки 

 
Koala ©   (2005-06-23 19:59) [0]

Суть проблемы в следующем:
Есть CheckListBox в котором находится список фирм, пользователь отмечает необходимые ему фирмы (от 1 до ... >1000).
Как передать в условие ХП список фирм по которым необходимо выбрать данные.
Как передать 1, 2 ... и т.д. переменные я знаю..., а вот кок передать масив тем более когда каждый раз разное кол-во значений, и затем его обработать, я не знаю... Помогите плз...


 
P.N.P. ©   (2005-06-23 21:31) [1]

Можно так

CREATE PROCEDURE NEW_PROCEDURE (
   MASS VARCHAR(1024))
RETURNS (
   ID INTEGER,
   NAME VARCHAR(50))
AS
begin
for execute statement
"select id,name from dok where id in("||MASS||")" into :ID,:NAME do
 suspend;
end

Пример пользования select * from NEW_PROCEDURE("1,2,3")
(FB 1.5 надеюсь?)


 
Desdechado ©   (2005-06-23 21:55) [2]

2 PNP
VARCHAR ограничен 32765 знаков
если список кодов заведомо короче, то можно способ [1]
если же возможно хуже, то через табличку, данные в которой живут только в этой транзакции
причем таблица может быть весьма разной структуры и обрабатываться разными способами - здесь простор для фантазии, но рекомендую не плодить много записей (ибо это тормоза) и не пихать все в пару записей (ибо это тоже тормоза, только причина другая)


 
Koala ©   (2005-06-24 10:59) [3]


> [1] P.N.P. ©   (23.06.05 21:31)


> [2] Desdechado ©   (23.06.05 21:55)


СПАСИБО


 
Romkin ©   (2005-06-24 16:48) [4]

Можно писать в таблицу, в той же транзакции. Потом делать in по этой таблице и удалять из нее. А уникальность - через генераторы. Дело в том, что список в [1] ограничен примерно 1000 итемов ;)


 
P.N.P. ©   (2005-06-24 17:25) [5]

>Romkin ©   (24.06.05 16:48) [4]
>список в [1] ограничен примерно 1000 итемов
Нет, не 1000, гораздо меньше итемов получится :)
Все-таки интересно, сколько времени у пользователя
занимает проставление 1000 галочек в CheckListBox?
Где это такие терпеливые пользователи водяцца?
По моему, задача скорее всего может быть решена гораздо проще,
если автор объяснит зачем ему все это.


 
Desdechado ©   (2005-06-24 18:11) [6]

проставление галочек может быть от противного - сначала все 5000 выбраны, а он убирает лишние 20


 
Koala ©   (2005-06-24 18:34) [7]


>  [5] P.N.P. ©   (24.06.05 17:25)
> По моему, задача скорее всего может быть решена гораздо
> проще, если автор объяснит зачем ему все это.


Для чего? я обьясню....
В конце месяца составляется отчет в виде бухгалтерской шахматки (crossReport):
с лево - список клиентов
с право - список автомобилей
на пересечении время и сумма
с низу итоговые суммы за автомобиль
с права - суммы по клиенту (департаменту)

так вот список общий делается для для бухгалтерии

список по некоторым автомобилям или клиентам делается по просьбе заказчика (у них лимит на использование автотранспорта), поэтому иногда приходится по их заявке формировать и экспортировать в Excel, и пересылать по мылу...


>  [6] Desdechado ©   (24.06.05 18:11)
> проставление галочек может быть от противного - сначала
> все 5000 выбраны, а он убирает лишние 20

Вы абсолютно правы.... (выбрать/отменить все)


 
Koala ©   (2005-06-24 18:36) [8]


> с право - список автомобилей


читать с верху


 
Поручик ©   (2005-06-25 11:05) [9]

2 Koala ©   (24.06.05 18:34) [7]

Такой отчет, IMHO, легче строить на стороне клиента. Тогда обращение к базе сведется к серии простых запросов, а бизнес логика будет написана паскалем, а не эскюэлем, что гоаздо удобнее.


 
msguns ©   (2005-06-25 11:22) [10]

А я все равно не понял, зачем делать отчет по 999 клиентам из имеющихся 1000. ИМХО, что-то темнит австралийский медвежонок ;)


 
Koala ©   (2005-06-25 11:30) [11]


>  [10] msguns ©   (25.06.05 11:22)

;о)


> А я все равно не понял, зачем делать отчет по 999 клиентам
> из имеющихся 1000.


это не моя прихоть... такое условие....


>  [9] Поручик ©   (25.06.05 11:05)


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


 
svd   (2005-06-25 21:32) [12]

1. через 1 таблицу (уже ктото советовал) - добавляется поле для хранения булевых значений. и втой же транзакции обрабатываем процедурой.
2. через тернии в ....: лепим вторую таблицу в которой 1 поле - ID из 1 таблицы. лепим триггер на апдейт 1 таблицы для занесения/ удаления из этой временной табличу (ну это комбинированный вариант 1) или лепишь на апдейт хранимую процедуру, которая заносит/удаляет значения во 2 таблицу. тогда запросик будет примерно такого типа (во фантазия разыгралась!):
select t1.*,
 case select count(*) form table2 t2 where  t2.id= t1.id
   when 0 then -1
   else 1
  end as Is$select
from table1 t1



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

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

Наверх





Память: 0.48 MB
Время: 0.043 c
3-1119954270
АМБ
2005-06-28 14:24
2005.08.07
Изменение имени поля


3-1120009643
DimonS
2005-06-29 05:47
2005.08.07
Не просматривается таблица dBase.


3-1120268257
Киря
2005-07-02 05:37
2005.08.07
Попогите написать запрос


11-1100526440
Владимир Кладов
2004-11-15 16:47
2005.08.07
TPCAsm - ассемблирует на лету


4-1118317143
kot andrei
2005-06-09 15:39
2005.08.07
Какая винда у юзера?





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