Fórum Comparando Datas #47173
02/10/2004
0
Conversion error from string ´0´
Statement: execute procedure spr_duplicata(1, ´10/01/2004´, ´10/03/2004´, 10)
o q significa esse erro?
obrigado
Marvinla
Curtir tópico
+ 0Posts
02/10/2004
Afarias
T+
Gostei + 0
02/10/2004
Marvinla
estou executando assim:
execute procedure spr_duplicata(1, ´10/01/2004´, ´10/03/2004´, 10);
na tabela eu coloquei CTR_DTAVEN = 10/02/2004, mas não filtra.
ALTER PROCEDURE "SPR_DUPLICATA" ( "CODCLI" INTEGER, "DTAINI" DATE, "DTAFIN" DATE, "TXJUROS" FLOAT ) AS DECLARE VARIABLE JURDIARIO FLOAT; DECLARE VARIABLE TMP_NUMDUP INTEGER; DECLARE VARIABLE TMP_SEQUEN CHAR(1); DECLARE VARIABLE TMP_CODCLI VARCHAR(50); DECLARE VARIABLE TMP_CODREC INTEGER; DECLARE VARIABLE TMP_DTAVEN DATE; DECLARE VARIABLE TMP_VALDUP FLOAT; DECLARE VARIABLE TMP_VALORI FLOAT; DECLARE VARIABLE TMP_DTACAD DATE; DECLARE VARIABLE TMP_VALREC FLOAT; DECLARE VARIABLE TMP_VALJUR FLOAT; DECLARE VARIABLE TMP_VALDES FLOAT; DECLARE VARIABLE TMP_DESCOB FLOAT; DECLARE VARIABLE TMP_DTAREC DATE; DECLARE VARIABLE TMP_QTDPAR FLOAT; DECLARE VARIABLE TMP_CODVEN INTEGER; BEGIN DELETE FROM TMP$CADREC; FOR SELECT CTR_NUMDUP, CTR_SQUEN, CTR_CODCLI, CTR_CODREC, CTR_DTAVEN, CTR_VALDUP, CTR_VALORI, CTR_DTACAD, CTR_VALREC, CTR_VALJUR, CTR_VALDES, CTR_DESCOB, CTR_DTAREC, CTR_QTDPAR, CTR_CODVEN FROM CADREC WHERE (CTR_CODCLI = :CODCLI) AND (CTR_DTAVEN BETWEEN :DTAINI AND :DTAFIN) INTO :TMP_NUMDUP, :TMP_SEQUEN, :TMP_CODCLI, :TMP_CODREC, :TMP_DTAVEN, :TMP_VALDUP, :TMP_VALORI, :TMP_DTACAD, :TMP_VALREC, :TMP_VALJUR, :TMP_VALDES, :TMP_DESCOB, :TMP_DTAREC, :TMP_QTDPAR, :TMP_CODVEN DO BEGIN JURDIARIO = :TXJUROS / 30; IF (:TMP_DTAVEN > CAST(´NOW´ AS DATE)) THEN TMP_VALJUR = :TMP_VALDUP + (:TMP_VALDUP * (:JURDIARIO * (CAST(´NOW´ AS DATE) - :TMP_DTAVEN))); ELSE TMP_VALJUR = 0; INSERT INTO TMP$CADREC VALUES (:TMP_NUMDUP, :TMP_SEQUEN, :TMP_CODCLI, :TMP_CODREC, :TMP_CODREC, :TMP_DTAVEN, :TMP_VALDUP, :TMP_VALORI, :TMP_DTACAD, :TMP_VALREC, :TMP_VALJUR, :TMP_VALDES, :TMP_DESCOB, :TMP_QTDPAR, :TMP_CODVEN); END END ^
Obrigado
Gostei + 0
02/10/2004
Afarias
SELECT count(*) FROM CADREC
WHERE (CTR_CODCLI = 1) AND (CTR_DTAVEN BETWEEN ´10/01/2004´ AND ´10/03/2004´)
e verificou o resultado?
2) pq vc está usando uma tabela temporária?? algum motivo especial para não simplesmente fazer um procedimento ´selecionável´?
T+
Gostei + 0
02/10/2004
Marvinla
agora q não estou entendendo mais nada :(
eu fui no IBConsole e digitei um registro na CADREC especialmente pra testar, mas não esta retornando nenhum registro.
a data q eu cadastrei foi 10/02/04 e o CODCLI é 1.
qdo eu fiz :
SELECT * FROM CADREC
WHERE CTR_CODCLI = 1, deu td OK mas qdo eu fiz:
SELECT * FROM CADREC
WHERE CTR_DTAVEN BETWEEN ´10/01/2004´ AND ´10/03/2004´
não retornou nada.
Obrigado
Gostei + 0
02/10/2004
Afarias
vc entrou essa data com um INSERT ou editando ´direto nos dados´ (duplo-clique na tabela no IBConsole, guia Data) ??
Note q, o formato de dada usando barra como separador do IB é ´mm/dd/aaaa´ ou seja::
´10/01/2004´ = 1 de outubro
Entretanto, o grid de edição do IBConsole carrega a data como nas configurações de formato do seu micro (brasileiro acredito) e depois converte para o formato interno do IB, sendo assim, se vc entrar ´direto na tabela´ pelo IBConsole com a data ´10/02/04´ vai estar entrando ´10 de fevereiro´ :D
ou seja, se editar ´diretamente na tabela´ use ´02/10/04´ e se for dar um INSERT então use ´10/02/04´ ou ´02.10.04´
T+
Gostei + 0
02/10/2004
Marvinla
é o seguinte: eu tinha digitado grid, entao estava errado msm, pq eu queria 1 de outubro. bom então eu corrigi e coloquei 01/10/2004 no grid. bom, mas qdo eu executo a procedure dá o erro:
EXECUTE PROCEDURE SPR_DUPLICATA(1, ´10/01/2004´, ´10/03/2004´, 0);
Conversion error from string ´0´
Statement: EXECUTE PROCEDURE SPR_DUPLICATA(1, ´10/01/2004´, ´10/03/2004´, 0)
PS: esse negocio de data é F$@#@, hehehe
Obrigado, e desculpe pelo tormento
vlw!
Gostei + 0
02/10/2004
Afarias
1) vc só deve colocar : antes das variáveis ou parâmetros dentro de um select, fora não.
Ex:
JURDIARIO = :TXJUROS / 30;
ficaria::
JURDIARIO = TXJUROS / 30;
2) no lugar de CAST(´NOW´ AS DATE) vc poderia usar CURRENT_DATE, ex:
IF (TMP_DTAVEN > CURRENT_DATE) THEN
3) tome cuidado para q os parâmetros envolvidos em condição e cálculos (código abaixo em vermelho) não estejam nulos
IF ([color=red:7e29b6adea]TMP_DTAVEN[/color:7e29b6adea] > CURRENT_DATE) THEN
TMP_VALJUR = [color=red:7e29b6adea]TMP_VALDUP[/color:7e29b6adea] + ([color=red:7e29b6adea]TMP_VALDUP[/color:7e29b6adea] * (JURDIARIO * (CURRENT_DATE - [color=red:7e29b6adea]TMP_DTAVEN[/color:7e29b6adea])));
4) tb verifique se os campos passados para os parâmetros (e os campos q recebem os parâmetros) são compatíveis em tipo e tamanho
T+
Gostei + 0
02/10/2004
Marvinla
hj num é msm meu dia :( ...
num deu certo não, eu retirei todos os : desnecessários. Conferi a tabela novamente e todos os campos estão preenchidos.
eu to pensando em reescrever essa procedure, to tentando ver isso desde as 2 da tarde.
se vc ou alguem tiver outra ideia poste ae, plissssss...
novamente, Obrigado e desculpe o incomodo
vlws
Gostei + 0
02/10/2004
Afarias
Outra coisa, note q no INSERT nesta tabela vc não identificou os campos de entrada, sendo q então é bom ver direitinho se os campos estão na ordem certinha (eu prefiro sempre definir os campos!)
T+
Gostei + 0
02/10/2004
Marvinla
Conversion error from string ´0´
Deixa só eu perguntar: qual o critério pra se usar Stored Procedures? pq eu poderia fazer essa função no Delphi msm. Eu to tentando fazer usando procedures pq eu comecei a trampar essa semana, e é meu 1º emprego, e lá essa função é feita usando procedures...
qual seria o critério para usar procedures?
vlws!
Gostei + 0
02/10/2004
Afarias
Mas tb ainda não consegui ver onde está o erro :(
Bom, por desencargo, passa um gfix na tua base tá?
gfix -v -f base.gdb
T+
Gostei + 0
02/10/2004
Marvinla
Mto Obrigado!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)