Re: [delphi-br] ClientDataSet - Lookup Lento
é, 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
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
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
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
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
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
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
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