VB 6 num recebe retorno correto de PROC com UPDATE??
Algum macete ??
No Sybase faz certinho, mas no VB 6 o campo é recebido sem o UPDATE na tabela no campo DT_INICIO_VIGENCIA temporária.
Eu uso ADO com ODBC, Sybase 11.
Algum macete ??? Alguma dica ?? Alguém já passou por isto ????
Vejam PROC:
create proc migra_001
as
select distinct
ba60.cd_ps,
ba60.tp_clc_prst,
ba60.cd_ind_cm_sld_dvr,
pc_desc_prod = isnull(ba60.pc_desc_prod,0),
dt_inicio_vigencia = replicate(' ',10)
into
#ba60_ba30_prod_t
from
ba60_cnt_opds ba60,
bd30_tp_clc_prst ba30
where
(ba60.tp_clc_prst = ba30.tp_clc_prst)
group by
ba60.cd_ps,
ba60.tp_clc_prst,
ba60.cd_ind_cm_sld_dvr,
ba60.pc_desc_prod
order by
ba60.cd_ps
/*********************************
Declara variáveis.
Obs.: campo_p = sufixo para indicar que a variável esta sendo usado no cursor de produtos.
No cursor os campos tem o mesmo
tipo das tabelas de onde os dados são extraídos.
**********************************/
declare
@cd_ps_p int,
@tp_clc_prst_p int,
@cd_ind_cm_sld_dvr_p int,
@pc_desc_prod_p decimal(3,2),
@cd_ps_old_p int,
@dt_inicio_vigencia_p datetime,
@msgret varchar(100),
@codret int
begin tran
/*********************************
Declara o cursor a ser utilizado
**********************************/
declare cur_ba60_ba30_prod cursor for
select
cd_ps,
tp_clc_prst,
cd_ind_cm_sld_dvr,
pc_desc_prod
from
#ba60_ba30_prod_t
order by
cd_ps
for read only
/*********************************
Abre e lê primeiro registro do cursor
**********************************/
open cur_ba60_ba30_prod
fetch cur_ba60_ba30_prod
into
@cd_ps_p,
@tp_clc_prst_p,
@cd_ind_cm_sld_dvr_p,
@pc_desc_prod_p
/*********************************
Verifica se ainda existe registros a serem percorridos no cursor
**********************************/
while @@sqlstatus <> 2
begin
if @@sqlstatus = 1
begin
rollback tran
select @msgret = 'Procedure executada com ERRO. Problemas no cursor cur_ixdt001.'
select @codret = -34
return -34
end
/*Data Início Vigência*/
if @cd_ps_p <> @cd_ps_old_p
begin
select @cd_ps_old_p = @cd_ps_p
select @dt_inicio_vigencia_p = convert(datetime,'01.01.1900')
end
else
begin
select @dt_inicio_vigencia_p = dateadd(day, 1, @dt_inicio_vigencia_p)
end
update #ba60_ba30_prod_t
set
dt_inicio_vigencia = @dt_inicio_vigencia_p --'TESTE'
where
(cd_ps = @cd_ps_old_p) and
(tp_clc_prst = @tp_clc_prst_p) and
(cd_ind_cm_sld_dvr = @cd_ind_cm_sld_dvr_p) and
(pc_desc_prod = @pc_desc_prod_p)
commit tran
if @@transtate = 2 or @@transtate = 3
begin
rollback tran
select @msgret = 'Executada com ERRO. Problemas ao atualizar #ixdt001_t.'
select @codret = -10
return -10
end
/*********************************
Lê próximo registro do cursor
**********************************/
fetch cur_ba60_ba30_prod
into
@cd_ps_p,
@tp_clc_prst_p,
@cd_ind_cm_sld_dvr_p,
@pc_desc_prod_p
end
commit tran
close cur_ba60_ba30_prod
deallocate cursor cur_ba60_ba30_prod
select
cd_ps as cd_ps_f,
dt_inicio_vigencia as dt_ini_vig_f
from
#ba60_ba30_prod_t
order by
cd_ps
Pergunta
vilmarbr
VB 6 num recebe retorno correto de PROC com UPDATE??
Algum macete ??
No Sybase faz certinho, mas no VB 6 o campo é recebido sem o UPDATE na tabela no campo DT_INICIO_VIGENCIA temporária.
Eu uso ADO com ODBC, Sybase 11.
Algum macete ??? Alguma dica ?? Alguém já passou por isto ????
Vejam PROC:
create proc migra_001 as select distinct ba60.cd_ps, ba60.tp_clc_prst, ba60.cd_ind_cm_sld_dvr, pc_desc_prod = isnull(ba60.pc_desc_prod,0), dt_inicio_vigencia = replicate(' ',10) into #ba60_ba30_prod_t from ba60_cnt_opds ba60, bd30_tp_clc_prst ba30 where (ba60.tp_clc_prst = ba30.tp_clc_prst) group by ba60.cd_ps, ba60.tp_clc_prst, ba60.cd_ind_cm_sld_dvr, ba60.pc_desc_prod order by ba60.cd_ps /********************************* Declara variáveis. Obs.: campo_p = sufixo para indicar que a variável esta sendo usado no cursor de produtos. No cursor os campos tem o mesmo tipo das tabelas de onde os dados são extraídos. **********************************/ declare @cd_ps_p int, @tp_clc_prst_p int, @cd_ind_cm_sld_dvr_p int, @pc_desc_prod_p decimal(3,2), @cd_ps_old_p int, @dt_inicio_vigencia_p datetime, @msgret varchar(100), @codret int begin tran /********************************* Declara o cursor a ser utilizado **********************************/ declare cur_ba60_ba30_prod cursor for select cd_ps, tp_clc_prst, cd_ind_cm_sld_dvr, pc_desc_prod from #ba60_ba30_prod_t order by cd_ps for read only /********************************* Abre e lê primeiro registro do cursor **********************************/ open cur_ba60_ba30_prod fetch cur_ba60_ba30_prod into @cd_ps_p, @tp_clc_prst_p, @cd_ind_cm_sld_dvr_p, @pc_desc_prod_p /********************************* Verifica se ainda existe registros a serem percorridos no cursor **********************************/ while @@sqlstatus <> 2 begin if @@sqlstatus = 1 begin rollback tran select @msgret = 'Procedure executada com ERRO. Problemas no cursor cur_ixdt001.' select @codret = -34 return -34 end /*Data Início Vigência*/ if @cd_ps_p <> @cd_ps_old_p begin select @cd_ps_old_p = @cd_ps_p select @dt_inicio_vigencia_p = convert(datetime,'01.01.1900') end else begin select @dt_inicio_vigencia_p = dateadd(day, 1, @dt_inicio_vigencia_p) end update #ba60_ba30_prod_t set dt_inicio_vigencia = @dt_inicio_vigencia_p --'TESTE' where (cd_ps = @cd_ps_old_p) and (tp_clc_prst = @tp_clc_prst_p) and (cd_ind_cm_sld_dvr = @cd_ind_cm_sld_dvr_p) and (pc_desc_prod = @pc_desc_prod_p) commit tran if @@transtate = 2 or @@transtate = 3 begin rollback tran select @msgret = 'Executada com ERRO. Problemas ao atualizar #ixdt001_t.' select @codret = -10 return -10 end /********************************* Lê próximo registro do cursor **********************************/ fetch cur_ba60_ba30_prod into @cd_ps_p, @tp_clc_prst_p, @cd_ind_cm_sld_dvr_p, @pc_desc_prod_p end commit tran close cur_ba60_ba30_prod deallocate cursor cur_ba60_ba30_prod select cd_ps as cd_ps_f, dt_inicio_vigencia as dt_ini_vig_f from #ba60_ba30_prod_t order by cd_ps----
GRATO !!
Editado por kuroiAdicionar tag CODE
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.