Migrando um software para dbexpress.. erro na consulta

Delphi

17/11/2004

Boa tarde pessoal,
estou encontrando dificuldades em migrar um sistema
que tenho para dbexpress.. e queria contar com a ajuda
de vcs mais uma vez..

tenho um banco de dados no sqlserver2000 chamado Teste.
-Liguei o sqlconnection ao bd(com o nome de LOGAR);
-Pus um sqldataset e configurei : Select * from retorno(no commandtext)
e LOGAR(no sqlconnection do sqldataset)
-Pus um datasetprovider e em dataset pus sqldataset1;
-Pus um clientdataset1 e liguei ao datasetprovider;
-Pus um datasource e liguei ao dataset;

até aí tudo jóia.. faço a baixa do arquivo que vem em arquivo texto..


depois tenho que fazer os relatórios.. aí que o bicho pega..
estou fazendo da seguinteforma..
-Pus um sqlquery conectei ao sqlconnection
e na propriedade sql pus uma consulta mto fácil;
SELECT * FROM RETORNO WHERE DT_INFRA BETWEEN:DTINICIAL AND:DTFINAL

acho que nos parâmetros que o bicho pega.. pq no meu bd eu configurei
DT_Infra como um smalldatetime..
qdo olho nas propriedades do clientdataset ele está como:TSQLTimeStampField..

Nos parametros do sqlquery configurei paramtype como ptinput;
no datatype já tentei: ftdatetime com o valor 01/01/2004
já tentei ftstring com o valor ´01/01/2004´
já tentei fttimestamp com o valor 01/01/2004 e tb com ´01/01/2004´

.. não sei mais o que fazer..

valeu pela força
Eric


Eric.miranda

Eric.miranda

Curtidas 0

Respostas

Bruno_fantin

Bruno_fantin

17/11/2004

Não precisa mudar a data para string... usada como TDateTime mesmo...

Só um exemplo...

with SQLQuery do
begin
SQL.Add(Select * From Tabela Where Data Between :Data1 and :Data2);
Params[0].AsDateTime := Date - 365;
Params[1].AsDateTime := Date;
Open;
end;


GOSTEI 0
Eric.miranda

Eric.miranda

17/11/2004

essa forma foi a primeira que tentei..
ela como as outras dão invalid field type..

mas mesmo assim valeu


GOSTEI 0
Gandalf.nho

Gandalf.nho

17/11/2004

Tente usar essa função DateTimeToSQLTimeStamp (converte um DataTime para SQLTimeStamp)


GOSTEI 0
Vinicius2k

Vinicius2k

17/11/2004

Colega,

Mude o tipo do parametro para ftTimeStamp e ao invés de utilizar AsDate ou AsDateTime, utilize Value informando uma data, por exemplo :
with SQLDataSet1 do
begin
  Close;
  CommandText:= ´select * from <TABELA> where <CAMPO> between :P1 and :P2´;
  { **** }
  ParamByName(´P1´).DataType:= ftTimeStamp;
  ParamByName(´P1´).Value:= StrToDate(´17/11/2004´);
  { **** }
  ParamByName(´P2´).DataType:= ftTimeStamp;
  ParamByName(´P2´).Value:= StrToDate(´17/11/2004´);
  { **** }
  Open;
end;


Ou

Acrestente a unit [b:8b56283fcc]SqlTimSt[/b:8b56283fcc] na lista de uses e utilize a função de conversão de DateTime para SQLTimeStamp :
with SQLDataSet1 do
begin
  Close;
  CommandText:= ´select * from <TABELA> where <CAMPO> between :P1 and :P2´;
  { **** }
  ParamByName(´P1´).AsSQLTimeStamp:= DateTimeToSQLTimeStamp(StrToDate(´17/11/2004´));
  { **** }
  ParamByName(´P2´).AsSQLTimeStamp:= DateTimeToSQLTimeStamp(StrToDate(´17/11/2004´));
  { **** }
  Open;
end;


Espero ter ajudado...
T+


GOSTEI 0
Eric.miranda

Eric.miranda

17/11/2004

mas pq esse campo fica como TSQLTimeStampField
sendo que ele é um datetime normal..

o clientdataset tem esses problemas??

usando a query não tinha esses problemas..

valeu


GOSTEI 0
Gandalf.nho

Gandalf.nho

17/11/2004

Acho que isso é uma característica do DBExpress


GOSTEI 0
POSTAR