Insert utilizando TSQLQuery
Pessoal, estou com um problema com o seguinte código:
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.
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
Curtidas 0
Respostas
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
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
03/02/2006
Valeu a ajuda, cara, vou tentar fazer isso... :D
GOSTEI 0
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.
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
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
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.
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