GARANTIR DESCONTO

Fórum Demora em Close em SQLDataSet #346150

17/09/2007

0

Utilizo um TSQLDataSet para abrir uma tabela.

A rotina é esta.

//abro os clientes
SQLDataSet[b:c614b524ec]1[/b:c614b524ec].Close;
SQLDataSet1.CommandText := ´SELECT CODIGO, NOME * FROM [b:c614b524ec]CLIENTES[/b:c614b524ec] WHERE CODIGO IS NULL´;
SQLDataSet1.Open;

//fornecedores
SQLDataSet[b:c614b524ec]2[/b:c614b524ec].Close;
SQLDataSet2.CommandText := ´SELECT CODIGO, NOME * FROM [b:c614b524ec]FORNECEDORES[/b:c614b524ec] WHERE CODIGO IS NULL´;
SQLDataSet2.Open;

Antes da execução, o CommandText dos dois SQLDataSet é = ´´;

Logicamente, as duas consultas retornam recordCount = 0, ou seja, vazias.

Ao debugar, percebi que a primeira linha (SQLDataSet[b:c614b524ec]1[/b:c614b524ec].Close), demora cerca de meio segundo para ser executada. Já a primeira linha da segunda rotina, é executa rapidamente (15 milissegundos).
Conferi e, ambos os SQLDataSets estão fechados antes de executar a rotina.

O que é que pode estar causando esso demora? Tentei com outras tabelas do banco, e acontece a mesma coisa. Se eu inverter, ou seja, executar primeiro o segundo bloco, será a linha ´SQLDataSet[b:c614b524ec]2[/b:c614b524ec].close´ que irá demorar 500 mils., enquanto que ´SQLDataSet[b:c614b524ec]1[/b:c614b524ec]´.Close), não demorará. Então o problema não está relacionado à tabela, nem ao componente.
A impressão é que a aplicação precisa se conectar ao BD ou algo assim, na primeira vez que um .close é executado.

Em princípio esse tempo não parece nada, mas na minha aplicação, como tenho rotinas onde executo isso em várias situações, em algumas vezes, a tela fica congelada, por um ou dois segundos e isso dá uma má impressão.

Alguém tem alguma dica?
D7 FB 2.0

Obrigado


Armindo

Armindo

Responder

Posts

17/09/2007

Armindo

Utilizo um TSQLDataSet para abrir uma tabela. A rotina é esta. //abro os clientes SQLDataSet[b:96d4419aad]1[/b:96d4419aad].Close; SQLDataSet1.CommandText := ´SELECT CODIGO, NOME * FROM [b:96d4419aad]CLIENTES[/b:96d4419aad] WHERE CODIGO IS NULL´; SQLDataSet1.Open; //fornecedores SQLDataSet[b:96d4419aad]2[/b:96d4419aad].Close; SQLDataSet2.CommandText := ´SELECT CODIGO, NOME * FROM [b:96d4419aad]FORNECEDORES[/b:96d4419aad] WHERE CODIGO IS NULL´; SQLDataSet2.Open; Antes da execução, o CommandText dos dois SQLDataSet é = ´´; Logicamente, as duas consultas retornam recordCount = 0, ou seja, vazias. Ao debugar, percebi que a primeira linha (SQLDataSet[b:96d4419aad]1[/b:96d4419aad].Close), demora cerca de meio segundo para ser executada. Já a primeira linha da segunda rotina, é executa rapidamente (15 milissegundos). Conferi e, ambos os SQLDataSets estão fechados antes de executar a rotina. O que é que pode estar causando esso demora? Tentei com outras tabelas do banco, e acontece a mesma coisa. Se eu inverter, ou seja, executar primeiro o segundo bloco, será a linha ´SQLDataSet[b:96d4419aad]2[/b:96d4419aad].close´ que irá demorar 500 mils., enquanto que ´SQLDataSet[b:96d4419aad]1[/b:96d4419aad]´.Close), não demorará. Então o problema não está relacionado à tabela, nem ao componente. A impressão é que a aplicação precisa se conectar ao BD ou algo assim, na primeira vez que um .close é executado. Em princípio esse tempo não parece nada, mas na minha aplicação, como tenho rotinas onde executo isso em várias situações, em algumas vezes, a tela fica congelada, por um ou dois segundos e isso dá uma má impressão. Alguém tem alguma dica? D7 FB 2.0 Obrigado


Desculpe, digitei os selects errados
o correto é:
´SELECT CODIGO, NOME FROM CLIENTES WHERE CODIGO IS NULL´
´SELECT CODIGO, NOME FROM FORNECEDORES WHERE CODIGO IS NULL´
Sem o *. Mas na aplicação onde o problema ocorre, está correto.

Obrigado.


Responder

Gostei + 0

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

Aceitar