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
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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)