Duvida em dbexpress

Delphi

02/11/2005

Estou começando a utilizar os componentes dbexpress, e estou precisando fazer uma consulta em uma tabela filtrando codigo do cliente e seus pedidos em um determinado periodo, fiz a consulta da seguinte maneira, mas nao funciona, como eu posso faze-la?

  DM.CdsPedidos.Close;
  DM.CdsPedidos.CommandText := ´SELECT * FROM PEDIDOS WHERE CODCLI = ´+IntToStr(DM.xcodcli)+´ AND DATPED BETWEEN ´+EDatini.DateText+´ AND ´+EDatini.DateText+´´;
  DM.CdsPedidos.Open;




Felipeiw

Felipeiw

Curtidas 0

Respostas

Xisto

Xisto

02/11/2005

eu faço assim:
sqldataset->provider->clientedataset->datasource

sqldataset.close
sqldataset.adicioneoscomandossql
clientedataset.close
clientedataset.open

 xcodcli:= edcodigopraprocurar.text;
  DM.CdsPedidos.Close;
  DM.CdsPedidos.CommandText := ´SELECT * FROM PEDIDOS WHERE CODCLI = ´+IntToStr(xcodcli)+´ AND DATPED BETWEEN ´+EDatini.DateText+´ AND ´+EDatini.DateText+´´;
  DM.CdsPedidos.Open;



GOSTEI 0
Felipeiw

Felipeiw

02/11/2005

Nao entendi, desculpe, vc passa os comandos na propriedade sql do componete TSqlquery? mas estou passando os comandos em tempo de execução.
Abs


GOSTEI 0
Xisto

Xisto

02/11/2005

Isso msm.
Pra funcionar vc fecha o SQLDataSet,
inclui o comando que vc quer e abre pelo
ClienteDataSet.

O meu sistema é todo assim.


GOSTEI 0
Adriano Santos

Adriano Santos

02/11/2005

Isso msm. Pra funcionar vc fecha o SQLDataSet, inclui o comando que vc quer e abre pelo ClienteDataSet. O meu sistema é todo assim.


[b:17822b1cec]felipeiw[/b:17822b1cec], o [b:17822b1cec]Xisto[/b:17822b1cec] está correto, vc abre pelo ClientDataSet, mas todos os comandos SQL você coloca no TSQLDataSet.


GOSTEI 0
Fabio Nascimento

Fabio Nascimento

02/11/2005

Utilizando DBX, SQLDataSet >> Provider >> ClientDataSet:

Basta você ativar a opção ´AllowCommandText´ do DataSetProvider correspondente, que você pode trabalhar diretamente com o componente ClientDataSet. Na minha opinião facilita, pois fica mais simples trabalhar com 1 só componente =)

Para usar um campo do tipo DATE como filtro, você deve usar uma consulta parametrizada do tipo:

SELECT * FROM PEDIDOS WHERE DATAPEDIDO BETWEEN :DATAINICIO AND :DATAFINAL ORDER BY DATAPEDIDO ASC

Ou fazer um TypeCast do tipo:

SELECT * FROM PEDIDOS WHERE DATAPEDIDO BETWEEN CAST(´MM/DD/YYY´ AS DATE) AND CAST(´MM/DD/YYY´ AS DATE)

Mas procure utilizar buscas parametrizadas, que melhora a performance geral do sistema :P


GOSTEI 0
POSTAR