Insert utilizando TSQLQuery

Delphi

03/02/2006

Pessoal, estou com um problema com o seguinte código:

    SQLQuery.SQL.Add(´INSERT INTO PRONTUARIO VALUES(´);
    SQLQuery.SQL.Add(´:CODIGOSAME,´);
    SQLQuery.SQL.Add(´:NOME,´);
    SQLQuery.SQL.Add(´:DATANASCIMENTO,´);
    SQLQuery.SQL.Add(´:SEXO,´);
    SQLQuery.SQL.Add(´:ESTADOCIVIL,´);
    SQLQuery.SQL.Add(´:PARENTESCO,´);
    SQLQuery.SQL.Add(´:CPF,´);
    SQLQuery.SQL.Add(´:TIPOPRONTUARIO,´);
    SQLQuery.SQL.Add(´:MOTIVO,´);
    SQLQuery.SQL.Add(´:DATASAME,´);
    SQLQuery.SQL.Add(´:DATAULTIMAALTERACAO)´);
    if _CODIGOSAME = ´´ then
      SQLQuery.ParamByName(´CODIGOSAME´).Value := null
    else
      SQLQuery.ParamByName(´CODIGOSAME´).Value := _CODIGOSAME;
    if _NOME = ´´ then
      SQLQuery.ParamByName(´NOME´).Value := null
    else
      SQLQuery.ParamByName(´NOME´).Value := _NOME;
    if _DATANASCIMENTO = 0 then
      SQLQuery.ParamByName(´DATANASCIMENTO´).Value := null
    else
      SQLQuery.ParamByName(´DATANASCIMENTO´).Value := _DATANASCIMENTO;
    if _SEXO = ´´ then
      SQLQuery.ParamByName(´SEXO´).Value := null
    else
      SQLQuery.ParamByName(´SEXO´).Value := _SEXO;
    if _ESTADOCIVIL = 0 then
      SQLQuery.ParamByName(´ESTADOCIVIL´).Value := null
    else
      SQLQuery.ParamByName(´ESTADOCIVIL´).Value := _ESTADOCIVIL;
    if _PARENTESCO = 0 then
      SQLQuery.ParamByName(´PARENTESCO´).Value := null
    else
      SQLQuery.ParamByName(´PARENTESCO´).Value := _PARENTESCO;
    if _CPF = ´´ then
      SQLQuery.ParamByName(´CPF´).Value := null
    else
      SQLQuery.ParamByName(´CPF´).Value := _CPF;
    if _TIPOPRONTUARIO = ´´ then
      SQLQuery.ParamByName(´TIPOPRONTUARIO´).Value := null
    else
      SQLQuery.ParamByName(´TIPOPRONTUARIO´).Value := _TIPOPRONTUARIO;
    if _MOTIVO = 0 then
      SQLQuery.ParamByName(´MOTIVO´).Value := null
    else
      SQLQuery.ParamByName(´MOTIVO´).Value := _MOTIVO;
    if _DATASAME = 0 then
      SQLQuery.ParamByName(´DATASAME´).Value := null
    else
      SQLQuery.ParamByName(´DATASAME´).Value := _DATASAME;
    if _DATAULTIMAALTERACAO = 0 then
      SQLQuery.ParamByName(´DATAULTIMAALTERACAO´).Value := null
    else
      SQLQuery.ParamByName(´DATAULTIMAALTERACAO´).Value := _DATAULTIMAALTERACAO;

    try
      SQLQuery.ExecSQL;
      Result := True;
    except
      Result := False;
    end;


Acontece que está dando erro quando vai executar a instrução SQLQuery.ExecSQL, o erro diz ´unassigned code´. Alguém pode me dizer o que pode ser? A SQLQuery é da palheta dbExpress.


Ricobv

Ricobv

Curtidas 0

Respostas

Cesarpir

Cesarpir

03/02/2006

Amigo ricobv eu tive este problema tb quando fiz uma vez da mesma forma, o meu erro estava na configuração dos parametros principalmente no campo tipo data, eu tinha configurado errado o parametro do tipo data tem que ser ftDate, tente isso, outra coisa, para teste tá, vc poderia ao invés de:
SQLQuery.ParamByName(´NOME´).Value

por

SQLQuery.ParamByName(´NOME´).asString
SQLQuery.ParamByName(´DATANASCIMENTO´).asDate

ou seja troque cada um pelo seu tipo, não use .Value;

Espero que ajude
Uso Delphi 7, DBExpress e Firebird 1.5

César


GOSTEI 0
Ricobv

Ricobv

03/02/2006

Valeu a ajuda, cara, vou tentar fazer isso... :D


GOSTEI 0
Woinch

Woinch

03/02/2006

Aproveitando esse tópico. Estou com o mesmo problema, mas em oracle. O problema está em campos do tipo data. Estou utilizando .AsDate e o insert direto no SQLQuery como é feito acima.

O seguinte erro aparece para mim: ´ORA-01843: not a valid month´.

Não queria utilizar TO_DATE no insert, pois essa mesma aplicação deve funcionar tanto em Oracle como em Firebird e SQLServer. Se com a query ´select *´ e os comandos insert e post do DataSet funciona corretamente, porque com ´insert into´ na query e ExecSQL está me apresentando esse erro? Tem algum comando que eu possa utilizar para ´preparar´ essa query?

Muito obrigado.


GOSTEI 0
Steve_narancic

Steve_narancic

03/02/2006

SQLQuery.ParamByName(´NOME´).asString SQLQuery.ParamByName(´DATANASCIMENTO´).asDate ou seja troque cada um pelo seu tipo, não use .Value;


Fiz desta maneira e da erro! could not convert null to ...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

03/02/2006

com campos do tipo data/hora, tentem [b:12b1b92828].AsSQLTimeStamp[/b:12b1b92828].

com campos cujo valor é nulo, tentem [b:12b1b92828].AsVariant := null[/b:12b1b92828] ou [b:12b1b92828].Clear[/b:12b1b92828] ou ainda, manupile a instrução de modo a não listar esses campos.


GOSTEI 0
POSTAR