Consulta com DBExpress

Delphi

20/06/2007

Utilizo DBExpress para acessar meu BD FB, entao utilizo SQLDataset+Provider+ClientDataset+Datasorce, existe uma maneira para nos casos onde necessito somente fazer uma consulta utilizar menos componentes ? Por exemplo, quando vou fazer um relatorio utilizo somente o SQLDataset, mas quando preciso que os dados sejam exibidos em um datagrid, entao nao consigo utilizar somente o SQLDataset, qual a sujestao podem me dar para isso?

Abs


Felipeiw

Felipeiw

Curtidas 0

Respostas

Macario

Macario

20/06/2007

Olá.

dbExpress é unidirecional, por este fato é necessário o uso de ClientDataSet para link com componentes dataware(dbgrid, etc).


[]´s


GOSTEI 0
Paullsoftware

Paullsoftware

20/06/2007

Olha, o que vc pode fazer é como faço, tenho um datamodule consultas
onde nessa datamodule exite o trio mágico...
SQLDataSet + DataSetProvider + ClientDataSet

Mudo a Propriedade AllowCommandText do CDS e centralizo todas as consultas nesse trio...


GOSTEI 0
Felipeiw

Felipeiw

20/06/2007

Paulo, mas nos casos onde os campos que serao retornados pela consulta sao diferentes de outras consultas, vc nao carrega os campos no fields editor? Se nao carrega como vc faz para exibi-los no dbgrid?

Abs


GOSTEI 0
Paullsoftware

Paullsoftware

20/06/2007

Paulo, mas nos casos onde os campos que serao retornados pela consulta sao diferentes de outras consultas, vc nao carrega os campos no fields editor? Se nao carrega como vc faz para exibi-los no dbgrid? Abs

Essa é a parte interessante! quando preciso exibir os dados num grid uso um ClientDataSet diferente que aponte para o meu DSP, ou seja, acho que não fui muito claro na resposta anterior... eu uso apenas 1 SQLDataSet e 1 DataSetProvider e vários ClientDataSet´s quanto a necessidade, apenas aponto todos os meus CDS para o mesmo DSP, deu pra entender...
mais mesmo se for o caso de usar apenas um, o Grid vai mostrar apenas os campos filtrados e vc pode criar as colunas em Run-Time mudando a propriedade DisplayLabel do Field por exemplo:
SeuCDS.Fields[0].DisplayLabel := ´Código do Cliente´; SeuCDS.Fields[1].DisplayLabel := ´Nome do Cliente´;
e assim por diante, mais a primeira opção é mais simples :wink:


GOSTEI 0
Felipeiw

Felipeiw

20/06/2007

Entendi, e quanto a usar formularios mdi, nao corre o risco de 2 ou mais relatorios serem abertos ao mesmo tempo e utilizarem os mesmos sqldataset + dsp, porem com cds para cada form ?

Abs


GOSTEI 0
Paullsoftware

Paullsoftware

20/06/2007

Entendi, e quanto a usar formularios mdi, nao corre o risco de 2 ou mais relatorios serem abertos ao mesmo tempo e utilizarem os mesmos sqldataset + dsp, porem com cds para cada form ? Abs

Não, pois os CDS são carregados para memória, faça um teste básico!
abra duas ou mais telas, execute consultas aleatórias e veja o resultado :wink:


GOSTEI 0
Felipeiw

Felipeiw

20/06/2007

Certissimo Paulo o CDS trata os dados em memoria, sei disso, talvez eu tenha sido mt pessimista, mas estava referindo a concorrencia no momento da consulta mesmo, nem sei se o SQLDataset + PRO consegueria tratar isso essa concorrencia, tambem nao consigo ter certeza se esse problema é realmente preocupante.

Abs


GOSTEI 0
POSTAR