LENTO/TRAVANDO O VB
Boa dia galera;
Dessa vez é o seguinte: - Eu tenho uma tabela de 80.000 linhas no sql server, os campos saum de juros / multa / total / despeza com cobrança, etc...valores que precisa ser atualizados toda vez que abro algum relatório ! Estou com cinco recordsets abertos, mas os outros quatro tem somente 1 registro ! - Fiz um loop nessa tabela, e estou verifcando linha por linha, mas tah muito lento e as vezes chega até a travar! Alguem poderia me dar uma dica de como fazer isso mais rápido !?
Obs: Windows 2000, Sql Server 7, HD 60GB, 256 de memória
Dessa vez é o seguinte: - Eu tenho uma tabela de 80.000 linhas no sql server, os campos saum de juros / multa / total / despeza com cobrança, etc...valores que precisa ser atualizados toda vez que abro algum relatório ! Estou com cinco recordsets abertos, mas os outros quatro tem somente 1 registro ! - Fiz um loop nessa tabela, e estou verifcando linha por linha, mas tah muito lento e as vezes chega até a travar! Alguem poderia me dar uma dica de como fazer isso mais rápido !?
Obs: Windows 2000, Sql Server 7, HD 60GB, 256 de memória
Nossa... 4 RecordSets abertos não é recomendável. Fica lento mesmo. Ainda mais acessando o banco com tantos registros.
Tente fechar os recordsets logo depois de utilizá-lo. Não há necessidade de deixá-los abertos permanentemente.
Tente fechar os recordsets logo depois de utilizá-lo. Não há necessidade de deixá-los abertos permanentemente.
ATERLONI
se 4 recordsets possuem apenas um registro, guarde estes dados em um array e feche estes recordsets... mantenha apenas o recordset com as 80 mil linhas aberto... e poste o código que vc usa (do loop) para que possamo avaliar
se 4 recordsets possuem apenas um registro, guarde estes dados em um array e feche estes recordsets... mantenha apenas o recordset com as 80 mil linhas aberto... e poste o código que vc usa (do loop) para que possamo avaliar
ATERLONI
Vc me diz q esta fazendo um loop nos 80.000 registros. dependedo dos campos vc não consegue fazer essas atualizações em um update? Se conseguir unir a uma instrução sql, irá ganha um tempo bem consideravel.
Vc me diz q esta fazendo um loop nos 80.000 registros. dependedo dos campos vc não consegue fazer essas atualizações em um update? Se conseguir unir a uma instrução sql, irá ganha um tempo bem consideravel.
1) todos o 80.000 registros precisam ser abertos, pois todos serão alterados???
2) quantos campos tem nesta tabela, e quais esta abrindo??
2.1) se tiver 10 campos e precisa apenas de 4 não faça "Select * from Tabela"
faça "Select Campo1, campo2, campo3, campo4 from tabela"
3) como esta definindo cursortype, cursorlocation e locktype???
4) como o jean disse, poste como esta fazendo o loop e qual a rotina dentro dele.
2) quantos campos tem nesta tabela, e quais esta abrindo??
2.1) se tiver 10 campos e precisa apenas de 4 não faça "Select * from Tabela"
faça "Select Campo1, campo2, campo3, campo4 from tabela"
3) como esta definindo cursortype, cursorlocation e locktype???
4) como o jean disse, poste como esta fazendo o loop e qual a rotina dentro dele.
Aterloni
Tu mantém o RecordSet de 80.000 Linhas carregado?
Como é a SQL de abertura dele?
[s50]
Tu mantém o RecordSet de 80.000 Linhas carregado?
Como é a SQL de abertura dele?
[s50]
Fiz um teste só pra contar os registros, quando tempo ele iria gastar: usei a seguinte função:
For i = 1 To rsBoletos.RecordCount
With rsBoletos
.MoveNext
frmProgress.prbProgress.Value = .AbsolutePosition
End With
''
DoEvents
Next
ele gastou 00:01:05, com 30.000 registros !
For i = 1 To rsBoletos.RecordCount
With rsBoletos
.MoveNext
frmProgress.prbProgress.Value = .AbsolutePosition
End With
''
DoEvents
Next
ele gastou 00:01:05, com 30.000 registros !
Dim rsBoletos As New ADODB.Recordset
Set rsBoletos = New ADODB.Recordset
rsBoletos.Open "select * from BOLETOS", cxGlobal, adOpenDynamic, adLockOptimistic
dessa maneira que abro o recordset boletos que contem 30.000 registros
Set rsBoletos = New ADODB.Recordset
rsBoletos.Open "select * from BOLETOS", cxGlobal, adOpenDynamic, adLockOptimistic
dessa maneira que abro o recordset boletos que contem 30.000 registros
bem... o que vc precisa exatamente fazer? gerar boletos?
Eu preciso atualizar juros / multa / desp. com cobrança.
Obs: rsBoletos.Open "select CODBOLETO, CARTAO, VENCIMENTO, COMPRAS, JUROS, MULTA, DESP_COBRANCA, UTI, UTS, TOTAL, MINIMO from BOLETOS", cxGlobal, adOpenDynamic, adLockOptimistic
tentei fazer dessa maneira mas kd hora ele trava num registro diferente, eo vb é finalizado, sem opção de fazer nada !
Obs: rsBoletos.Open "select CODBOLETO, CARTAO, VENCIMENTO, COMPRAS, JUROS, MULTA, DESP_COBRANCA, UTI, UTS, TOTAL, MINIMO from BOLETOS", cxGlobal, adOpenDynamic, adLockOptimistic
tentei fazer dessa maneira mas kd hora ele trava num registro diferente, eo vb é finalizado, sem opção de fazer nada !
aterloni, veja:
http://www.vbmania.com.br/vbmdetail.php?varID=2971
neste exemplo, é para mostrar como carregar um listbox, porém veja como tudo foi feito, desde a declaração da conexao, recordset, cursortype, etc e veja se com isso você consegue melhorar o desempenho do seu código.
em um computador de 2 GH com 500 de memoria a listbox foi preenchida com cerca de 9000 registros em cerca de 1 "segundo".
http://www.vbmania.com.br/vbmdetail.php?varID=2971
neste exemplo, é para mostrar como carregar um listbox, porém veja como tudo foi feito, desde a declaração da conexao, recordset, cursortype, etc e veja se com isso você consegue melhorar o desempenho do seu código.
em um computador de 2 GH com 500 de memoria a listbox foi preenchida com cerca de 9000 registros em cerca de 1 "segundo".
Tópico encerrado , respostas não são mais permitidas