Fórum Filtrar ClientDataSet #46577

07/09/2004

0

E ae galera,
Eu tava precisando do seguinte: depois de dar um locate no clientdataset mostrar numa dbgrid somente os registros que satisfazem esse locate e não somente selecionar um deles...
Alguma sugestão?
Obrigado...


Wart

Wart

Responder

Posts

08/09/2004

Afarias

o q isso tem a ver com Interbase ou Firebird? procure escolher o fórum mais adequado para suas questões da próxima vez ok?!

bom, acho q o q vc quer é, em lugar em um Locate::

with ClientDataSet do
begin
  Filter := ´campo=valor´;
  Filtered := True;
end;



T+


Responder

Gostei + 0

19/09/2004

Christian_adriano

Olá afarias,


Estou como o mesmo problemas do Amigo acima....

Não estou conseguindo fazer uma Filtragem com o CDS...

... e tb não estou conseguindo Gravar (ApplyUpdates), Criar as Seguintes funções para me Auxiliar, mais mesmo assim não grava....

=============== Gravar Transações CDS ================
procedure CommitCDS(ClientDataSet : TClientDataSet; Conexao : TSQLConnection);
var
TudoOK: Boolean;
begin
try
TudoOK:= False;
if (ClientDataSet.ApplyUpdates(0) > 0) then
TudoOK := True;
if (TudoOK) then
Conexao.Commit(Transacao)
else
begin
Application.MessageBox(´Ocorreu um erro na Transação do registro´, ´Transação - Erro´, MB_OK + MB_IconError);
Conexao.Rollback(Transacao);
end;
except
On E: Exception do
ShowMessage(´Não foi possível abrir a Transação.´ + #13 + E.Message);
end;
=============Iniciar uma transação ====================
function IniciarTransacao(aValorTransacao : Integer; Conexao : TSQLConnection) : Boolean;
begin
try
Transacao.TransactionID := aValorTransacao;
Transacao.IsolationLevel := xilReadCommitted;
Conexao.StartTransaction(Transacao);
Result := True;
ErroTransacao := Result;
except
Result := false;
ErroTransacao := Result;
end;
end;
===============================================

... e na Filtragem queria fazer esse tipo de Select :

´Select * from Clientes Where Upper(Desc_CLi) LIKE Upper(:Nome)´

Tentei no CommandText do CDS, mais tb dá erro...

Se vc puder me Ajudar...


Abraços...


Christian.


Responder

Gostei + 0

19/09/2004

Afarias

|if (ClientDataSet.ApplyUpdates(0) > 0) then
|TudoOK := True;

veja, quando o ApplyUpdates retorna um valor maior q 0 (zero) é pq houve ERROS durante a gravação de N (o valor) registros -- neste caso, não acredito q esteja TudoOK


|if (TudoOK) then
|Conexao.Commit(Transacao)

Só como ´alerta´, se a transação estava fechada antes do ApplyUpdates, vc pode deixar q o Provider vai encerrá-la (commit ou rollback) da melhor forma automaticamente.


|function IniciarTransacao(aValorTransacao : Integer; Conexao :
|TSQLConnection) : Boolean;

Ainda o mesmo ´alerta´ é q geralmente não é necessário controlar transações ´manualmente´ -- a não ser em casos ´especiais´ como mestre/detalhe sem nested-datasets


|... e na Filtragem queria fazer esse tipo de Select :
|´Select * from Clientes Where Upper(Desc_CLi) LIKE Upper(:Nome)´

bom, ´filtragem´ não é o melhor termo para isso... pois faz pensar q vc deseja fazer um filtro (propriedade Filter) no buffer do CDS


|Tentei no CommandText do CDS, mais tb dá erro...

Vc só não disse QUAL o erro!

bom, faça o seguinte::

1- coloque o SELECT citado no sqlQuery q está associado ao ClientDataSet, apenas atere onde tem LIKE para STARTING ou CONTAINING (like não funciona com parâmetros)
2- no ClientDataSet clique com o botão direito e escolha ´Fetch Params´
3- use o código abaixo para abrir seu CDS::

ClientDataSet.Active := False;
ClientDataSet.Params[0].AsString := ´ABC´;
ClientDataSet.Open;



T+


Responder

Gostei + 0

19/09/2004

Wart

Em primeiro lugar, desculpa pelo erro... :oops:
Em segundo, brigadão pela dica :wink:


Responder

Gostei + 0

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

Aceitar