problemas con valor de retorno.

16/04/2009 - 20:37 por A.M.F. | Informe spam
Tengo el siguiente proc:

ALTER proc [dbo].[reporte_asis_cli] @fini datetime, @ffin datetime,@tipo
int,@xtotal int output
as
declare @msuma int
set @msuma = 0
if @tipo = 0
begin
declare @cuenta int, @mihora int,@dia datetime,@campo varchar(25)
set @cuenta = 1
set @mihora = 8
create table #asiste(hora char(8))
while @cuenta <
begin
if @mihora <= 11
begin
insert into #asiste
values(replicate('0',2-len(ltrim(str(@mihora))))+ltrim(str(@mihora))+':00
am')
end
else
begin
insert into #asiste
values(replicate('0',2-len(ltrim(str(@mihora))))+ltrim(str(@mihora))+':00
pm')
end
set @cuenta = @cuenta + 1
set @mihora = @mihora + 1
end
declare @texto varchar(3500), @corre char(8),@hishora int
set @dia = @fini
while @dia <= @ffin
begin
set language spanish
set @campo =
DateName(month,@dia)+replicate('0',2-len(ltrim(str(day(@dia)))))+ltrim(str(day(@dia)))
set language english
set @texto = 'alter table #asiste add '+@campo+' int default 0 not null'
exec (@texto)
declare mmitabla cursor for select hora from #asiste
open mmitabla
fetch next from mmitabla into @corre
while @@fetch_status = 0
begin
set @hishora = (select clientes from tabcliast where hora = @corre and
fecha = @dia)
print 'prueba'
print 'HIst: '+str(@hishora,11,2)
set @msuma = @msuma + round(@hishora,0)
print 'Suma: '+str(@msuma,11,2)
set @texto = 'update #asiste set '+@campo+'='+ltrim(str(@hishora))+'
where hora='+''''+@corre+''''
exec (@texto)
fetch next from mmitabla into @corre
end
deallocate mmitabla
set @dia = dateadd(day,1,@dia)
between @fini and @ffin group by fecha,hora
end
select * from #asiste
drop table #asiste
end
else
begin
select sum(clientes) as clientes from tabcliast where fecha between @fini
and @ffin
set @msuma = (select isnull(sum(clientes),0) as clientes from tabcliast
where fecha between @fini and @ffin)
end
print 'suma '+str(@msuma)
set @xtotal = round(@msuma,0)
print 'total' + str(@xtotal)

en el VFP9
cuanto lo llamo con @tipo =1 funciona correcto el valor @xtotal me retorna
lo que debe.
cuando lo llamo con @tipo=0 el valor @xtotal me sale .NULL.

en el sql me da los resultados coom debe de ser, pero en la aplicacion me
retorna null, ¿puede el sql retornar una consulta y un valor re retorno?

Luis
 

Leer las respuestas

#1 Carlos Sacristan
17/04/2009 - 11:30 | Informe spam
Pues si dices que ejecutando la consulta desde la consola te devuelve
valores en el parámetro de salida valga lo que valga el parámetro @tipo y
que sólo en el caso de que devuelva datos, desde el código no te funciona,
parece un problema de este último más que de SQL Server, ¿no?.

Echa un vistazo a esta respuesta, creo que se aplica a tu caso:
http://www.tech-archive.net/Archive...00004.html



"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil. si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba

"A.M.F." escribió en el mensaje
news:%
Tengo el siguiente proc:

ALTER proc [dbo].[reporte_asis_cli] @fini datetime, @ffin datetime,@tipo
int,@xtotal int output
as
declare @msuma int
set @msuma = 0
if @tipo = 0
begin
declare @cuenta int, @mihora int,@dia datetime,@campo varchar(25)
set @cuenta = 1
set @mihora = 8
create table #asiste(hora char(8))
while @cuenta <
begin
if @mihora <= 11
begin
insert into #asiste
values(replicate('0',2-len(ltrim(str(@mihora))))+ltrim(str(@mihora))+':00
am')
end
else
begin
insert into #asiste
values(replicate('0',2-len(ltrim(str(@mihora))))+ltrim(str(@mihora))+':00
pm')
end
set @cuenta = @cuenta + 1
set @mihora = @mihora + 1
end
declare @texto varchar(3500), @corre char(8),@hishora int
set @dia = @fini
while @dia <= @ffin
begin
set language spanish
set @campo =
DateName(month,@dia)+replicate('0',2-len(ltrim(str(day(@dia)))))+ltrim(str(day(@dia)))
set language english
set @texto = 'alter table #asiste add '+@campo+' int default 0 not null'
exec (@texto)
declare mmitabla cursor for select hora from #asiste
open mmitabla
fetch next from mmitabla into @corre
while @@fetch_status = 0
begin
set @hishora = (select clientes from tabcliast where hora = @corre and
fecha = @dia)
print 'prueba'
print 'HIst: '+str(@hishora,11,2)
set @msuma = @msuma + round(@hishora,0)
print 'Suma: '+str(@msuma,11,2)
set @texto = 'update #asiste set '+@campo+'='+ltrim(str(@hishora))+'
where hora='+''''+@corre+''''
exec (@texto)
fetch next from mmitabla into @corre
end
deallocate mmitabla
set @dia = dateadd(day,1,@dia)
between @fini and @ffin group by fecha,hora
end
select * from #asiste
drop table #asiste
end
else
begin
select sum(clientes) as clientes from tabcliast where fecha between @fini
and @ffin
set @msuma = (select isnull(sum(clientes),0) as clientes from tabcliast
where fecha between @fini and @ffin)
end
print 'suma '+str(@msuma)
set @xtotal = round(@msuma,0)
print 'total' + str(@xtotal)

en el VFP9
cuanto lo llamo con @tipo =1 funciona correcto el valor @xtotal me retorna
lo que debe.
cuando lo llamo con @tipo=0 el valor @xtotal me sale .NULL.

en el sql me da los resultados coom debe de ser, pero en la aplicacion me
retorna null, ¿puede el sql retornar una consulta y un valor re retorno?

Luis

Preguntas similares