PRESERVAR O CURSOR NO VB6 - URGENTE --EMPRESA PARA

FERNANDORUBIM 14/06/2012 09:36:06
#404116
pessoal... tenho uma rotina no vb6 que leio uma tabela gigantesca e faço um do while onde são atualizadas várias tabelas(insert e update) ...como faço um begin no início da transação e o commit só no final acaba travando toda a empresa e é lógico as reclamções aparecem..pergunto,tem como fazer um begin/commit a cada insert/update preservando o cursor do while para q ele continue com a leitura ???segue exemplo do q faço:

wrkJet.BeginTrans
wl_Select = [Ô]SELECT NR_CONTRATO, DT_VCTO,FAIXA,TIPO_PAGTO FROM TAB_ESTOQUE [Ô] NULL
wl_Select = wl_Select & [Ô] WHERE[Ô]
wl_Select = wl_Select & [Ô] DT_INCLUSAO >= [Ô] & FormataDataDB(WL_dt_ini_mes)
wl_Select = wl_Select & [Ô] and DT_INCLUSAO <= [Ô] & FormataDataDB(WL_dt_fim_mes)
[ô][ô][ô] wl_Select = wl_Select & [Ô] and (NOT TIPO_PAGTO = [ô]V[ô] AND NOT TIPO_PAGTO = [ô]Q[ô])[Ô]
Set cur_CLIENTE = db.OpenRecordset(wl_Select)
With cur_CLIENTE
Do While Not .EOF
WL_NR_CONTRATO = IIf(IsNull(!nr_contrato), [Ô][Ô], !nr_contrato)
WL_DT_ATRASO = IIf(IsNull(!DT_VCTO), [Ô][Ô], !DT_VCTO)
--- aqui vários inserts e updates (sem o commit)
.MoveNext
Loop
.Close
End With

wrkJet.CommitTrans

alguem pode me ajudar com urg^necia por favor ???

obrigado
FEDERHEN 14/06/2012 11:04:27
#404129
Resposta escolhida
Você pode fazer conforme abaixo, e isso garante a integridade de cada registro, evitando que uma tabela seja atualizada e outra não.

wl_Select = [Ô]SELECT NR_CONTRATO, DT_VCTO,FAIXA,TIPO_PAGTO FROM TAB_ESTOQUE [Ô] NULL
wl_Select = wl_Select & [Ô] WHERE[Ô]
wl_Select = wl_Select & [Ô] DT_INCLUSAO >= [Ô] & FormataDataDB(WL_dt_ini_mes)
wl_Select = wl_Select & [Ô] and DT_INCLUSAO <= [Ô] & FormataDataDB(WL_dt_fim_mes)
[ô][ô][ô] wl_Select = wl_Select & [Ô] and (NOT TIPO_PAGTO = [ô]V[ô] AND NOT TIPO_PAGTO = [ô]Q[ô])[Ô]
Set cur_CLIENTE = db.OpenRecordset(wl_Select)
With cur_CLIENTE
Do While Not .EOF
WL_NR_CONTRATO = IIf(IsNull(!nr_contrato), [Ô][Ô], !nr_contrato)
WL_DT_ATRASO = IIf(IsNull(!DT_VCTO), [Ô][Ô], !DT_VCTO)
[txt-color=#e80000]wrkJet.BeginTrans[/txt-color]
--- aqui vários inserts e updates (sem o commit)
[txt-color=#e80000]wrkJet.CommitTrans[/txt-color]
.MoveNext
Loop
.Close
End With


GOODSPEAKERS 14/06/2012 11:11:44
#404130
Ola... segue o FEDERHEN..
Abraço
FERNANDORUBIM 15/06/2012 16:41:41
#404264
mas este é o problema;;;se coloco o
wrkJet.BeginTrans
--- aqui vários inserts e updates
wrkJet.CommitTrans

quando vai ler o .movenext diz q nao está mais ativo o cursor cur_CLIENTE que faz o do while visto q foi dado um commit...e ai cai a rotina...
FEDERHEN 15/06/2012 17:31:11
#404267
O CommitTrans apenas encerra a transação de controle de gravação e atua sobre a conexão.

Voce pode abrir uma segunda conexão com o banco de dados, para fazer o insert e update
e aplicar o BeginTrans e CommitTrans sobre esta segunda conexão.

Assim, as atualizações não vão afetar a primeira conexão.
Tópico encerrado , respostas não são mais permitidas