Problema com a data no firebird x dbexpress
Caros colegas;
Tenho uma aplicação feita em ibx / firebird devido á necessidade de usar agora o Oracle também estou desenvolvendo um projeto piloto usando o dbexpress.
Porém tive problema relacionado a data.
Em minha base de dados firebird dialect 3, tenho a entidade centrocusto, atributo data_centcusto do tipo date. Possuo um sql ´insert into centrocusto(codigo_centcusto, descricao_centcusto, data_centcusto) values (:codigo, :descricao,:data)´ quando é executado:
with SimpleDataSet.DataSet do
begin
close;
CommandType:=ctQuery;
CommandText:=InsCentCusto();
parambyname(´codigo´).AsString:=Codigo.AsValue;
parambyname(´descricao´).AsString:=Descricao.AsValue;
parambyname(´data´).AsDateTime:=Data.AsDate;
parambyname(´status´).AsString:=Status.AsValue;
SimpleDataSet.Execute;
end;
Ao comando execute me retorna um erro do tipo eDataBaseError!
´UNASSIGNED CODE ´
quando substituo o codigo acima por insert into centrocusto(codigo_centcusto,...., data_centcusto) values (:codigo,...,current_date)´
grava ok.
Alguém poderia me ajudar ?
Tenho uma aplicação feita em ibx / firebird devido á necessidade de usar agora o Oracle também estou desenvolvendo um projeto piloto usando o dbexpress.
Porém tive problema relacionado a data.
Em minha base de dados firebird dialect 3, tenho a entidade centrocusto, atributo data_centcusto do tipo date. Possuo um sql ´insert into centrocusto(codigo_centcusto, descricao_centcusto, data_centcusto) values (:codigo, :descricao,:data)´ quando é executado:
with SimpleDataSet.DataSet do
begin
close;
CommandType:=ctQuery;
CommandText:=InsCentCusto();
parambyname(´codigo´).AsString:=Codigo.AsValue;
parambyname(´descricao´).AsString:=Descricao.AsValue;
parambyname(´data´).AsDateTime:=Data.AsDate;
parambyname(´status´).AsString:=Status.AsValue;
SimpleDataSet.Execute;
end;
Ao comando execute me retorna um erro do tipo eDataBaseError!
´UNASSIGNED CODE ´
quando substituo o codigo acima por insert into centrocusto(codigo_centcusto,...., data_centcusto) values (:codigo,...,current_date)´
grava ok.
Alguém poderia me ajudar ?
Midas
Curtidas 0
Respostas
Mdm
16/05/2006
Ola Colega !
Recentemente passei por este problema, e vc vera que não somente o tipo data, vc tb tera problemas com tipo Integer pois os tipos são diferentes, no caso do Integer ou Float, eles serão BCD ou FMBCD.
para contornar esse dilena com o campo data muitos sugerem passar o parametro como string, coisa que eu não recomendo, a menos que vc faça a conversão dentro do sql.Se vc passar o parametro data como string tera perda de performance pois o mesmo não ira ultlizar seu indice no banco, testei e comprovei.
Uma Alternativa será desta forma :
coloque no uses
SQLTimST
Recentemente passei por este problema, e vc vera que não somente o tipo data, vc tb tera problemas com tipo Integer pois os tipos são diferentes, no caso do Integer ou Float, eles serão BCD ou FMBCD.
para contornar esse dilena com o campo data muitos sugerem passar o parametro como string, coisa que eu não recomendo, a menos que vc faça a conversão dentro do sql.Se vc passar o parametro data como string tera perda de performance pois o mesmo não ira ultlizar seu indice no banco, testei e comprovei.
Uma Alternativa será desta forma :
DataSet.ParamByName(´DATA´).AsSQLTimeStamp := DateTimeToSQLTimeStamp(Date);
coloque no uses
SQLTimST
GOSTEI 0
Mdm
16/05/2006
Ola Colega !
Recentemente passei por este problema, e vc vera que não somente o tipo data, vc tb tera problemas com tipo Integer pois os tipos são diferentes, no caso do Integer ou Float, eles serão BCD ou FMBCD.
para contornar esse dilena com o campo data muitos sugerem passar o parametro como string, coisa que eu não recomendo, a menos que vc faça a conversão dentro do sql.Se vc passar o parametro data como string tera perda de performance pois o mesmo não ira ultlizar seu indice no banco, testei e comprovei.
Uma Alternativa será desta forma :
coloque no uses
SQLTimST
Recentemente passei por este problema, e vc vera que não somente o tipo data, vc tb tera problemas com tipo Integer pois os tipos são diferentes, no caso do Integer ou Float, eles serão BCD ou FMBCD.
para contornar esse dilena com o campo data muitos sugerem passar o parametro como string, coisa que eu não recomendo, a menos que vc faça a conversão dentro do sql.Se vc passar o parametro data como string tera perda de performance pois o mesmo não ira ultlizar seu indice no banco, testei e comprovei.
Uma Alternativa será desta forma :
DataSet.ParamByName(´DATA´).AsSQLTimeStamp := DateTimeToSQLTimeStamp(Date);
coloque no uses
SQLTimST
GOSTEI 0