Qual o segredo com campos data no IB?
Estou utilizando D4/DBE/Data Module/Stored Procedures/IB5
Para as datas ja componentes ja utilizei DatePicker, atualmente estou
utilizando MaskEdits.
Pesquisando nas documentacoes do IB e em algumas revistas, descobri
que o fato que as passar datas como parametros para as Stored Procedures
usando pontos como separador, indica para o IB que estou utilizando a
data no formato ddmmyyyy.
Fazendo assim, a data eh gravada na tabela com o ano faltando dois digitos
exemplo 28/08/ 20, como espacos.
Dentro das procedures utilizo o CAST(). Exemplo:
// A data eh recebida como char
pDATAEMI CHAR(10)
UPDATE TABELA SET DATA_EMI:=CAST( pDATA_EMI as DATE )
Alguem sabe me dizer como utilizar corretamente datas no IB com procedures?
Para as datas ja componentes ja utilizei DatePicker, atualmente estou
utilizando MaskEdits.
Pesquisando nas documentacoes do IB e em algumas revistas, descobri
que o fato que as passar datas como parametros para as Stored Procedures
usando pontos como separador, indica para o IB que estou utilizando a
data no formato ddmmyyyy.
Fazendo assim, a data eh gravada na tabela com o ano faltando dois digitos
exemplo 28/08/ 20, como espacos.
Dentro das procedures utilizo o CAST(). Exemplo:
// A data eh recebida como char
pDATAEMI CHAR(10)
UPDATE TABELA SET DATA_EMI:=CAST( pDATA_EMI as DATE )
Alguem sabe me dizer como utilizar corretamente datas no IB com procedures?
Torres Delphi
Curtidas 0
Respostas
Afarias
18/08/2003
Bom, com IB 5 não tenho plena certesa mas...
Seus parâmetros devem ser TIMESTAMP e não CHAR!
vc pode dar um cast tipo: cast(campo_timestamp as date)
quando inserir parâmetros via Delphi utilize as funções AsDate ou AsDateTime, se for usar direto no select, formate a string como:
´mm/dd/yyyy´
As datas não são armazenadas com 2 dígitos (na verdade a data é só um número de ponto flutuante)
T+
Seus parâmetros devem ser TIMESTAMP e não CHAR!
vc pode dar um cast tipo: cast(campo_timestamp as date)
quando inserir parâmetros via Delphi utilize as funções AsDate ou AsDateTime, se for usar direto no select, formate a string como:
´mm/dd/yyyy´
As datas não são armazenadas com 2 dígitos (na verdade a data é só um número de ponto flutuante)
T+
GOSTEI 0
Torres Delphi
18/08/2003
Eu ja tentei usando as datas parametro como DATE ou TIMESTAMP.
No SQL SERVER, o uso do CAST/CONVERT transforma qq dado em outro formato. Ou seja, eu posso mandar uma data como CHAR que o CAST/CONVERT transforma em DATE ou qq outro tipo. Penso que no IB sera da mesma forma.
Quanto a quantidade de digitos no ano, conforme conf regionais, estao com 4. As insercoes com o uso da procedure esta gerando dois espacos e depois 20.
Fiz um insert pelo manual e funcionou com o usando: CAST( ´31.08.2003´ AS DATE). Entao se funcionou pelo fiz igual no programa, mas tive os problemas que relatei.
Bom qq forma, vou tentar novamente como me sugeriu.
No SQL SERVER, o uso do CAST/CONVERT transforma qq dado em outro formato. Ou seja, eu posso mandar uma data como CHAR que o CAST/CONVERT transforma em DATE ou qq outro tipo. Penso que no IB sera da mesma forma.
Quanto a quantidade de digitos no ano, conforme conf regionais, estao com 4. As insercoes com o uso da procedure esta gerando dois espacos e depois 20.
Fiz um insert pelo manual e funcionou com o usando: CAST( ´31.08.2003´ AS DATE). Entao se funcionou pelo fiz igual no programa, mas tive os problemas que relatei.
Bom qq forma, vou tentar novamente como me sugeriu.
GOSTEI 0
Afarias
18/08/2003
|No SQL SERVER, o uso do CAST/CONVERT transforma qq dado em outro
|formato. Ou seja, eu posso mandar uma data como CHAR que o
|CAST/CONVERT transforma em DATE ou qq outro tipo. Penso que no IB
|sera da mesma forma.
E É! vc pode fazer (por ex): cast(´12/31/02´ as TIMESTAMP)
|Quanto a quantidade de digitos no ano, conforme conf regionais, estao
|com 4. As insercoes com o uso da procedure esta gerando dois espacos
|e depois 20.
Não entendi. Não se preocupe com os dígitos do ano, como disse isso é só um formato de apresentação.
|Fiz um insert pelo manual e funcionou com o usando: CAST( ´31.08.2003´
|AS DATE). Entao se funcionou pelo fiz igual no programa, mas tive os
|problemas que relatei.
Certo, ´dd.mm.yyyy´ é um dos formatos válidos, como é ´mm/dd/yyyy´
Quanto a seu procedimento não funcionar... é melhor vc postar mais informações, ainda não entendi o q vc está fazendo (ou tentando fazer)
T+
|formato. Ou seja, eu posso mandar uma data como CHAR que o
|CAST/CONVERT transforma em DATE ou qq outro tipo. Penso que no IB
|sera da mesma forma.
E É! vc pode fazer (por ex): cast(´12/31/02´ as TIMESTAMP)
|Quanto a quantidade de digitos no ano, conforme conf regionais, estao
|com 4. As insercoes com o uso da procedure esta gerando dois espacos
|e depois 20.
Não entendi. Não se preocupe com os dígitos do ano, como disse isso é só um formato de apresentação.
|Fiz um insert pelo manual e funcionou com o usando: CAST( ´31.08.2003´
|AS DATE). Entao se funcionou pelo fiz igual no programa, mas tive os
|problemas que relatei.
Certo, ´dd.mm.yyyy´ é um dos formatos válidos, como é ´mm/dd/yyyy´
Quanto a seu procedimento não funcionar... é melhor vc postar mais informações, ainda não entendi o q vc está fazendo (ou tentando fazer)
T+
GOSTEI 0
Torres Delphi
18/08/2003
Cara nem eu entendo pq isso nao esta funcionando.
Pra vc ter uma ideia, ontem eu criei um projeto que faz insercoes numa tabela teste. Fiz testes usando edit, dbedit e datetimepicker. Procurei no site do CD, apostilas e nos .pdf´s do IB mas nao encontrei exemplos de procedures de inclusao com datas.
Tenho algumas duvidas:
- Como passar o parametro (qdo campo data) para a procedure? Qual componente usar no Delphi?
- Na procedure, como receber com DATE? (TIMESTAMP nao eh suportavel no IB5)
Ontem, a procedure foi executada pelo programa sem criticas, mas nao salvou na tabela. Estou comecando a achar que tem algum problema com a procedure que fiz para inserir os dados. Eu esqueci de mandar o exemplo pra colocar aqui no forum, mas tudo bem?
Sera que vc tem um exemplo de procedure de insercao com datas para passar? Acho que seria mais produtivo.
Cara, de antemao, quero agradecer a atencao, ja que nao consegui respostas em outros foruns.
[]´s
Pra vc ter uma ideia, ontem eu criei um projeto que faz insercoes numa tabela teste. Fiz testes usando edit, dbedit e datetimepicker. Procurei no site do CD, apostilas e nos .pdf´s do IB mas nao encontrei exemplos de procedures de inclusao com datas.
Tenho algumas duvidas:
- Como passar o parametro (qdo campo data) para a procedure? Qual componente usar no Delphi?
- Na procedure, como receber com DATE? (TIMESTAMP nao eh suportavel no IB5)
Ontem, a procedure foi executada pelo programa sem criticas, mas nao salvou na tabela. Estou comecando a achar que tem algum problema com a procedure que fiz para inserir os dados. Eu esqueci de mandar o exemplo pra colocar aqui no forum, mas tudo bem?
Sera que vc tem um exemplo de procedure de insercao com datas para passar? Acho que seria mais produtivo.
Cara, de antemao, quero agradecer a atencao, ja que nao consegui respostas em outros foruns.
[]´s
GOSTEI 0
Afarias
18/08/2003
|Cara nem eu entendo pq isso nao esta funcionando.
Ahh... então agora nos entendemos!! :wink:
|- Como passar o parametro (qdo campo data) para a procedure?
DataSet.ParamByName(´parametro_data´).AsDate := MinhaData;
|Qual componente usar no Delphi?
Depende, pode ser qualquer Query ou StoredProc. Se o procedimento é executável, use um StoredProc.
|Na procedure, como receber com DATE? (TIMESTAMP nao eh suportavel
|no IB5)
Defina como tal (timestamp). o IB 5 não suporta o tipo DATE más sim o TIMESTAMP.
|{...} a procedure que fiz para inserir os dados. Eu esqueci de mandar o
|exemplo pra colocar aqui no forum, mas tudo bem?
seria bom poder ver a procedure para poder dizer algo
|Sera que vc tem um exemplo de procedure de insercao com datas para
|passar? Acho que seria mais produtivo.
create table minha_tabela (
campo_data timestamp );
set term ^;
create procedure inserir_data (data timestamp) as
begin
insert into minha_tabela (campo_data) values (:data);
end^
T+
Ahh... então agora nos entendemos!! :wink:
|- Como passar o parametro (qdo campo data) para a procedure?
DataSet.ParamByName(´parametro_data´).AsDate := MinhaData;
|Qual componente usar no Delphi?
Depende, pode ser qualquer Query ou StoredProc. Se o procedimento é executável, use um StoredProc.
|Na procedure, como receber com DATE? (TIMESTAMP nao eh suportavel
|no IB5)
Defina como tal (timestamp). o IB 5 não suporta o tipo DATE más sim o TIMESTAMP.
|{...} a procedure que fiz para inserir os dados. Eu esqueci de mandar o
|exemplo pra colocar aqui no forum, mas tudo bem?
seria bom poder ver a procedure para poder dizer algo
|Sera que vc tem um exemplo de procedure de insercao com datas para
|passar? Acho que seria mais produtivo.
create table minha_tabela (
campo_data timestamp );
set term ^;
create procedure inserir_data (data timestamp) as
begin
insert into minha_tabela (campo_data) values (:data);
end^
T+
GOSTEI 0
Torres Delphi
18/08/2003
Eh A. Farias,
Estou levando seus comentarios para casa e vou tentar dessa forma, amanha teremos mais sobre o assunto.
[]´s
Estou levando seus comentarios para casa e vou tentar dessa forma, amanha teremos mais sobre o assunto.
[]´s
GOSTEI 0
Torres Delphi
18/08/2003
Agora deu certo!!!!!
Comparei o seu exemplo com o q eu tinha e percebi algumas diferencas.
O tipo TIMESTAMP foi criticado no IB5. Reclamava que o tipo de dado nao eh suportado.
A minha procedure de inclusao, tinha umas ´sujeiras´ herdadas de uma procedure selecionavel que peguei como exemplo (materia da CD #39). Sobravam um comando WHEN e um SUSPEND.
Alem disso, nos testes que fiz usando o CAST, mudei o tipo de parametro da minha StoredProc, ou seja, estava passando o parametro como CHAR, pois tb tentei passei da data com esse tipo (Tem coisas que a gente tenta qdo nada mais da certo e acaba dando nisso!!!).
Dropei a procedure, ajustei-a, rodei-a novamente, e mudei o parametro do campo data e tudo funcionou, seja usando DateTimepicker, dbEdit, ou um simples edit para o campo data.
Obrigado pela atencao, brevemente aparecerei com novas duvidas, mas isso eh pra outro topico
[]´s
Comparei o seu exemplo com o q eu tinha e percebi algumas diferencas.
O tipo TIMESTAMP foi criticado no IB5. Reclamava que o tipo de dado nao eh suportado.
A minha procedure de inclusao, tinha umas ´sujeiras´ herdadas de uma procedure selecionavel que peguei como exemplo (materia da CD #39). Sobravam um comando WHEN e um SUSPEND.
Alem disso, nos testes que fiz usando o CAST, mudei o tipo de parametro da minha StoredProc, ou seja, estava passando o parametro como CHAR, pois tb tentei passei da data com esse tipo (Tem coisas que a gente tenta qdo nada mais da certo e acaba dando nisso!!!).
Dropei a procedure, ajustei-a, rodei-a novamente, e mudei o parametro do campo data e tudo funcionou, seja usando DateTimepicker, dbEdit, ou um simples edit para o campo data.
Obrigado pela atencao, brevemente aparecerei com novas duvidas, mas isso eh pra outro topico
[]´s
GOSTEI 0