LENTO/TRAVANDO O VB

USUARIO.EXCLUIDOS 14/07/2005 09:25:48
#94078
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
WEBMASTER 14/07/2005 09:55:18
#94082
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.
JEAN.JEDSON 14/07/2005 10:06:18
#94083
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
USUARIO.EXCLUIDOS 14/07/2005 10:20:33
#94086
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.
USUARIO.EXCLUIDOS 14/07/2005 10:50:21
#94089
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.
LCSD 14/07/2005 11:34:22
#94102
Aterloni

Tu mantém o RecordSet de 80.000 Linhas carregado?

Como é a SQL de abertura dele?
[s50]

USUARIO.EXCLUIDOS 18/07/2005 10:44:01
#94684
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 !
USUARIO.EXCLUIDOS 18/07/2005 11:26:59
#94699
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
JEAN.JEDSON 18/07/2005 11:28:03
#94700
bem... o que vc precisa exatamente fazer? gerar boletos?
USUARIO.EXCLUIDOS 18/07/2005 11:44:19
#94708
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 !
USUARIO.EXCLUIDOS 18/07/2005 12:30:02
#94723
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".
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas