Inserir data no sql com delphi

14/04/2009

boa tarde   A/C Rodrigo carreiro mourão   Ola Rodrigo tudo bem , estou de volta   mais facil que esse chamado aqui nem tem como   como eu faço para inserir data no delphi , estou te mandando o fonte do meu componente proc que estou usando em uma tela de cadastros            proc_CadMotoqueiro.Params[0].AsInteger := StrToInt(edtMatricula.Text);
    proc_CadMotoqueiro.Params[1].AsString := edtMotoqueiro.Text;
    proc_CadMotoqueiro.Params[2].AsInteger := StrToInt(edtidTurno.Text);
    proc_CadMotoqueiro.Params[3].AsInteger := StrToInt(edtidlogradouro.Text);
    proc_CadMotoqueiro.Params[4].AsString := edtNumero.Text;
    proc_CadMotoqueiro.Params[5].AsString := edtComplemento.Text;
    proc_CadMotoqueiro.Params[6].AsInteger := StrToInt(edtidBairro.Text);
    proc_CadMotoqueiro.Params[7].AsString := edtCep.Text;
    proc_CadMotoqueiro.Params[8].AsInteger := StrToInt(edtidcidade.Text);
    proc_CadMotoqueiro.Params[9].AsString := edtLocalNascimento.Text;
    proc_CadMotoqueiro.Params[10].AsString := edtUF.Text;
    proc_CadMotoqueiro.Params[11].AsString := edtTelefone.Text;
   proc_CadMotoqueiro.Params[12].AsString := FormatDateTime('yyyy/mm/dd ,dtpDataNascimento.Date);
    proc_CadMotoqueiro.Params[13].AsString := edtpai.Text;
    proc_CadMotoqueiro.Params[14].AsString := edtmae.Text;
    proc_CadMotoqueiro.Params[15].AsString := edtCategoriaCnh.Text;
    proc_CadMotoqueiro.Params[16].AsInteger := 1; //id do usuario
    proc_CadMotoqueiro.Params[17].AsString := edtEmail.Text;
    proc_CadMotoqueiro.Params[18].AsInteger := StrToInt(edtLimiteDebito.Text);
    proc_CadMotoqueiro.Params[19].AsString := edtCnh.Text;
  //  proc_CadMotoqueiro.Params[20].AsDateTime := StrToDateTime(edtValidadeCnh.Text);
    proc_CadMotoqueiro.Params[21].AsString := edtColete.Text;
    proc_CadMotoqueiro.Params[22].AsString := edtCelular.Text;
    proc_CadMotoqueiro.Params[23].AsInteger := StrToInt(edtidEstadocivil.Text);
    proc_CadMotoqueiro.Params[24].asstring := edtPlaca.Text;
    proc_CadMotoqueiro.Params[25].AsInteger := StrToInt(edtidCategoriaDiaria.Text);
    proc_CadMotoqueiro.Params[26].AsInteger := StrToInt(edtidmodelo.Text);
    proc_CadMotoqueiro.Params[27].AsInteger := StrToInt(edtidcor.Text);
    proc_CadMotoqueiro.Params[28].AsInteger := StrToInt(edtidConservacao.Text);
    proc_CadMotoqueiro.Params[29].AsInteger := StrToInt(edtiddocumentos.Text);
    proc_CadMotoqueiro.Params[30].AsInteger := StrToInt(edtIdveiculoMunicipio.Text);
    proc_CadMotoqueiro.Params[31].AsInteger := StrToInt(edtidlocalnascimento.Text);
    proc_CadMotoqueiro.Params[32].AsString := edtCPF.Text;
    proc_CadMotoqueiro.Params[33].AsString := edtIdentidade.Text;
    proc_CadMotoqueiro.Params[34].AsString := edtrgEmissor.Text;
 //   proc_CadMotoqueiro.Params[35].AsDateTime := StrToDateTime(edtrgDataexpedicao.Text);
    proc_CadMotoqueiro.Params[36].AsString := edtAno.Text;
    proc_CadMotoqueiro.ExecProc;
    ShowMessage('Motoqueiro cadastrado com sucesso !');     O erro aparece sempre no componente que precisa inserir uma data no banco ex data de nascimento e etc   Qual o melhor componente para se usar nesse caso ?   Vc poderia montar um exemplo para mim ?     abs
Carlos Faria

Carlos Faria

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

14/04/2009

Olá Carlos,
  Existe diversas formas de se inserir datas no Delphi.
  Ex :
  1 -  proc_CadMotoqueiro.Params[12].AsDate := dtpDataNascimento.Date;
  2 - proc_CadMotoqueiro.Params[12].AsString := FormatDateTime('yyyy/mm/dd' ,dtpDataNascimento.Date); ( este aqui é onde esta teu problema, você não colocou o ultimo " ' " >>> 'yyyy/mm/dd'

  Mas antes disso, qual é o banco de dados ? Qual é o formato de data do mesmo?
  dd/mm/yyyy ? yyyy-mm-dd? Você no FormatDateTime tem que passar o formato que seu banco suporta.

 Quanto ao melhor componente, o bom seria você usar o DateTimePicker, acho que você esta usando o mesmo, já!

Att,

Wesley  Y



GOSTEI 0
Carlos Faria

Carlos Faria

14/04/2009

Ola wesley funcionou com datetimepicutre   parametro (x).asdate := componentedatetime.data ; porem ficou meio estranho formulario pois ao abrir o mesmo ele ja vem com uma data por default ,acho que no meu caso aqui seria mesmo usar o mask edti ou em edit mesmo     meu banco e sqlserver 2005 developer edition e meu formato de data e yyyy/mm/dd      voce poderima me mostra um exemplo de como fazer ?      
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

14/04/2009

Olá Carlos,

  Vamos lá.
  1 - Coloque um maskedit no teu formulário, na propriedade EdtMask coloque o seguinte . !99/99/9999;1;_
  2 - Seguinte agora, na hora de salvar, vai ficar meio complexo mas é tranquilo;
           - proc_CadMotoqueiro.Params[12].AsString := Copy(MaskEdit1.Text, 7,4) + '/' + Copy(MaskEdit1.Text, 4,2) + '/' + Copy(MaskEdit1.Text, 1,2);

  3 - Motivo pelo qual estou usando o Copy, você na hora de digitar os dados geralmente digitamos, DD/MM/YYYY,  para os usuários fica mais facil, agora no nosso programa nos devemos tratar para poder mandar para nosso banco de dados, usando o Copy(yyyy), Copy(mm), Copy(DD)
  4 - Exemplo , se informarmos no MaskEdit 15/04/2009, o que será gravado no banco será 2009/04/15.


Espero que ajude.


Att,

Wesley Y
 
GOSTEI 0
Carlos Faria

Carlos Faria

14/04/2009

Olá Wesley   fiz como vc mostrou no exemplo esta dando um erro na hora de gravar     could not parse sql timestamp string
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

14/04/2009

Olá Carlos,
   Vamos primeiro por partes.
  1 -  Mude para datetime no lugar de  timestamp no SQLServer
  2 -  Params[12].Value := StrToDatetime(MaskEdt1.text)

Att,

Wesley Y

GOSTEI 0
Carlos Faria

Carlos Faria

14/04/2009

Olá wesley   agora sim deu tudo certo com uma unica linha de codigo      proc_CadMotoqueiro.Params[12].Value :=StrToDateTime(mskdataaniversario.Text);     simplesmento eu configurei o mask como vc me disse e acrescentei isso ai !! E isso mesmo ? Somente isso ?   Se for pode fechar o chamado amigo !
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

14/04/2009

Olá Carlos,
  Não é como dizem por ai "se compilou funcionou, rsrsr", to brincando mas é isso mesmo, esta certinho.
  Forte abraço amigo, espero poder ajudar em outros chamados.


Att,

Wesley Y
GOSTEI 0
POSTAR