[firebase-br] Duvidas/Problemas com ClientDataSet

Francisco Thiago Almeida jeandeadlucky em yahoo.com.br
Sáb Nov 13 13:31:59 -03 2004


Olá André!
 
Bom você optar por usar o CDS. Com o tempo você vai ver que ele vai muito além de "pegar os dados".
 
Vamos lá:
 
1) Os filtros devem ser passado no objeto
ClientDataset1 atraves da propriedade commandText ou
no objeto Query1 atraves de sql? 

Costuma-se usar na arquitetura que você mostrou da seguinte forma:

Query1.CommandText = Select * from tabela where chave = :id (assim você traz apenas um registro)
Clique com o botao direito do mouse no seu cds e escolha "Fetch params".. com isso, agora você só vai alterar o valor do parametro id no cds e não no query1 okay? Feche; atribua o valor e abra o cds.


2)Eu imagino que a propriedade commandText somente
possa fazer um filtro no que ja foi retornado pelo
DataSetProvider1/Query1, ou se eu fizer um comandosql
totalmente diferente no commandtext isso vai alterar o
Sql do objeto Query1?

Não. A propriedade "CommandText" do cds envia um "CommandText" (SQL) para o Componente linkado ao DataSetProvider. Logo, desta forma, você pode modificar o sql do seu componente de acesso. Use desta alternativa apenas para consultas. Porque queries parametrizadas (e já preparadas) executam mais rápido. 

3) Tenho um DataSetProvider com a string sql "SELECT *
FROM TABELA"
Fiz as ligacoes necessarias e quando coloco
ClientDataSet1.Open ele recupera os dados sem problema
Entao fiz:
ClientDataSet1.Close
ClientDataSet1.CommandText := 'SELECT * FROM TABELA
WHERE ID BETWEEN 1 AND 10';
ClientDataSet1.Open
Obtive a seguinte mensagem de erro : "CommandText
changes are not allowed"
Como utilizo esse recurso(CommandText)?


Tem uma propriedade no DataSetProvider (não me lembro qual de cabeça, não estou na ide do delphi), acho que "AlgumaCoisa"Options. Você vai setar como true "AllowCommandText". Só assim o cds vai poder modificar o CommandText - SQL - do componente linkado ao seu DataSetProvider. Mas uma vez ressaldo o conselho de que você use esta propriedade apenas para telas de pesquisa, caso você queira criar uma única em seu projeto, caso contrário, continue optando por queries parametrizadas.

4)Tenho duvidas como trabalhar com Mestre/Detalhe sem
ser utilizando Datasets aninhados (TDatasetField). Tem
alguma explicacao que possam me mandar ou algum
exemplo? 

Uma vez trabalhando com o CDS, eu não acho muito interessante o uso desta técnica. Mas.. enfim.. O modo de configuração é o mesmo do usado nos TTables do BDE. Devo confessar que nunca usei o cds desta forma numa relação Mestre/Detalhe... se realmente houver algo diferente, deve ser muito pouco mesmo. Enfim. Eu particularmente aconselho o uso do NestedTable. Principalmente se sua aplicação for multicamadas.

Esperto ter ajudado você

Thiago

 


André <colosso0 em yahoo.com.br> wrote:
Oi Pessoal,

Lendo sobre ClientDatasets, tirei a seguinte
conclusao:
O ClientDataSet simplesmente pega os dados que vêm do
DataSetProvider que pega de um descendente da classe
TDataset qualquer (pode ser IBO, IBX, BDE,ADO,etc.)

Vamos supor a seguinte estrutura:

ClientDataSet1 > DataSetProvider1 > Query1

O recomendavel é que se retorne o minimo de registros
possiveis para o cliente. 

Duvidas:

1) Os filtros devem ser passado no objeto
ClientDataset1 atraves da propriedade commandText ou
no objeto Query1 atraves de sql? 

2)Eu imagino que a propriedade commandText somente
possa fazer um filtro no que ja foi retornado pelo
DataSetProvider1/Query1, ou se eu fizer um comandosql
totalmente diferente no commandtext isso vai alterar o
Sql do objeto Query1?

Problema:
3)
Tenho um DataSetProvider com a string sql "SELECT *
FROM TABELA"
Fiz as ligacoes necessarias e quando coloco
ClientDataSet1.Open ele recupera os dados sem problema

Entao fiz:
ClientDataSet1.Close
ClientDataSet1.CommandText := 'SELECT * FROM TABELA
WHERE ID BETWEEN 1 AND 10';
ClientDataSet1.Open

Obtive a seguinte mensagem de erro : "CommandText
changes are not allowed"

Como utilizo esse recurso(CommandText)?


4)
Tenho duvidas como trabalhar com Mestre/Detalhe sem
ser utilizando Datasets aninhados (TDatasetField). Tem
alguma explicacao que possam me mandar ou algum
exemplo? 

Agradeco qualquer ajuda

Andre





_______________________________________________________ 
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com/

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br


-----------------------------------------------
Francisco Thiago de Almeida         
MRL Consultoria em Informática    
Divisão Desenvolvimento e Banco de Dados
Franca/SP
		
---------------------------------
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora!


Mais detalhes sobre a lista de discussão lista