Array
(
)

Insert utilizando TSQLQuery

Ricobv
   - 03 fev 2006

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

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


Cesarpir
   - 04 fev 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


Ricobv
   - 08 fev 2006

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


Woinch
   - 30 jan 2009

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.


Steve Narancic
   - 09 ago 2009


Citação:

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


Emerson
   - 11 ago 2009

com campos do tipo data/hora, tentem .AsSQLTimeStamp.

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