Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) problema = Data e SQL


dan_visualdm

Pergunta

pessoal, boa tarde!

estou com um probleminha aqui com a data ao executar um SQL.

MEU BD é Access.

Primeiro: Eu precisava que meu DBEdit ficasse formatado pra receber a data, assim: / / (00/00/0000) então eu fui no DataModule, ADOQuery, dei 2 clique, apertei CTRL+F (para aparecer td campos) ai selecionei o campo data, fui no EditMask e formatei da seguinte forma: !99/99/9999;1;_

bom até ai tudo bem, o DBdit ficou formatado da forma que eu precisava.

Problema: se eu coloca uma data 12/12/2008 por exemplo esse erro não acontece, MAS se eu colocar 01/02/2009 quando gravo no banco ele salva assim 1/2/2009 e se eu entro pra editar o DBEdit fica assim: _1/_2/2009. E é ai então que acontece o problema, quando uso o SQL pra transferir esses dados de uma tabela pra outra. porque como o campo está determinado como DATA ele num aceita esse _ e o meu campo não pode ser texto porque senao não consigo organizar em ordem crescente (asc).

como faço pra resolver isso?

o SQL que estou usando pra transferir

begin
dm.q_servicos_fim.Close;
dm.q_servicos_fim.SQL.Clear;
dm.q_servicos_fim.SQL.Add('Insert into tbl_servicos_fim(cod_servico,data_entrada,data_entrega,servico,valor,desc_servico,empresa,responsavel,telefone,celular,email,info_adcionais,data_fim,usuario) values ('''+f_ordem_de_servico.DBEdit1.Text+''','''+f_ordem_de_servico.DBEdit2.Text+''','''+f_ordem_de_servico.DBEdit3.Text+''','''+f_ordem_de_servico.DBLookupComboBox1.Text+''','''+f_ordem_de_servico.DBEdit4.Text+''','''+f_ordem_de_servico.DBMemo1.text+''','''+f_ordem_de_servico.DBEdit11.Text+''','''+f_ordem_de_servico.DBEdit7.Text+''','''+f_ordem_de_servico.DBEdit8.Text+''','''+f_ordem_de_servico.DBEdit9.Text+''','''+f_ordem_de_servico.DBEdit10.Text+''','''+f_ordem_de_servico.DBMemo2.text+''','''+DB_fim.text+''','''+f_carrega.label1.caption+''')');
dm.q_servicos_fim.ExecSQL;
f_finalizar_servico.showmodal;
close;
end;

talves a solução seria se ele não tirasse o 0 e gravasse assim 01/02/2009

qual solução?

obrigado pessoal....

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

a) Na unit do seu projeto, coloca, antes de mais nada,

ShortDateFormat := 'dd/mm/yyyy';

isso irá afetar todos os campos de variáveis tipo data da aplicação...

B) Quanto às queries, passo a dica, apenas, de organizar em mais de uma linha o seu código sql... eu faria assim:

with dm.q_servicos_fim do begin
  Close;
  SQL.Clear;
  Add('Insert into tbl_servicos_fim ');
  Add('(cod_servico, data_entrada, data_entrega, servico, valor, desc_servico, ');
  Add(' empresa, responsavel, telefone, celular, email, info_adcionais, ');
  Add(' data_fim, usuario) ');
  Add('values ');
  Add('"'+f_ordem_de_servico.DBEdit1.Text+'", "'+f_ordem_de_servico.DBEdit2.Text+'", "'+f_ordem_de_servico.DBEdit3.Text+'", ');
  Add('"'+f_ordem_de_servico.DBLookupComboBox1.Text+'", "'+f_ordem_de_servico.DBEdit4.Text+'", "'+f_ordem_de_servico.DBMemo1.text+'", "'+f_ordem_de_servico.DBEdit11.Text+'", ');
  Add('"'+f_ordem_de_servico.DBEdit7.Text+'", "'+f_ordem_de_servico.DBEdit8.Text+'", "'+f_ordem_de_servico.DBEdit9.Text+'", "'+f_ordem_de_servico.DBEdit10.Text+'", ');
  Add('"'+f_ordem_de_servico.DBMemo2.text+'", "'+DB_fim.text+'", "'+f_carrega.label1.caption+'")');
  SQL.SaveToFile('c:\temp\testar.sql');
  Try
    ExecSQL; 
  Except
    ShowMessage('teste a query "c:\temp\testar.sql" no DbExplorer!');
  End;
End;{With dm.q_servicos_fim}

Ok?

Espero ter ajudado!

Um feliz Natal e um feliz 2009!

Link para o comentário
Compartilhar em outros sites

  • 0

olá amigo...

poxa, desculpe-me... mas de verdade, não entedi!

como assim na unit do meu projeto??

e depois que eu colocar isso, eu posso deixar a formatação dentro do ADOQuery não é??

poxa, preciso tanto disso funcionando e não consigo de jeito nenhum...

obrigado! e um ótimo 2009!

Link para o comentário
Compartilhar em outros sites

  • 0
a) Na unit do seu projeto, coloca, antes de mais nada,

ShortDateFormat := 'dd/mm/yyyy';

poxa, desculpe-me... mas de verdade, não entedi!

como assim na unit do meu projeto??

explicando...

Este procedimento garante que qualquer conversão de campos tipo data para string seja feito utilizando este formato, ou seja, a data 1/2/2009, será convertida em string 01/02/2009 (usando as funções de formatação).

A únit do seu projeto a que o colega se refere é a do seu form principal. Voce pode colocar esta atribuição no evento OnCreate do form (para não complicar muito).

B ) Quanto às queries, passo a dica, apenas, de organizar em mais de uma linha o seu código sql...
realmente paulobergo, é quase impossível a leitura do código :)

Também poderíamos sugerir ao colega dan_visualdm que use parametrização (há vários tópicos sobre este assunto).

Primeiro: Eu precisava que meu DBEdit ficasse formatado pra receber a data, assim: / / (00/00/0000) então eu fui no DataModule, ADOQuery, dei 2 clique, apertei CTRL+F (para aparecer td campos) ai selecionei o campo data, fui no EditMask e formatei da seguinte forma: !99/99/9999;1;_

bom até ai tudo bem, o DBdit ficou formatado da forma que eu precisava.

Na verdade não deve ter ficado não.

Para modificar a forma como um campo do dataset, do tipo data, é apresentada na tela, voce deve usar a propriedade DisplayFormat do campo (field) em questão e, para este caso, a string de formatação seria: dd/mm/yyyy.

Já a propriedade EditMask é uma máscara utilizada para formatar a edição do campo. Vai definir a formatação da entrada de dados, que tipo de caracteres são aceitos e coisas assim (na janela Object Inspetor, tecle F1 nesta propriedade e veja o que mostra o help).

Problema: se eu coloca uma data 12/12/2008 por exemplo esse erro não acontece, MAS se eu colocar 01/02/2009 quando gravo no banco ele salva assim 1/2/2009 e se eu entro pra editar o DBEdit fica assim: _1/_2/2009.
Esta aparência é fruto da máscara de edição. Quando você deixa o campo, ele deve estar ficando formatado corretamente.

A forma de você contornar isto na sua atribuição (concatenação) é remover estes caracteres através do uso da função StringReplace. Por exemplo, para retornar uma string com o texto do DBEdit2 sem o caracter "_", substituimos ele por um "nada" (ou seja, removê-lo), usariamos assim:

texto_sem_sublinha := StringReplace(DBEdit2.Text, '_','', [rfReplaceAll]);

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

poxa amigos... muito obrigado pelas explicações!

o legal é que só não funcionou, como também entendi o porque de tudo!!

segui o conselho de vocês, dei uma pesquisada aqui no forum e agora organizei meu codigo... realmente fica bem melhor e mais fácil de trabalha!!

e agora o problema meu, em fim foi resolvido!! estava precisando muito disso!!

mais uma vez obrigado!!!

abraços a todos e um ótimo 2009!!!!

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...