GARANTIR DESCONTO

Fórum Lentidão com dbExpress #344554

15/08/2007

0

Socorro!!!

Cenário: Tenho um ClientDataSet que exibe os produtos de uma lista. Para que o nome destes produtos apareçam no DbGrid, criei um campo Lookup no ClientDataSet, ligado a um SqlDataSet, que por sua vez, puxa todos os dados da tabela de produtos. Essa tabela tem mais de 5000 linhas. Quando eu abro a tela no servidor, fica tudo rápido, mas quando eu abro nas estações, da um lag de mais de 2 segundos.

[list:fd408480d2]Pq isto está acontecendo?[/list:u:fd408480d2]
[list:fd408480d2]Tem como agilizar isto?[/list:u:fd408480d2]
[list:fd408480d2]Tem algum componente trabalhe com Master-Detail sem precisar fazer ´remendos´?[/list:u:fd408480d2]
[list:fd408480d2]Tem como fazer ORM em delphi? Se sim, como?[/list:u:fd408480d2]


Adminfo

Adminfo

Responder

Posts

16/08/2007

Adminfo

O pessoal, alguem ai sabe de alguma forma pra agilizar essa conexão? Algum componente ou coisa parecida. Quando o sistema roda no servidor ele funciona beleza, mas quando roda em uma estação, fica muito lento.


Responder

Gostei + 0

16/08/2007

Emerson Nascimento

já que você utiliza ClientDataset, exiba a descrição do produto utilizando join na tabela. não utilize lookup.


Responder

Gostei + 0

16/08/2007

Adminfo

já que você utiliza ClientDataset, exiba a descrição do produto utilizando join na tabela. não utilize lookup.



Acontece que quando eu uso o join, eu não consigo salvar, pois o cds diz que os campos exibidos pelo join não pertence a tabela.


Responder

Gostei + 0

16/08/2007

Emerson Nascimento

pra isso você precisa alterar as flags nos campos ´estrangeiros´. coloque as ProviderFlags como pfHidden e assim o DatasetProvider os ignora no momento da gravação.

isso pode ser feito no evento BeforeUpdateRecord do DatasetProvider ou nos campos diretamente no ClientDataset (desde que estejam persistidos).

no BeforeUpdateRecord do DatasetProvider seria algo assim:

procedure TForm1.DataSetProvider1BeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  DeltaDS.FieldByName(´CampoEstrangeiro1´).ProviderFlags := [pfHidden];
  DeltaDS.FieldByName(´CampoEstrangeiro2´).ProviderFlags := [pfHidden];
  DeltaDS.FieldByName(´CampoEstrangeiroX´).ProviderFlags := [pfHidden];
end;



Responder

Gostei + 0

16/08/2007

Adminfo

Fiz do jeito que vc me falou, e ficou bom, a velocidade aumentou muito. Porém, agora a descrição do produto não aparece no DBGrid. Já fiz todas as alterações que estavam relacionadas ao camo lookup, mas mesmo assim não exibe nada.

O meu problema é o seguinte: Eu tenho um cds em branco, que mais tarde irá ser salvo em uma tabela. Quando o usuario vai adicionando itens neste cds, ele exibe os itens adicionados em um DBGrid. Usando esta forma como vc me falou, o campo que deveria aparecer a descrição do produto, não aparece nada, fica em branco.

Como resolver isto?


Responder

Gostei + 0

16/08/2007

Emerson Nascimento

antes de incluir no clientdataset vc precisa fazer a busca do produto no banco - o que provavelmente já faz para verificar se o produto existe - e atualizar o campo que contém o nome do produto normalmente, assim como vc faz com os demais campos.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar