DATA: 00/00/0000 para 0000/00/00

18/02/2006

Montei uma table temporária e nela tem um campo data_vencimento.

FieldKind : FKdata
DisplayFormat : dd/mm/yyyy
EditMask: !99/99/0000;1;_


Quando faço a rotina pra inserir no banco de dados ( MySQL, um campo DATE ) ele imprime a data errada porque no MySQL ele interpreta 0000/00/00.

Como faço para jogar invertido isso ai ? Ou para reconhecer a data ? Ja tentei com os DateToStr da vida mas nada...

Valeus ..


Laelsonc

Respostas

19/02/2006

M

ADICIONE NO QUERY
Add(´Where(Andamento.AND_DATAPUB >= ´´+FormatDateTime(´mm/dd/yyyy´, StrToDate(FQdataintervpub.MaskEdit1.Text)) + ´´)´);
Add(´and (Andamento.AND_DATAPUB <= ´´+FormatDateTime(´mm/dd/yyyy´, StrToDate(FQdataintervpub.MaskEdit2.Text)) + ´´)´);

obs:MaskEdit1.Text = DD/MM/AAAA


Responder Citar

19/02/2006

Laelsonc

Cara, não entendi não.

To inserindo no banco assim, com um processor do Zeos.

  with Md.processor do
  begin

    Script.Text := ´INSERT INTO conta_receber´+
    ´(cont_rec_vencimento,´+

    ´,´+QuotedStr(table_temp.FieldByName(´conta_rec_numero´).AsString)+
     ´);´;
    Execute;
    end;


O table_temp é uma tabela temporária do ClientDataset, que pode ser visualizada num grid, caso o usuário queira mudar o vencimento.
Ao inserir, a data vai errada.

Alguem pode me ajudar ??


Responder Citar

19/02/2006

Laelsonc

ops...

  with Md.processor do
  begin

    Script.Text := ´INSERT INTO conta_receber´+
    ´(cont_rec_vencimento)VALUES(´+

    QuotedStr(table_temp.FieldByName(´conta_rec_numero´).AsString)+
     ´);´;
    Execute;
    end;



Responder Citar

20/02/2006

Laelsonc

Alguem por ai ??


Responder Citar

20/02/2006

Marco Salles

sem pretenção amigo , eu não mancho nada de MySQL , alias eu não manjo nada de nada.. Mas tento dar umas cacetadas

eu não sei tb se na hora da apresentar esses dados para o usuário , a maneira de como estar configurado as configuraçoes regionais prevalece

A primeira idéia que eu tenho , é que as configuraçoes regionais , alteram diretamente a apresentação dos dados , pelo menos em algumas situaçoes isto pode ser verdade

A outra idéia que eu tenho , é manipular o evento OngetText do tfield..
OngetText é o momento que nos temos a oportunidade de pegar a informação que esta vindo do Tfield antes de ir para a tela do usuário a interface (Controle Data_Ware).. Nos podemos nesse evento dar uma diferente Saida para aquel campo , aquela informaçao , fazer um teste , ocultar determinado valor , formatar determinados textos e assim por diante

como eu escrevi em outro tópico...

Tipo isso:

procedure TForm1.Table1DataGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
if sender.AsString <> ´´ then
text:=FormatDateTime(´yyyy/MM/dd´,sender.AsDateTime);
end;


o inconveniente desse ultimo é que so vale para exibição , se voce quiser
gravar novos dados tem que manipular o evento OsetTeste e fazer o passo contrário

Mas certamente se voce testar o codigo acima , os seu dados irao aparecer na formatação correta


Responder Citar

20/02/2006

Laelsonc

Pessoal, meu problema é so ao inserir, visualiza legal, so quero saber como inserir invertido.
Tipo no grid com a configurações acima:
Entra assim:

2022-03-20


Responder Citar

20/02/2006

Marco Salles

porque primeiro voce não altera sua configuraçoes regionais , via delphi,


Responder Citar

20/02/2006

Fknyght

Usa o FormatDateTime

 with Md.processor do 
     begin 

    Script.Text := ´INSERT INTO conta_receber´+ 
    ´(cont_rec_vencimento)VALUES(´+ 

    FormatDateTime(´yyyy-mm-dd´,table_temp.FieldByName(´conta_rec_numero´).AsDate))+ 
     ´);´; 
    Execute; 
    end;



Responder Citar

21/02/2006

Marco Salles

como eu disse anteriormente eu não sei nada de MySQL , to respondendo ,porque a prinicipio ninguem respondeu e tb to apredendo...
Reconheço que o campo date no MySQL tem esta formatação (ano-mes-dia´ e dai causar um certo transtorno

mas como eu disse anteriormente o evento onsetText serve para efetuar formataçoes , da interface do usuario para a gravação efetiva do campo

então tente isso , mas por favor comunique os resultados para que possamos aprender juntos

procedure TForm1.Table1DataSetText(Sender: TField; const Text: String);
var
ano,mes,dia:string;
begin
if text <> ´´ then
  begin
   mes:=copy(text,1,2);
   mes:=copy(text,4,2);
   ano:=copy(text,7,4);
   sender.AsString:=ano+´-´+mes+´-´+dia;
  end;
end;



Responder Citar

21/02/2006

Laelsonc

A sugestão do [b:c004c8f79d]fknyght[/b:c004c8f79d], apesar de eu ja ter visto antes e por algum motivo meu não funcionou, agora tah ok. Funciona direitinho.
Quanto ao amigo Marcos Sales, valeu a ajuda, do seu jeito funciona sim, so que é uma gambiarra né. Mas se não resolvesse de outro jeito ia usar..rsrs.

Valeu amigos, até a proxima. Que com certeza será breve.


Responder Citar

21/02/2006

Marco Salles

Quanto ao amigo Marcos Sales, valeu a ajuda, do seu jeito funciona sim, so que é uma gambiarra né. Mas se não resolvesse de outro jeito ia usar..rsrs.


não .. não é uma gambiarra... se voce souber a função nativa do delphi que transforma a string (dd/mm/yyyy) para (yyyy-mm-dd) voce simplesmente chamaria a função

Não . Não é uma gambiarra ... Muito pelo contrário , aqui se tem uma excelente oportunidade para mostrar a atuação do evento OnsetText , muito pouco utilizado mas de grande valia

O fato que as pessoas tem uma certa aversão sobre algumas funçoes por nos mesmo desenvolvidos... Entre a versão do nativa do delphi e a versão desnvolvida por alguem , tem-se a escolha imediata pela nativa do delphi..

Mas não deveria ser assim.. Vou dar um exemplo prático a função
MonthsBetween Da Unit DateUtils retorna a diferença de dias entre duas datas.
Porem o amigo emerson.en desenvolveu uma função que retorna tb a diferença entre datas.
so que o que pouca gente sabe é que a função nativa do delphi trabalha com uma média e muitas das vezes o retorno do seu valor pode ser considerado um erro , como ja foi tema de discusão aqui no proprio site

http://forum.devmedia.com.br/viewtopic.php?t=36022&highlight=monthsbetween&sid=59ab2f15f1b3178021885c75d10b938b

infelismente este site esta quebrado e não tem as mensagens do emerson.en

o fato é o seguinte:

A sugestão do fknyght, funcionou.. Beleza , sow de bola. Mas pr favor , não encare a construção de uma função como gambiarra . Nos desenvolvedores , muitas das vezes temos uma versão desatualizada do delphi e temos que criar uma própria função ou não conhecemos todas as funçoes disponiveis..
E a função criada por nos , em versões futuras são incorporadas ao Delphi.. Mas nos bastidores elas fazem a mesma coisa so não tem o nome bonito.


Responder Citar