Fórum Duvida em dbexpress #301535

02/11/2005

0

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

Responder

Posts

02/11/2005

Xisto

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;



Responder

Gostei + 0

02/11/2005

Felipeiw

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


Responder

Gostei + 0

02/11/2005

Xisto

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

O meu sistema é todo assim.


Responder

Gostei + 0

02/11/2005

Adriano Santos

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.


Responder

Gostei + 0

03/11/2005

Fabio Nascimento

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar