[firebase-br] Muito lento oClientDataSet.ApplyUpdates(0) noFirebird 1.5...

Thiago - Enter&Plug Software jeandeadlucky em yahoo.com.br
Qui Fev 10 12:42:31 -03 2005


Olá Adalberto

> O caso é que eu preciso atualizar a tabela "Detail" durante a operação... 
> Considerando que estou usando componentes dbExpress, preciso de um 
> DataSetProvider linkado ao ClientDataSet, mas quando o campo DataSet do 
> "CDS Master" é atribuído a propriedade DataSetField do "CDS Detail" a 
> propriedade ProviderName  é limpa e não consigo abrir o nenhum dos "CDSs" 
> apresentando a mensagem de "field not found"...

Vamos por partes:
1º Você tem de abrir o cdsMaster antes de abrir o cdsDetail em tempo de 
execução (o ProviderName fica vazio mesmo. Não tente atribuir nada no CDS 
filhos)
2º Verifique se no FieldsEditor não existe algum registro que não exite no 
banco. (que tenha sido deletado ou algo do tipo)
3º Não se esqueça de configurar o ProviderFlags nos SQLDataSet... Por 
precaução, eu tb configuro no ClientDataSet
4º Adicione poCascadeUpdate e poCascadeDeletes no Provider. Assim ele sempre 
atualizará o valor de chave no detalhe (poCascadeUpdate) e apagará os filhos 
(poCascadeDeletes)
5º Eu encontrei alguns problemas no Mestre / Detalhe Nested trabalhando em 
SOAP... Resolvi com o procedimento a seguir:
BeforeUpdateRecord
const
  {$J+} // Permite constante tipada
  qg:Integer = -1;
  {$J-}// Des-permite :D
begin
  if UpdateKind in [ukInsert] then //Se estiver inserindo
  begin
    if SourceDS = sqlCad_Condicao then // Estou atualizando o Mestre
    begin
      UpdateRecordAutoInc(Sender,SourceDS,DeltaDS,UpdateKind,Applied,
        DeltaDS.FieldByName('CCOND_CODIGO').Index); // Pego o proximo valor 
(auto Incremento)
      qg := DeltaDS.FieldByName('CCOND_CODIGO').NewValue // Jogo o valor na 
minha constante
    end
    else if qg <> -1 then // se foi informado um valor (no auto inc em caso 
de erro, é retornando um -1)
      DeltaDS.FieldByName('CCOND_CODIGO').NewValue := qg; //Jogo o valor da 
chave aqui
  end;
end;



----- Original Message ----- 
From: "Adelson R. Longo" <adelsonlongo em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, February 10, 2005 11:22 AM
Subject: Re: [firebase-br] Muito lento oClientDataSet.ApplyUpdates(0) 
noFirebird 1.5...


> Olá Thiago,
>
> Eu já tinha conhecimento desta forma de relacionamento Master/Detail com 
> "Nested DataSet" e já tinha até tentado uma vez, mas não consegui.... me 
> animei mais uma vez agora e ainda nada....
>
> Baixei um exemplo do site da Borland Developer Network, só com dois 
> ClientDataSet's abrindo dados de XMLs... funcionou legal, mas na para mim, 
> no meu projeto não ? ! ? ! ? !
>
> O caso é que eu preciso atualizar a tabela "Detail" durante a operação... 
> Considerando que estou usando componentes dbExpress, preciso de um 
> DataSetProvider linkado ao ClientDataSet, mas quando o campo DataSet do 
> "CDS Master" é atribuído a propriedade DataSetField do "CDS Detail" a 
> propriedade ProviderName  é limpa e não consigo abrir o nenhum dos "CDSs" 
> apresentando a mensagem de "field not found"...
>
> Pode me ajudar ?
>
> Obrigado,
>
> Adelson.
>
> Thiago - Enter&Plug Software wrote:
>
>> Adelson.
>>
>> Kra, desculpa, de deixei na mão.....
>>
>> Não li todos os emails que chegaram até você ..  mas tenho uma sugestão 
>> (depois de ler o aqui em baixo):
>> PÁRA TUDO!
>>
>> Desinstala a fbclient.dll das máquinas, desinstala o servidor e instala 
>> tudo de novo!
>>
>> (Mestre/Detalhes) vc tá louco de fazer o Mestre/Detalhe assim!. Agora to 
>> meio sem tempo... mas procura algo sobre "NestedDataSet" no Help do 
>> Delphi...se não achar, me fala que eu te digo como fazer isso no 
>> ClientDataSet. Fica beeemmm mais rápido
>>
>> E qqr outra coisa me chama
>>
>> Francisco Thiago de Almeida
>> Enter&Plug Informática
>> Divisão: Desenvolvimento e Banco de dados
>> MSN: thiago em enterplug.com.br
>>
>>
>>
>> ----- Original Message ----- From: "Caio Oliveira" <news em caiosis.com.br>
>> To: <lista em firebase.com.br>
>> Sent: Wednesday, February 09, 2005 3:05 PM
>> Subject: Re: [firebase-br] Muito lento o ClientDataSet.ApplyUpdates(0) 
>> noFirebird 1.5...
>>
>>
>>> Olá Adelson,
>>>
>>> Esse erro que vc. reportou
>>>
>>> "Unable to complete network request to host "nome-do-host".Failed to
>>> establish a connection."
>>>
>>> Indica que o fbcliente está tendo problemas para localizar o servidor; 
>>> como vc. está indicando a localização do servidor? via enddereço IP 
>>> diretamente ou pelo nome do mesmo; vc. pode estar tendo um problema de 
>>> DNS Location. Se tiver usando nome mude para IP e experimente.
>>>
>>> Nesse caso realmente não importa o tamanho da base nem da tabela, pois o 
>>> cliente demora muito tempo para localizar o servidor e às vezes não o 
>>> localiza causando essa lentidão.
>>>
>>> Sds, Caio
>>>
>>>
>>> Adelson R. Longo wrote:
>>>
>>>> Caríssimo Carlos,
>>>>
>>>> Respeito muito sua palavra, aliás, quem poderia contradizê-lo sobre 
>>>> Firebird aqui no Brasil ! ! !
>>>> Mas, o caso é, mesmo em um banco com uma tabela com 5 registros e mais 
>>>> nada , ocorre o mesmo problema, lentidão no 
>>>> ClientDataSet.ApplyUpdates(0)....
>>>>
>>>> Minha aplicação é CLX e uso os componentes dbExpress:
>>>> DBConnection + SQLDataset + DataSetProvider + ClientDataSet + 
>>>> DataSource
>>>>
>>>> Se no DBConnection uso a DLL do Interbase (GDS32.DLL) em VendorLib 
>>>> funciona a uma velocidade razoavelmente e apresenta com certa 
>>>> constância o erro:
>>>> "Unable to complete network request to host "nome-do-host".Failed to 
>>>> establish a connection.",
>>>>
>>>> mas se uso a DLL do Firebird (FBCLIENT.DLL) funciona sem erros, mas "a 
>>>> passos de formiga"...
>>>>
>>>> Uso nas maquinas o firewall ZoneAlarm, mas libero as portas 3050 em TCP 
>>>> e UDP...
>>>>
>>>> Carlão, se não for o banco são os componentes, por que não precisa nem 
>>>> lógica de programação para se trabalhar com essa quantidade de 
>>>> registros...
>>>>
>>>> Abraços,                   Adelson.
>>>>
>>>>
>>>> Carlos H. Cantu wrote:
>>>>
>>>>> 11MB? Isso é muito pouco. Deve ter algum erro da lógica de programação
>>>>> que vc está usando....
>>>>>
>>>>> []s
>>>>> Cantu
>>>>> http://www.warmboot.com.br
>>>>> FireBase - http://www.FireBase.com.br
>>>>>
>>>>> AL> Olá PessoALL....
>>>>>
>>>>> AL> Alguem poderia me ajudar nessa "parada dura" que está me
>>>>> AL> deixando muito preocupado em relação ao uso do Firebird...
>>>>> AL> Enquanto o BD. estava "pequeno" minha aplicação rodava que
>>>>> AL> era "uma beleza"... com acesso bi-direcional aos cadastros e
>>>>> AL> pesquisas e etc.... utilizando Delphi 7 e dbExpress + FB 1.5 e RH
>>>>> AL> 9 .... mas agora que o banco creceu um pouco (+/- 11MB) tá uma
>>>>> AL> lastima.... e o "gargalo" pude perceber ser justamente no
>>>>> AL> ApplyUpdates...
>>>>> AL> Tabelas com poucos registros ele simplesmente congela a
>>>>> AL> aplicação por uns 15 segundos a cada
>>>>> AL> ClientDataSet.ApplyUpdates(0)...
>>>>>
>>>>> AL> Alguem poderia me ajudar....
>>>>>
>>>>> AL> Grato,                                               Adelson.
>>>>>
>>>>>
>>>>>
>>>>> ______________________________________________
>>>>> 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
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> ______________________________________________
>>> 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
>>>
>>
>>
>>
>>
>>
>> ______________________________________________
>> 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
>>
>
>
>
> -- 
> No virus found in this outgoing message.
> Checked by AVG Anti-Virus.
> Version: 7.0.300 / Virus Database: 265.8.6 - Release Date: 7/2/2005
>
>
>
>
> ______________________________________________
> 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
> 








Mais detalhes sobre a lista de discussão lista