Comparando Datas
pessoal, eu comecei a estudar interbase essa semana. estou com o seguinte erro:
Conversion error from string ´0´
Statement: execute procedure spr_duplicata(1, ´10/01/2004´, ´10/03/2004´, 10)
o q significa esse erro?
obrigado
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
Curtidas 0
Respostas
Afarias
02/10/2004
Erro de conversão :roll: -- qual o código do stored proc?
T+
T+
GOSTEI 0
Marvinla
02/10/2004
kra, agora o negocio é o seguinte, não tá mais dando esse erro, porem não está filtrando as datas corretamente.
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.
Obrigado
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
Afarias
02/10/2004
1) vc já entrou no IBConsole (ou outra ferramenta) e executou::
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+
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
Marvinla
02/10/2004
entao afarias,
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
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
Afarias
02/10/2004
|a data q eu cadastrei foi 10/02/04 e o CODCLI é 1.
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+
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
Marvinla
02/10/2004
afarias,
é 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!
é 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
Afarias
02/10/2004
:D o problema agora não é a data! Não estava dando erro pq como não tinha restorno o procedimento não estava realizando os ´cálculos´... bom, eu não estou vendo exatamente onde está o erro mas... veja só::
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+
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
Marvinla
02/10/2004
putz afarias,
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
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
Afarias
02/10/2004
Alguma trigger ou constraint na tabela TMP$CADREC ??
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+
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
Marvinla
02/10/2004
afarias, a tabela TMPP$CADREC é uma cópia identica da CADREC. Bom, msm assim eu identifiquei os campos da tabela. mas continua o erro:
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!
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
Afarias
02/10/2004
Bom, procedimentos são legais para processar dados no servidor, desocupar a rede e manter as regras bem definidas. Eu só não entendo o pq da tabela temporária -- isso não é legal em sistemas C/S
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+
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
Marvinla
02/10/2004
eae, só pra finalizar esse tópico, hj eu vo reescrever a procedure, até mais.
Mto Obrigado!
Mto Obrigado!
GOSTEI 0