AJUDA NO UPDATE

DAMASCENO.CESAR 05/08/2015 13:15:25
#449607
Boa tarde, tenho um sistema em que preciso alterar vários registros em uma tabela ao mesmo tempo, para isso criei uma list e dentro dela insiro somente os registros que irei alterar e o código para alteração será o seguinte:

Dim LsPrt As List(Of Protocolo)
Dim A
Dim Str, Data As String
Dim ObjDb As New AcessoDados [ô]Aqui abro a classe com conexoes e execução de query
ObjDb.BeginTransaction()
Try
For A = 0 To LsPrt.Count - 1
Data = Format(LsPrt.Item(A).Data, [Ô]yyyy-MM-dd[Ô])
Str = [Ô]UPDATE Protocolo SET Entregue=[ô][Ô] & LsPrt.Item(A).Entregue & [Ô][ô] WHERE Numero=[ô][Ô] & LsPrt.Item(A).Numero & [Ô] AND Data=[ô][Ô] & Data & [Ô][ô];[Ô]
ObjDb.ExecuteAndGetReader(Str)
Next
ObjDb.CommitTransaction()
ObjDb.CloseConn()
Return True
Catch ex As Exception
ObjDb.RollBackTransaction()
ObjDb.CloseConn()
Return False
End Try

pretendo com esse código ir alterando um por um dos registros dentro do List, o código em si funciona, minha dúvida é se é possível alterar esses registros de forma mais rápida, ao invés de setar um por um dos registros que estão no list.
Meu banco de dados é MySql
Por enquanto, o número de registros gira entre 30 e 50, mas caso fosse uma quantia maior, esse código não deixaria o prg mais lento?
Se alguém puder me ajudar!?!?!?!?
DAMASCENO.CESAR 05/08/2015 13:46:44
#449615
Era pra funcionar (rsrs), mas dá erro na linha:
ObjDb.CommitTransaction()
acho que é porque tento alterar vários registros e depois finalisar com o commitTrans
tem como corrigir isso? kk
sem ser confirmando um por um?
JABA 05/08/2015 14:03:29
#449617
Resposta escolhida
Acho que teria que ser dessa forma mesmo. Você abriu aspas simples para o campo [Ô]Número[Ô] e não fechou. Acho que isso gerará um erro. Se esse campo estiver declarado como número no banco, não precisa utilizar as aspas simples, apenas se ele estiver como varchar. Além do mais, eu faria uma outra pequena mudança, usando um finally para liberar a conexão, segue o código:

Dim LsPrt As List(Of Protocolo)
Dim A
Dim Str, Data As String
Dim ObjDb As New AcessoDados [ô]Aqui abro a classe com conexoes e execução de query
ObjDb.BeginTransaction()
Try
For A = 0 To LsPrt.Count - 1
Data = Format(LsPrt.Item(A).Data, [Ô]yyyy-MM-dd[Ô])
Str = [Ô]UPDATE Protocolo SET Entregue=[ô] [Ô] & LsPrt.Item(A).Entregue & [Ô] [ô] WHERE Numero=[txt-color=#e80000][ô] [Ô][/txt-color] & LsPrt.Item(A).Numero & [txt-color=#e80000][Ô] [ô][/txt-color] AND Data=[ô][Ô] & Data & [Ô][ô];[Ô]
ObjDb.ExecuteAndGetReader(Str)
Next
ObjDb.CommitTransaction()
Return True
Catch ex As Exception
ObjDb.RollBackTransaction()
Return False
[txt-color=#e80000] Finally
ObjDb.CloseConn()[/txt-color]
End Try
   

DAMASCENO.CESAR 05/08/2015 14:43:07
#449629
a aspa simples já corrigi
o finnally não usava kk

a mensagem de erro que aparece é essa:
There is already an open DataReader associated with this Connection which must be closed first.

Public Sub RollBackTransaction()
If Not isTran Then Return
[ô] é nessa linha que dá esse erro
[txt-color=#e80000] trans.Rollback()[/txt-color]
conn.Close()
trans = Nothing
isTran = False
End Sub
DAMASCENO.CESAR 05/08/2015 14:52:15
#449631
Problema do erro corrigido, tirei o CommitTrans e o BeginTrans
do resto tá rodando normal
havia esquecido que já tem essas opções na classe que grava os dados kk
JABA 05/08/2015 14:56:46
#449632
E o mais engraçado de tudo é que você abriu o tópico dizendo que tava funcionando tudo certinho. kkkkkkkkkkkkkkkkkkkkk

Por favor, se a dúvida já foi solucionada, não deixe de encerrar o tópíco.

grato.

DAMASCENO.CESAR 05/08/2015 15:19:38
#449634
O que eu realmente gostaria de saber é se havia outra maneira de fazer isso, sem colocar registro por registro, kk, mas pelo jeito não há outra maneira
então...
Encerrando Tópico
Tópico encerrado , respostas não são mais permitidas