Fórum Erro ao ativar SQLStoredProc. #384452
24/08/2010
0
Olá,
Sou iniciante em Delphi 7 e fiz uma descrição sobre minha dificuldade. Desculpe por não saber explicar direito o problema.
Estou tentando executar uma procedure do banco (firebird), mas não estou conseguindo ativar o componente SQLStoredProc.
Criei um form onde informarei o codigo da conta e a data inicial.
Inseri um SQLStoredProc, informei o SQLConnection, o StoredProcName.
Quando vou ativar o componente dá erro de null devido o parametro estar vazio.
Informei para o primeiro parametro (codigo_conta) DataType Integer. Value 1 e Type Integer.
Tentei fazer a mesma coisa para o segundo parametro (data_inicial) mas no Type = Date o value fica preenchido com 00.00.00 e não em formato data.
Terminada esta configuração tento ativar SQLStoredProc mas mostra o seguinte erro:
SQLStoredProc1: Cursor not returned from Query.
**Procedure**
ALTER PROCEDURE RECALCULA_SALDOS ( CODIGO_CONTA INTEGER, DATA_INICIAL DATE)ASDECLARE VARIABLE SALDO_INICIAL DECIMAL(15,2);DECLARE VARIABLE TOTAL_ENTRADAS DECIMAL(15,2);DECLARE VARIABLE TOTAL_SAIDAS DECIMAL(15,2);DECLARE VARIABLE TEM_SALDO INTEGER;DECLARE VARIABLE DATA_SALDO DATE;DECLARE VARIABLE ANO_INICIAL INTEGER;DECLARE VARIABLE SALDO_EXISTS INTEGER;DECLARE VARIABLE SALDO_FINAL DECIMAL(15,2);begin ano_inicial = 0; saldo_inicial = 0; total_entradas = 0; total_saidas = 0; tem_saldo = 0; data_inicial = :data_inicial - 1;
--VERIFICA SE EXIST SALDO DIA ANTERIOR A DATA INFORMADA PARA RECALCULO --SE NAO EXISISTIR VOLTA UM DIA NA DATA E VERIFICA NOVAMENTE ATE ENCONTRAR UM SALDOwhile (:tem_saldo = 0) do begin SELECT SUM(SALDO) FROM SALDOS WHERE COD_CONTA = :CODIGO_CONTA AND DATA = :data_inicial INTO :tem_saldo;
If (:tem_saldo > 0) then tem_saldo = 1; If (:tem_saldo = 0) then data_inicial = :data_inicial - 1; if (:data_inicial < '01.01.2008') then tem_saldo = 1; end
--PEGA SALDO INICIAL (na data que foi encontrado o saldo)SELECT SALDO FROM saldos WHERE cod_conta = :codigo_conta and DATA = :data_inicial INTO :saldo_inicial;
--SOMA ENTRADAS (a partir de 1 dia apos a data do saldo)SELECT COALESCE(SUM(VALOR),0) AS TOTAL_ENTRADA FROM mov_bancaria mov, naturezas nat WHERE mov.cod_conta = :codigo_conta and mov.cod_natureza = nat.codigo and nat.entrada_saida = 'E' and data > :data_inicial INTO :total_entradas;
--SOMA SAIDASSELECT COALESCE(SUM(VALOR),0) AS TOTAL_ENTRADA FROM mov_bancaria mov, naturezas nat WHERE mov.cod_conta = :codigo_conta and mov.cod_natureza = nat.codigo and nat.entrada_saida = 'S' and data > :data_inicial INTO :total_saidas;
--ATUALIZA SALDO DA CONTA DO DIASELECT count(*) FROM saldos WHERE cod_conta = :codigo_conta and data = (SELECT cast ('now' as date) from rdb$database) into :saldo_exists;
If (:saldo_exists <= 0) then begin insert into SALDOS (DATA,COD_CONTA,SALDO) VALUES ((SELECT cast ('now' as date) from rdb$database),:codigo_conta,0); end
saldo_final = :saldo_inicial + :total_entradas - :total_saidas;
UPDATE saldos SET SALDO = :saldo_final WHERE cod_conta = :codigo_conta and data = (SELECT cast ('now' as date) from rdb$database); suspend;end^
Sou iniciante em Delphi 7 e fiz uma descrição sobre minha dificuldade. Desculpe por não saber explicar direito o problema.
Estou tentando executar uma procedure do banco (firebird), mas não estou conseguindo ativar o componente SQLStoredProc.
Criei um form onde informarei o codigo da conta e a data inicial.
Inseri um SQLStoredProc, informei o SQLConnection, o StoredProcName.
Quando vou ativar o componente dá erro de null devido o parametro estar vazio.
Informei para o primeiro parametro (codigo_conta) DataType Integer. Value 1 e Type Integer.
Tentei fazer a mesma coisa para o segundo parametro (data_inicial) mas no Type = Date o value fica preenchido com 00.00.00 e não em formato data.
Terminada esta configuração tento ativar SQLStoredProc mas mostra o seguinte erro:
SQLStoredProc1: Cursor not returned from Query.
**Procedure**
ALTER PROCEDURE RECALCULA_SALDOS ( CODIGO_CONTA INTEGER, DATA_INICIAL DATE)ASDECLARE VARIABLE SALDO_INICIAL DECIMAL(15,2);DECLARE VARIABLE TOTAL_ENTRADAS DECIMAL(15,2);DECLARE VARIABLE TOTAL_SAIDAS DECIMAL(15,2);DECLARE VARIABLE TEM_SALDO INTEGER;DECLARE VARIABLE DATA_SALDO DATE;DECLARE VARIABLE ANO_INICIAL INTEGER;DECLARE VARIABLE SALDO_EXISTS INTEGER;DECLARE VARIABLE SALDO_FINAL DECIMAL(15,2);begin ano_inicial = 0; saldo_inicial = 0; total_entradas = 0; total_saidas = 0; tem_saldo = 0; data_inicial = :data_inicial - 1;
--VERIFICA SE EXIST SALDO DIA ANTERIOR A DATA INFORMADA PARA RECALCULO --SE NAO EXISISTIR VOLTA UM DIA NA DATA E VERIFICA NOVAMENTE ATE ENCONTRAR UM SALDOwhile (:tem_saldo = 0) do begin SELECT SUM(SALDO) FROM SALDOS WHERE COD_CONTA = :CODIGO_CONTA AND DATA = :data_inicial INTO :tem_saldo;
If (:tem_saldo > 0) then tem_saldo = 1; If (:tem_saldo = 0) then data_inicial = :data_inicial - 1; if (:data_inicial < '01.01.2008') then tem_saldo = 1; end
--PEGA SALDO INICIAL (na data que foi encontrado o saldo)SELECT SALDO FROM saldos WHERE cod_conta = :codigo_conta and DATA = :data_inicial INTO :saldo_inicial;
--SOMA ENTRADAS (a partir de 1 dia apos a data do saldo)SELECT COALESCE(SUM(VALOR),0) AS TOTAL_ENTRADA FROM mov_bancaria mov, naturezas nat WHERE mov.cod_conta = :codigo_conta and mov.cod_natureza = nat.codigo and nat.entrada_saida = 'E' and data > :data_inicial INTO :total_entradas;
--SOMA SAIDASSELECT COALESCE(SUM(VALOR),0) AS TOTAL_ENTRADA FROM mov_bancaria mov, naturezas nat WHERE mov.cod_conta = :codigo_conta and mov.cod_natureza = nat.codigo and nat.entrada_saida = 'S' and data > :data_inicial INTO :total_saidas;
--ATUALIZA SALDO DA CONTA DO DIASELECT count(*) FROM saldos WHERE cod_conta = :codigo_conta and data = (SELECT cast ('now' as date) from rdb$database) into :saldo_exists;
If (:saldo_exists <= 0) then begin insert into SALDOS (DATA,COD_CONTA,SALDO) VALUES ((SELECT cast ('now' as date) from rdb$database),:codigo_conta,0); end
saldo_final = :saldo_inicial + :total_entradas - :total_saidas;
UPDATE saldos SET SALDO = :saldo_final WHERE cod_conta = :codigo_conta and data = (SELECT cast ('now' as date) from rdb$database); suspend;end^
Daniel
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)