gutomazzi 0 Denunciar post Postado Abril 28, 2011 Olá a todos. Estou com um problema de lentidão em atualizar um núemro grande de registro. exemplo se tenho 200 registro para atualizar ocorre um lentidão consideravél. Segue o código abaixo Dim oConn As New OleDbConnection() Dim oCmd As OleDbCommand = oConn.CreateCommand() oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Mazzi;Extended Properties=dBASE IV;" If MsgBox("Deseja realmente Baixar o(s) orçamento(s)? ", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Excluir orçamento") = MsgBoxResult.Yes Then Dim prow As DataRow Dim datapag As Date datapag = Now.Date Dim i As Integer = 0 For Each prow In Me.Ds_Orcamento.Tables("Orcamentos").Rows If DataGridView1.Rows(i).Cells(0).Value = True Then oConn.Open() oCmd.CommandText = "UPDATE VENDAPRA.DBF SET DATAPAG = '" + datapag + "' WHERE NVENDA=" + prow("NVENDA").ToString oCmd.ExecuteNonQuery() oConn.Close() System.Windows.Forms.Application.DoEvents() End If i = i + 1 Next MsgBox(i.ToString + " Orçamento(s) Biaxado(s) com Sucesso!", MsgBoxStyle.Information, "Baixa do Orçamento") Me.BdDataSet.Clear() Me.Ds_Orcamento.Clear() oConn.Dispose() oCmd.Dispose() End If Como pode ser visto no código, tenho uma estrutura de repetição percorrendo os valores que serão atualizados. Como mencionei, com um grande número de registro (número de repetições da estrutura e execução do UPDATE) ocorre uma demora muito grande. Agradeço pela ajuda Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Abril 30, 2011 Trabalhe com transação, pesquise na net que ira achar exemplos bem simples, desta forma irá abrir a conexão uma unica vez, ira comitar tudo de uma unica vez e fechar a conexão somente no final, deve melhorar muito a performance. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Daniel LM Costa 2 Denunciar post Postado Maio 2, 2011 Existe uma modalidade de update que usa um select como fonte de valore, eu sei que funciona no sql server... é mais assim update tabela01 set campo1 = tabela02.cp1, campo2 = tabela02.cp2, campo3 = tabela02.cp3, campo4 = tabela02.cp4 from tabela01 inner join tabela02 on tabela01.campo = tabela02.campo neste caso tabela01 é atualizada e tabela02 faz o papel deste dataset.. ele evita esse tipo de problema de ter que fazer uma série de looping's.. tá usando Access ??? Compartilhar este post Link para o post Compartilhar em outros sites
gutomazzi 0 Denunciar post Postado Maio 3, 2011 Trabalhe com transação, pesquise na net que ira achar exemplos bem simples, desta forma irá abrir a conexão uma unica vez, ira comitar tudo de uma unica vez e fechar a conexão somente no final, deve melhorar muito a performance. Abraços... Agradeço pela ajuda, mas com transação não está funcionando. Acredito que seja devido ao banco ser DBF (antigo Clipper), pesquisei na net e aplicai no sistema e continua lento. O que percebi foi que a linha oCmd.ExecuteNonQuery() é executada e efetivada antes do tran.Commit() e que o tran.Rollback() foi acionado somente quando ocorreu um erro de sintaxe do comando update por tipos diferentes nos campos Fiz um teste com 700 registro e a lentidão é a mesma. Estou usando um i3 e consumiu nessa operação 25% da CPU. Existe uma modalidade de update que usa um select como fonte de valore, eu sei que funciona no sql server... é mais assim update tabela01 set campo1 = tabela02.cp1, campo2 = tabela02.cp2, campo3 = tabela02.cp3, campo4 = tabela02.cp4 from tabela01 inner join tabela02 on tabela01.campo = tabela02.campo neste caso tabela01 é atualizada e tabela02 faz o papel deste dataset.. ele evita esse tipo de problema de ter que fazer uma série de looping's.. tá usando Access ??? Olá Daniel, não entendi muito vem esse procedimento. Você poderia colocar um exemplo ou link ou como devo buscar na net exemplos dessas instrução. Estou utilizando um "banco" legado utilizado no Clipper, os conhecidos DBF. Tentei utilizar transação conforme o colega sugeriu, mas não funcionou, minha esperança é essa instrução SQL. Agradeço e aguardo Obrigado Compartilhar este post Link para o post Compartilhar em outros sites