ошибка Multiple Rows In Singleton Select

  • Автор темы nosebleed
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nosebleed

#1
Собственно, процедура
Код:
CREATE PROCEDURE INSTR_V_PRVE (
data date)
returns (
v_prve_instr_tseh integer,
percentage_end numeric(15,3),
code integer,
v_klad_instr_tseh integer,
percentage_begin numeric(15,3),
data_expire date,
name char(30),
kol_vo_used integer,
sdano_do_nachala integer,
vziato_do_nachala integer,
max_data date,
last_data date,
d integer,
ostatok integer,
kol numeric(15,3),
normal char(30),
description char(30),
smena_expire integer,
vsego integer)
as
declare variable smena integer;
declare variable st_from_temp decimal(15,3); /* нар стойкость(используется для used instr) */
declare variable st decimal(15,3);
declare variable resurs decimal(15,3);
declare variable is_resurs integer;
declare variable narabotka decimal(15,3);
declare variable kod integer;
begin
smena=3;
for
/* получим данные о нар стойкости, необх. кол-ве, описание */
select name,normal,t_code,t_st,st,description,resurs, is_resurs,last_data
from temp where t_code not in
(select code from data_vidachi where data=:data)
into :name,:normal,:kod,:st_from_temp,:st, :description,:resurs,:is_resurs,:last_data


do

begin
v_klad_instr_tseh=0;
v_prve_instr_tseh=0;
/* получим данные об инструменте: имя, нормаль, стойкость, диаметр */

select kol_vo from kladovaya where kl_code=:kod into :vsego;

/* подсчитаем дату замены инструмента, его наработанную стойкость на начало и конец месяца  */
if (exists (select used_code from use_instr where used_code=:kod)) then
/**/ begin
/* дата и количество с прошлого месяца*/
select nar_st+:st_from_temp,kol_vo,100*nar_st/(kol_vo*:st) from use_instr where used_code=:kod into :narabotka, :kol_vo_used,:percentage_begin;
select data_exp,smena_exp from date_expire(:data,:smena,:resurs,:narabotka, :kod) into :data_expire,:smena_expire;

/* посчитаем количество в пр-ве, дату последней выдачи и дату посл. использования */
select sum(kol) from data_vidachi where code=:kod and data<=:data into :vziato_do_nachala;
if (vziato_do_nachala is null) then vziato_do_nachala=0;
select sum(kol) from data_sdachi where code=:kod and data<=:data into :sdano_do_nachala;
if (sdano_do_nachala is null) then sdano_do_nachala=0;
kol=vziato_do_nachala-sdano_do_nachala;
if (vziato_do_nachala=0 and sdano_do_nachala=0) then
kol=kol_vo_used;
/* проценты */
percentage_begin=cast(percentage_begin as integer);
if (is_resurs=1) then
begin
select 100*(:st_from_temp+nar_st)/(:st*kol_vo) from use_instr where used_code=:kod into :percentage_end;
percentage_end=cast(percentage_end as integer);
end
else
begin
percentage_end=cast(st_from_temp/st*100 as integer);
end



/**/ end	 /* выше считали для used_instr , ниже считаем для нового инстр */

else
begin
/* дата */
select data_exp,smena_exp from date_expire(:data,:smena,:st,:st_from_temp, :kod) into :data_expire,:smena_expire;
/* проценты */
percentage_end=cast(st_from_temp/st*100 as integer);
percentage_begin=0;
kol_vo_used=0;
/* посчитаем количество в пр-ве, дату последней выдачи и дату посл. использования */
select sum(kol) from data_vidachi where code=:kod and data<=:data into :vziato_do_nachala;
if (vziato_do_nachala is null) then vziato_do_nachala=0;
select sum(kol) from data_sdachi where code=:kod and data<=:data into :sdano_do_nachala;
if (sdano_do_nachala is null) then sdano_do_nachala=0;
kol=vziato_do_nachala-sdano_do_nachala;


end

select max(data) from data_vidachi where code=:kod into :max_data;
if (max_data is null) then
select data_spis from use_instr where used_code=:kod into :max_data;
ostatok=vsego-vziato_do_nachala;
SELECT kol from kladovaya_instr_tseh where code=:kod into v_klad_instr_tseh;
SELECT kol from instr_tseh_prvo where code=:kod into v_prve_instr_tseh;
suspend;
end

end
В IBExpert все работает. Работает и в Delphi 7 , НО , когда пролистываю DBGrid до конца получаю вышеуказанную ошибку. Причем в стадии разработки могу пролистать до конца и никаких проблем.

Установлен компонент EHlib, не знаю может ли это как-то влиять.
 
Статус
Закрыто для дальнейших ответов.