Filtrar ClientDataSet
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...
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
Curtidas 0
Respostas
Afarias
07/09/2004
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::
T+
bom, acho q o q vc quer é, em lugar em um Locate::
with ClientDataSet do begin Filter := ´campo=valor´; Filtered := True; end;
T+
GOSTEI 0
Christian_adriano
07/09/2004
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.
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.
GOSTEI 0
Afarias
07/09/2004
|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+
|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+
GOSTEI 0
Wart
07/09/2004
Em primeiro lugar, desculpa pelo erro... :oops:
Em segundo, brigadão pela dica :wink:
Em segundo, brigadão pela dica :wink:
GOSTEI 0