AJUDA NO UPDATE
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!?!?!?!?
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!?!?!?!?
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?
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?
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
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
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
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
do resto tá rodando normal
havia esquecido que já tem essas opções na classe que grava os dados kk
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.
Por favor, se a dúvida já foi solucionada, não deixe de encerrar o tópÃco.
grato.
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
então...
Encerrando Tópico
Tópico encerrado , respostas não são mais permitidas