Re: [delphi-br] ClientDataSet - Lookup Lento

2009-05-14 Por tôpico berdam
é, eu tbm já pensei nisso antes, fica complicado realmente, mas se puder 
armazenar isso em uma variável global fica melhor.

Nivaldo Stainle escreveu:
>
>
> em tempo, onde você sugere que eu coloque a chamada da função que vai 
> ao banco ???
>  
> Stainle
>
> --- Em qui, 14/5/09, berdam  <mailto:berdamzinho%40yahoo.com.br>> escreveu:
>
> De: berdam mailto:berdamzinho%40yahoo.com.br>>
> Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
> Para: delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br>
> Data: Quinta-feira, 14 de Maio de 2009, 18:43
>
> outro detalhe, procure não colocar no oncalcfields, chamadas de acesso
> ao banco, pois em todas alteração de todos os campos, que for feita nos
> campos do cds, eu disse todas, o método calcfields é chamado, isso pode
> ocasionar lentidão.
>
> Nivaldo Stainle escreveu:
> >
> >
> > entendi, mas o que deixa com a pulga atrás da orelha é que com a mesma
> > sintaxe e modelo, o BDE é mais rápido do que o CDS, é isto que não
> > entendo, estou trocando para algo melhor pelo que estou lendo e no
> > entanto estou vendo outra coisa na prática, ou seja, o que eu fazia
> > com o BDE não estou fazendo com BSS, ClientDataSet, etc.; pelo menos
> > com a mesma velocidade, acho que estou fazendo algo errado, é isto que
> > quero descobrir.
> > Stainle
> >
> > --- Em qua, 13/5/09, Evandro Siqueira  > <mailto:vansiqq% 40gmail.com> > escreveu:
> >
> > De: Evandro Siqueira mailto:vansiqq% 40gmail.com> >
> > Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
> > Para: delphi...@yahoogrup os.com.br <mailto:delphi- br%40yahoogrupos 
> .com.br>
> > Data: Quarta-feira, 13 de Maio de 2009, 15:44
> >
> > Stainle,
> >
> > Como vc informou qual o banco de dados, estou pressupondo que seja o
> > firebird e neste contexto, sugiro 2 coisas:
> >
> > 1) no Seleciona( select * from ... )... substitua o * pelo nome dos
> > campos que vc irá utilizar. Explicando: qd vc utiliza select * from
> > tabela, provoca um fetch all nela mesmo que a instrução contenha uma
> > cláusula where, o que tornará a consulta lenta, dependendo do tamanho da
> > tabela
> >
> > 2) se a lookup source contiver muitas linhas, sugiro procurar uma outra
> > alternativa, pq este componente é perfeito para aplicações desktop mas
> > em aplicações client server ou multicamadas, um lookup de muitas linhas
> > pode se tornar um pesadelo em termos de performance.
> >
> > stainle2003 escreveu:
> > >
> > >
> > > Boa Tarde, novamente pedindo ajuda.
> > > Estou gradativamente mudando meu sistema de BDE para Multicamadas,
> > > portando deixo de usar Query para usar ClientDataSet acessando a
> > > máquina que tem o BSS, o que acontece:
> > > Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em
> > > OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA
> > > dentre 4 chaves(00211001, 00211***, 0021, 002*), por exemplo,
> > > de uma tabela para que eu ache um valor para calcular o Preço Líquido
> > > por exemplo da tabela principal; acontece que no BDE(query) funciona
> > > com uma velocidade até que razoável, mas ao mudar para o
> > > ClientDataSet, fica uma calamidade, até mudei a função chamada no
> > > OnCalcFields para ao invés de SQL eu passei a usar da forma abaixo,
> > > mas mesmo assim não me alegrou, será que vou ter que continuar a usar
> > > o BDE, neste caso ???
> > > procedure TDados.ver_desconto ;
> > > var
> > > wscodigo : string;
> > > begin
> > > wscodigo := Dados.CDSEstCodes. Value;
> > >
> > > Dados.CDSDes. Close;
> > > Dados.CDSDes. IndexName := 'DEFAULT_ORDER' ;
> > > Dados.CDSDes. Open;
> > > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; 
> nropeca';
> > > Dados.CDSDes. SetKey;
> > > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> > > Dados.CDSDesGrupo_ Ini.AsString := copy(wscodigo, 5, 1);
> > > Dados.CDSDesSub_ Ini.AsString := copy(wscodigo, 6, 1);
> > > Dados.CDSDesNropeca .AsString := copy(wscodigo, 8, 3);
> > > if Dados.CDSDes. GotoKey then
> > > begin
> > > Dados.CDSEstDescont o.Value := Dados.CDSDesDesco05 .Value;
> > > exit;
> > > end;
> > > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; 
> nropeca';
> > > Dados.CDSDes. SetKey;
> > > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> &g

Re: [delphi-br] ClientDataSet - Lookup Lento

2009-05-14 Por tôpico Nivaldo Stainle
em tempo, onde você sugere que eu coloque a chamada da função que vai ao banco 
???
 
Stainle

--- Em qui, 14/5/09, berdam  escreveu:


De: berdam 
Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
Para: delphi-br@yahoogrupos.com.br
Data: Quinta-feira, 14 de Maio de 2009, 18:43








outro detalhe, procure não colocar no oncalcfields, chamadas de acesso 
ao banco, pois em todas alteração de todos os campos, que for feita nos 
campos do cds, eu disse todas, o método calcfields é chamado, isso pode 
ocasionar lentidão.

Nivaldo Stainle escreveu:
>
>
> entendi, mas o que deixa com a pulga atrás da orelha é que com a mesma 
> sintaxe e modelo, o BDE é mais rápido do que o CDS, é isto que não 
> entendo, estou trocando para algo melhor pelo que estou lendo e no 
> entanto estou vendo outra coisa na prática, ou seja, o que eu fazia 
> com o BDE não estou fazendo com BSS, ClientDataSet, etc.; pelo menos 
> com a mesma velocidade, acho que estou fazendo algo errado, é isto que 
> quero descobrir.
> Stainle
>
> --- Em qua, 13/5/09, Evandro Siqueira  <mailto:vansiqq% 40gmail.com> > escreveu:
>
> De: Evandro Siqueira mailto:vansiqq% 40gmail.com> >
> Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
> Para: delphi...@yahoogrup os.com.br <mailto:delphi- br%40yahoogrupos .com.br>
> Data: Quarta-feira, 13 de Maio de 2009, 15:44
>
> Stainle,
>
> Como vc informou qual o banco de dados, estou pressupondo que seja o
> firebird e neste contexto, sugiro 2 coisas:
>
> 1) no Seleciona( select * from ... )... substitua o * pelo nome dos
> campos que vc irá utilizar. Explicando: qd vc utiliza select * from
> tabela, provoca um fetch all nela mesmo que a instrução contenha uma
> cláusula where, o que tornará a consulta lenta, dependendo do tamanho da
> tabela
>
> 2) se a lookup source contiver muitas linhas, sugiro procurar uma outra
> alternativa, pq este componente é perfeito para aplicações desktop mas
> em aplicações client server ou multicamadas, um lookup de muitas linhas
> pode se tornar um pesadelo em termos de performance.
>
> stainle2003 escreveu:
> >
> >
> > Boa Tarde, novamente pedindo ajuda.
> > Estou gradativamente mudando meu sistema de BDE para Multicamadas,
> > portando deixo de usar Query para usar ClientDataSet acessando a
> > máquina que tem o BSS, o que acontece:
> > Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em
> > OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA
> > dentre 4 chaves(00211001, 00211***, 0021, 002*), por exemplo,
> > de uma tabela para que eu ache um valor para calcular o Preço Líquido
> > por exemplo da tabela principal; acontece que no BDE(query) funciona
> > com uma velocidade até que razoável, mas ao mudar para o
> > ClientDataSet, fica uma calamidade, até mudei a função chamada no
> > OnCalcFields para ao invés de SQL eu passei a usar da forma abaixo,
> > mas mesmo assim não me alegrou, será que vou ter que continuar a usar
> > o BDE, neste caso ???
> > procedure TDados.ver_desconto ;
> > var
> > wscodigo : string;
> > begin
> > wscodigo := Dados.CDSEstCodes. Value;
> >
> > Dados.CDSDes. Close;
> > Dados.CDSDes. IndexName := 'DEFAULT_ORDER' ;
> > Dados.CDSDes. Open;
> > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; nropeca';
> > Dados.CDSDes. SetKey;
> > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> > Dados.CDSDesGrupo_ Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_ Ini.AsString := copy(wscodigo, 6, 1);
> > Dados.CDSDesNropeca .AsString := copy(wscodigo, 8, 3);
> > if Dados.CDSDes. GotoKey then
> > begin
> > Dados.CDSEstDescont o.Value := Dados.CDSDesDesco05 .Value;
> > exit;
> > end;
> > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; nropeca';
> > Dados.CDSDes. SetKey;
> > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> > Dados.CDSDesGrupo_ Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_ Ini.AsString := copy(wscodigo, 6, 1);
> > Dados.CDSDesNropeca .AsString := '***';
> > if Dados.CDSDes. GotoKey then
> > begin
> > Dados.CDSEstDescont o.Value := Dados.CDSDesDesco05 .Value;
> > exit;
> > end;
> > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; nropeca';
> > Dados.CDSDes. SetKey;
> > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> > Dados.CDSDesGrupo_ Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_ Ini.AsString := '*';
> > Dados.CDSDesNropeca .AsString := '***';
> > if Dados.CDSDes. 

Re: [delphi-br] ClientDataSet - Lookup Lento

2009-05-14 Por tôpico Nivaldo Stainle
entendi, acho que melhora muito se também colocar a função no servidor(BSS), 
não acha ?
Stainle

--- Em qui, 14/5/09, berdam  escreveu:


De: berdam 
Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
Para: delphi-br@yahoogrupos.com.br
Data: Quinta-feira, 14 de Maio de 2009, 18:43








outro detalhe, procure não colocar no oncalcfields, chamadas de acesso 
ao banco, pois em todas alteração de todos os campos, que for feita nos 
campos do cds, eu disse todas, o método calcfields é chamado, isso pode 
ocasionar lentidão.

Nivaldo Stainle escreveu:
>
>
> entendi, mas o que deixa com a pulga atrás da orelha é que com a mesma 
> sintaxe e modelo, o BDE é mais rápido do que o CDS, é isto que não 
> entendo, estou trocando para algo melhor pelo que estou lendo e no 
> entanto estou vendo outra coisa na prática, ou seja, o que eu fazia 
> com o BDE não estou fazendo com BSS, ClientDataSet, etc.; pelo menos 
> com a mesma velocidade, acho que estou fazendo algo errado, é isto que 
> quero descobrir.
> Stainle
>
> --- Em qua, 13/5/09, Evandro Siqueira  <mailto:vansiqq% 40gmail.com> > escreveu:
>
> De: Evandro Siqueira mailto:vansiqq% 40gmail.com> >
> Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
> Para: delphi...@yahoogrup os.com.br <mailto:delphi- br%40yahoogrupos .com.br>
> Data: Quarta-feira, 13 de Maio de 2009, 15:44
>
> Stainle,
>
> Como vc informou qual o banco de dados, estou pressupondo que seja o
> firebird e neste contexto, sugiro 2 coisas:
>
> 1) no Seleciona( select * from ... )... substitua o * pelo nome dos
> campos que vc irá utilizar. Explicando: qd vc utiliza select * from
> tabela, provoca um fetch all nela mesmo que a instrução contenha uma
> cláusula where, o que tornará a consulta lenta, dependendo do tamanho da
> tabela
>
> 2) se a lookup source contiver muitas linhas, sugiro procurar uma outra
> alternativa, pq este componente é perfeito para aplicações desktop mas
> em aplicações client server ou multicamadas, um lookup de muitas linhas
> pode se tornar um pesadelo em termos de performance.
>
> stainle2003 escreveu:
> >
> >
> > Boa Tarde, novamente pedindo ajuda.
> > Estou gradativamente mudando meu sistema de BDE para Multicamadas,
> > portando deixo de usar Query para usar ClientDataSet acessando a
> > máquina que tem o BSS, o que acontece:
> > Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em
> > OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA
> > dentre 4 chaves(00211001, 00211***, 0021, 002*), por exemplo,
> > de uma tabela para que eu ache um valor para calcular o Preço Líquido
> > por exemplo da tabela principal; acontece que no BDE(query) funciona
> > com uma velocidade até que razoável, mas ao mudar para o
> > ClientDataSet, fica uma calamidade, até mudei a função chamada no
> > OnCalcFields para ao invés de SQL eu passei a usar da forma abaixo,
> > mas mesmo assim não me alegrou, será que vou ter que continuar a usar
> > o BDE, neste caso ???
> > procedure TDados.ver_desconto ;
> > var
> > wscodigo : string;
> > begin
> > wscodigo := Dados.CDSEstCodes. Value;
> >
> > Dados.CDSDes. Close;
> > Dados.CDSDes. IndexName := 'DEFAULT_ORDER' ;
> > Dados.CDSDes. Open;
> > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; nropeca';
> > Dados.CDSDes. SetKey;
> > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> > Dados.CDSDesGrupo_ Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_ Ini.AsString := copy(wscodigo, 6, 1);
> > Dados.CDSDesNropeca .AsString := copy(wscodigo, 8, 3);
> > if Dados.CDSDes. GotoKey then
> > begin
> > Dados.CDSEstDescont o.Value := Dados.CDSDesDesco05 .Value;
> > exit;
> > end;
> > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; nropeca';
> > Dados.CDSDes. SetKey;
> > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> > Dados.CDSDesGrupo_ Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_ Ini.AsString := copy(wscodigo, 6, 1);
> > Dados.CDSDesNropeca .AsString := '***';
> > if Dados.CDSDes. GotoKey then
> > begin
> > Dados.CDSEstDescont o.Value := Dados.CDSDesDesco05 .Value;
> > exit;
> > end;
> > Dados.CDSDes. IndexFieldNames := 'nrolinha;grupo_ ini;sub_ini; nropeca';
> > Dados.CDSDes. SetKey;
> > Dados.CDSDesNrolinh a.Value := StrToInt(copy( wscodigo, 1, 3));
> > Dados.CDSDesGrupo_ Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_ Ini.AsString := '*';
> > Dados.CDSDesNropeca .AsString := '***';
> > if Dados.CDSDes. 

Re: [delphi-br] ClientDataSet - Lookup Lento

2009-05-14 Por tôpico berdam
outro detalhe, procure não colocar no oncalcfields, chamadas de acesso 
ao banco, pois em todas alteração  de todos os campos, que for feita nos 
campos do cds, eu disse todas, o método calcfields é chamado, isso pode 
ocasionar lentidão.

Nivaldo Stainle escreveu:
>
>
> entendi, mas o que deixa com a pulga atrás da orelha é que com a mesma 
> sintaxe e modelo, o BDE é mais rápido do que o CDS, é isto que não 
> entendo, estou trocando para algo melhor pelo que estou lendo e no 
> entanto estou vendo outra coisa na prática, ou seja, o que eu fazia 
> com o BDE não estou fazendo com BSS, ClientDataSet, etc.; pelo menos 
> com a mesma velocidade, acho que estou fazendo algo errado, é isto que 
> quero descobrir.
> Stainle
>
> --- Em qua, 13/5/09, Evandro Siqueira  <mailto:vansiqq%40gmail.com>> escreveu:
>
> De: Evandro Siqueira mailto:vansiqq%40gmail.com>>
> Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
> Para: delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br>
> Data: Quarta-feira, 13 de Maio de 2009, 15:44
>
> Stainle,
>
> Como vc informou qual o banco de dados, estou pressupondo que seja o
> firebird e neste contexto, sugiro 2 coisas:
>
> 1) no Seleciona( select * from ... )... substitua o * pelo nome dos
> campos que vc irá utilizar. Explicando: qd vc utiliza select * from
> tabela, provoca um fetch all nela mesmo que a instrução contenha uma
> cláusula where, o que tornará a consulta lenta, dependendo do tamanho da
> tabela
>
> 2) se a lookup source contiver muitas linhas, sugiro procurar uma outra
> alternativa, pq este componente é perfeito para aplicações desktop mas
> em aplicações client server ou multicamadas, um lookup de muitas linhas
> pode se tornar um pesadelo em termos de performance.
>
> stainle2003 escreveu:
> >
> >
> > Boa Tarde, novamente pedindo ajuda.
> > Estou gradativamente mudando meu sistema de BDE para Multicamadas,
> > portando deixo de usar Query para usar ClientDataSet acessando a
> > máquina que tem o BSS, o que acontece:
> > Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em
> > OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA
> > dentre 4 chaves(00211001, 00211***, 0021, 002*), por exemplo,
> > de uma tabela para que eu ache um valor para calcular o Preço Líquido
> > por exemplo da tabela principal; acontece que no BDE(query) funciona
> > com uma velocidade até que razoável, mas ao mudar para o
> > ClientDataSet, fica uma calamidade, até mudei a função chamada no
> > OnCalcFields para ao invés de SQL eu passei a usar da forma abaixo,
> > mas mesmo assim não me alegrou, será que vou ter que continuar a usar
> > o BDE, neste caso ???
> > procedure TDados.ver_desconto;
> > var
> > wscodigo : string;
> > begin
> > wscodigo := Dados.CDSEstCodes.Value;
> >
> > Dados.CDSDes.Close;
> > Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> > Dados.CDSDes.Open;
> > Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> > Dados.CDSDes.SetKey;
> > Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> > Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> > Dados.CDSDesNropeca.AsString := copy(wscodigo, 8, 3);
> > if Dados.CDSDes.GotoKey then
> > begin
> > Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> > exit;
> > end;
> > Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> > Dados.CDSDes.SetKey;
> > Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> > Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> > Dados.CDSDesNropeca.AsString := '***';
> > if Dados.CDSDes.GotoKey then
> > begin
> > Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> > exit;
> > end;
> > Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> > Dados.CDSDes.SetKey;
> > Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> > Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> > Dados.CDSDesSub_Ini.AsString := '*';
> > Dados.CDSDesNropeca.AsString := '***';
> > if Dados.CDSDes.GotoKey then
> > begin
> > Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> > exit;
> > end;
> > Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> > Dados.CDSDes.SetKey;
> > Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> > Dados.CDSD

Re: [delphi-br] ClientDataSet - Lookup Lento

2009-05-13 Por tôpico Nivaldo Stainle
entendi, mas o que deixa com a pulga atrás da orelha é que com a mesma sintaxe 
e modelo, o BDE é mais rápido do que o CDS, é isto que não entendo, estou 
trocando para algo melhor pelo que estou lendo e no entanto estou vendo outra 
coisa na prática, ou seja, o que eu fazia com o BDE não estou fazendo com BSS, 
ClientDataSet, etc.; pelo menos com a mesma velocidade, acho que estou fazendo 
algo errado, é isto que quero descobrir.
Stainle

--- Em qua, 13/5/09, Evandro Siqueira  escreveu:


De: Evandro Siqueira 
Assunto: Re: [delphi-br] ClientDataSet - Lookup Lento
Para: delphi-br@yahoogrupos.com.br
Data: Quarta-feira, 13 de Maio de 2009, 15:44


Stainle,

Como vc informou qual o banco de dados, estou pressupondo que seja o 
firebird e neste contexto, sugiro 2 coisas:

1) no Seleciona( select * from ... )... substitua o * pelo nome dos 
campos que vc irá utilizar. Explicando: qd vc utiliza select * from 
tabela, provoca um fetch all nela mesmo que a instrução contenha uma 
cláusula where, o que tornará a consulta lenta, dependendo do tamanho da 
tabela

2) se a lookup source contiver muitas linhas, sugiro procurar uma outra 
alternativa, pq este componente é perfeito para aplicações desktop mas 
em aplicações client server ou multicamadas, um lookup de muitas linhas 
pode se tornar um pesadelo em termos de performance.


stainle2003 escreveu:
>
>
> Boa Tarde, novamente pedindo ajuda.
> Estou gradativamente mudando meu sistema de BDE para Multicamadas, 
> portando deixo de usar Query para usar ClientDataSet acessando a 
> máquina que tem o BSS, o que acontece:
> Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em 
> OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA 
> dentre 4 chaves(00211001, 00211***, 0021, 002*), por exemplo, 
> de uma tabela para que eu ache um valor para calcular o Preço Líquido 
> por exemplo da tabela principal; acontece que no BDE(query) funciona 
> com uma velocidade até que razoável, mas ao mudar para o 
> ClientDataSet, fica uma calamidade, até mudei a função chamada no 
> OnCalcFields para ao invés de SQL eu passei a usar da forma abaixo, 
> mas mesmo assim não me alegrou, será que vou ter que continuar a usar 
> o BDE, neste caso ???
> procedure TDados.ver_desconto;
> var
> wscodigo : string;
> begin
> wscodigo := Dados.CDSEstCodes.Value;
>
> Dados.CDSDes.Close;
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> Dados.CDSDes.Open;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := copy(wscodigo, 8, 3);
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := '*';
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> end;
>
> end;
>
> procedure TDados.CDSEstCalcFields(DataSet: TDataSet);
> begin
> ver_desconto();
> Dados.CDSEstLiquido.Value := Dados.CDSEstPv1.Value * (1 - 
> Dados.CDSEstDesconto.Value / 100);
> end;
>
> procedure TDados.CDSDesBeforeOpen(DataSet: TDataSet);
> begin
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> end;
> grato
> Stainle
>























































































-- 
[]’s.

Evandro Siqueira
Programador de Sistemas
L’essentiel Lingerie
(79) 3254-5511 Ramal 218
skype: evandro.lessentiel





-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>






  Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] ClientDataSet - Lookup Lento

2009-05-13 Por tôpico Evandro Siqueira
Stainle,

Como vc informou qual o banco de dados, estou pressupondo que seja o 
firebird e neste contexto, sugiro 2 coisas:

1) no Seleciona( select * from ... )... substitua o * pelo nome dos 
campos que vc irá utilizar. Explicando: qd vc utiliza select * from 
tabela, provoca um fetch all nela mesmo que a instrução contenha uma 
cláusula where, o que tornará a consulta lenta, dependendo do tamanho da 
tabela

2) se a lookup source contiver muitas linhas, sugiro procurar uma outra 
alternativa, pq este componente é perfeito para aplicações desktop mas 
em aplicações client server ou multicamadas, um lookup de muitas linhas 
pode se tornar um pesadelo em termos de performance.


stainle2003 escreveu:
>
>
> Boa Tarde, novamente pedindo ajuda.
> Estou gradativamente mudando meu sistema de BDE para Multicamadas, 
> portando deixo de usar Query para usar ClientDataSet acessando a 
> máquina que tem o BSS, o que acontece:
> Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em 
> OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA 
> dentre 4 chaves(00211001, 00211***, 0021, 002*), por exemplo, 
> de uma tabela para que eu ache um valor para calcular o Preço Líquido 
> por exemplo da tabela principal; acontece que no BDE(query) funciona 
> com uma velocidade até que razoável, mas ao mudar para o 
> ClientDataSet, fica uma calamidade, até mudei a função chamada no 
> OnCalcFields para ao invés de SQL eu passei a usar da forma abaixo, 
> mas mesmo assim não me alegrou, será que vou ter que continuar a usar 
> o BDE, neste caso ???
> procedure TDados.ver_desconto;
> var
> wscodigo : string;
> begin
> wscodigo := Dados.CDSEstCodes.Value;
>
> Dados.CDSDes.Close;
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> Dados.CDSDes.Open;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := copy(wscodigo, 8, 3);
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := '*';
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> end;
>
> end;
>
> procedure TDados.CDSEstCalcFields(DataSet: TDataSet);
> begin
> ver_desconto();
> Dados.CDSEstLiquido.Value := Dados.CDSEstPv1.Value * (1 - 
> Dados.CDSEstDesconto.Value / 100);
> end;
>
> procedure TDados.CDSDesBeforeOpen(DataSet: TDataSet);
> begin
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> end;
> grato
> Stainle
>























































































-- 
[]’s.

Evandro Siqueira
Programador de Sistemas
L’essentiel Lingerie
(79) 3254-5511 Ramal 218
skype: evandro.lessentiel





-- 
< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >

<*> Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
delphi-br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




Re: [delphi-br] ClientDataSet - Lookup Lento

2009-05-13 Por tôpico Marcio F. Cruz
Use através de Selects, Inserts e Updates.. assim fica lento..

Aconselho usar o componente dddbxfacil do sourceforge, facilita muito a
vida!

2009/5/13 stainle2003 

>
>
> Boa Tarde, novamente pedindo ajuda.
> Estou gradativamente mudando meu sistema de BDE para Multicamadas, portando
> deixo de usar Query para usar ClientDataSet acessando a máquina que tem o
> BSS, o que acontece:
> Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em
> OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA dentre 4
> chaves(00211001, 00211***, 0021, 002*), por exemplo, de uma tabela
> para que eu ache um valor para calcular o Preço Líquido por exemplo da
> tabela principal; acontece que no BDE(query) funciona com uma velocidade até
> que razoável, mas ao mudar para o ClientDataSet, fica uma calamidade, até
> mudei a função chamada no OnCalcFields para ao invés de SQL eu passei a usar
> da forma abaixo, mas mesmo assim não me alegrou, será que vou ter que
> continuar a usar o BDE, neste caso ???
> procedure TDados.ver_desconto;
> var
> wscodigo : string;
> begin
> wscodigo := Dados.CDSEstCodes.Value;
>
> Dados.CDSDes.Close;
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> Dados.CDSDes.Open;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := copy(wscodigo, 8, 3);
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := '*';
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> end;
>
> end;
>
> procedure TDados.CDSEstCalcFields(DataSet: TDataSet);
> begin
> ver_desconto();
> Dados.CDSEstLiquido.Value := Dados.CDSEstPv1.Value * (1 -
> Dados.CDSEstDesconto.Value / 100);
> end;
>
> procedure TDados.CDSDesBeforeOpen(DataSet: TDataSet);
> begin
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> end;
> grato
> Stainle
>
>  
>



-- 
Márcio F. Cruz


[As partes desta mensagem que não continham texto foram removidas]



[delphi-br] ClientDataSet - Lookup Lento

2009-05-13 Por tôpico stainle2003
Boa Tarde, novamente pedindo ajuda.
Estou gradativamente mudando meu sistema de BDE para Multicamadas, portando 
deixo de usar Query para usar ClientDataSet acessando a máquina que tem o BSS, 
o que acontece:
Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em OnCalcFields 
eu uso uma função que Seleciona(select * from ...) UMA dentre 4 
chaves(00211001, 00211***, 0021, 002*), por exemplo, de uma tabela para 
que eu ache um valor para calcular o Preço Líquido por exemplo da tabela 
principal; acontece que no BDE(query) funciona com uma velocidade até que 
razoável, mas ao mudar para o ClientDataSet, fica uma calamidade, até mudei a 
função chamada no OnCalcFields para ao invés de SQL eu passei a usar da forma 
abaixo, mas mesmo assim não me alegrou, será que vou ter que continuar a usar o 
BDE, neste caso ???
procedure TDados.ver_desconto;
var
wscodigo : string;
begin
wscodigo := Dados.CDSEstCodes.Value;

Dados.CDSDes.Close;
Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
Dados.CDSDes.Open;
Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
Dados.CDSDes.SetKey;
Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
Dados.CDSDesNropeca.AsString := copy(wscodigo, 8, 3);
if Dados.CDSDes.GotoKey then
begin
Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
exit;
end;
Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
Dados.CDSDes.SetKey;
Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
Dados.CDSDesNropeca.AsString := '***';
if Dados.CDSDes.GotoKey then
begin
Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
exit;
end;
Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
Dados.CDSDes.SetKey;
Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
Dados.CDSDesSub_Ini.AsString := '*';
Dados.CDSDesNropeca.AsString := '***';
if Dados.CDSDes.GotoKey then
begin
Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
exit;
end;
Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
Dados.CDSDes.SetKey;
Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
Dados.CDSDesGrupo_Ini.AsString := '*';
Dados.CDSDesSub_Ini.AsString := '*';
Dados.CDSDesNropeca.AsString := '***';
if Dados.CDSDes.GotoKey then
begin
Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
end;




end;






procedure TDados.CDSEstCalcFields(DataSet: TDataSet);
begin
ver_desconto();
Dados.CDSEstLiquido.Value := Dados.CDSEstPv1.Value * (1 - 
Dados.CDSEstDesconto.Value / 100);
end;

procedure TDados.CDSDesBeforeOpen(DataSet: TDataSet);
begin
Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
end;
grato
Stainle