Array
(
)

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

Laelsonc
   - 18 fev 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 ..


M
   - 19 fev 2006

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


Laelsonc
   - 19 fev 2006

Cara, não entendi não.

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

#Código

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 ??


Laelsonc
   - 19 fev 2006

ops...

#Código

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;



Laelsonc
   - 20 fev 2006

Alguem por ai ??


Marco Salles
   - 20 fev 2006

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..

Citação:
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:

#Código

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


Laelsonc
   - 20 fev 2006

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


Marco Salles
   - 20 fev 2006

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


Fknyght
   - 20 fev 2006

Usa o FormatDateTime

#Código


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;



Marco Salles
   - 21 fev 2006

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

#Código

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;



Laelsonc
   - 21 fev 2006

A sugestão do fknyght, 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.


Marco Salles
   - 21 fev 2006


Citação:
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.