DATA: 00/00/0000 para 0000/00/00
18/02/2006
0
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
Posts
19/02/2006
M
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
19/02/2006
Laelsonc
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 ??
19/02/2006
Laelsonc
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;
20/02/2006
Marco Salles
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..
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
20/02/2006
Laelsonc
Tipo no grid com a configurações acima:
Entra assim:
2022-03-20
20/02/2006
Marco Salles
20/02/2006
Fknyght
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;
21/02/2006
Marco Salles
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;
21/02/2006
Laelsonc
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.
21/02/2006
Marco Salles
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.
Clique aqui para fazer login e interagir na Comunidade :)