Dh-00 0 Denunciar post Postado Fevereiro 12, 2014 Estou migrando um projeto, que utiliza access para o sqlite. Todo o projeto foi feito com conexao oledb. O problema que tenho agora com o sqllite, mas que funciona perfeitamente era com transações multiplas no banco de dados. Abaixo tem o codigo que estou usando, o banco retorna um erro de db locked ao executar o segundo comando no banco, e não estou conseguindo arrumar. 'metodo que realiza a alteração na base de dados If (txt_nome.Text <> "" And txt_endereco.Text <> "") Then Dim d As DialogResult = MsgBox("Confirma a atualização do cadastro da escola?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Aviso!") Dim trans As SQLite.SQLiteTransaction = Nothing If d.ToString = "Yes" Then Try 'Parametros de conexao Dim v_obj_conn = New Conexao() conn = v_obj_conn.Inicia_conexao conn.Open() 'cria a transação trans = conn.BeginTransaction(IsolationLevel.ReadCommitted) 'descobre o novo sequencial 'comando SQL v_sql = "select max(seq)+1 as seq from cad_escola_versao where id_escola=@id_escola" Dim sql_cod = New SQLite.SQLiteCommand(v_sql, conn, trans) With sql_cod.Parameters .Add(New SQLite.SQLiteParameter("@id_escola", txt_codigo.Text.Trim())) End With Dim dr As Sqlite.SQLiteDataReader = sql_cod.ExecuteReader dr.Read() Dim v_new_seq = dr("seq") v_sql = Nothing 'grava o registro na tabela de versao para historico Util.Grava_versao_cad_escola(conn, _ txt_codigo.Text.Trim(), _ v_new_seq, _ txt_nome.Text.Trim(), _ Util.Retirar_mascara(txt_cnpj.Text.Trim()), _ txt_endereco.Text.Trim(), _ txt_cidade.Text.Trim(), _ Util.Retirar_mascara(txt_cep.Text.Trim()), _ cmb_uf.Text.Trim(), _ Util.Retirar_mascara(txt_tel1.Text.Trim()), _ Util.Retirar_mascara(txt_tel2.Text.Trim()), _ Util.Retirar_mascara(txt_fax.Text.Trim()), _ txt_email.Text.Trim(), _ Frm_principal.lbl_usuario.Text.Trim, _ trans) 'realiza o update v_sql = "update cad_escola set seq=@seq," & _ " razao_social=@razao_social," & _ " cnpj=@cnpj," & _ " endereco=@endereco," & _ " cidade=@cidade," & _ " cep=@cep," & _ " uf=@uf," & _ " tel_1=@tel_1," & _ " tel_2=@tel_2," & _ " fax=@fax," & _ " email=@email," & _ " usuario_criacao=@usuario_criacao," & _ " data_criacao=Now()" & _ " where id_escola=@id_escola" Dim sql = New SQLite.SQLiteCommand(v_sql, conn, trans) 'monta os paremtros With sql.Parameters .Add(New SQLite.SQLiteParameter("@seq", v_new_seq)) .Add(New SQLite.SQLiteParameter("@razao_social", txt_nome.Text.Trim())) .Add(New SQLite.SQLiteParameter("@cnpj", Util.Retirar_mascara(txt_cnpj.Text.Trim()))) .Add(New SQLite.SQLiteParameter("@endereco", txt_endereco.Text.Trim())) .Add(New SQLite.SQLiteParameter("@cidade", txt_cidade.Text.Trim())) .Add(New SQLite.SQLiteParameter("@cep", Util.Retirar_mascara(txt_cep.Text.Trim()))) .Add(New SQLite.SQLiteParameter("@uf", cmb_uf.Text.Trim())) .Add(New SQLite.SQLiteParameter("@tel_1", Util.Retirar_mascara(txt_tel1.Text.Trim()))) .Add(New SQLite.SQLiteParameter("@tel_2", Util.Retirar_mascara(txt_tel2.Text.Trim()))) .Add(New SQLite.SQLiteParameter("@fax", Util.Retirar_mascara(txt_fax.Text.Trim()))) .Add(New SQLite.SQLiteParameter("@email", txt_email.Text.Trim())) .Add(New SQLite.SQLiteParameter("@usuario_criacao", Frm_principal.lbl_usuario.Text.Trim)) .Add(New SQLite.SQLiteParameter("@id_escola", txt_codigo.Text)) End With 'Executa o comando SQL sql.ExecuteNonQuery() sql.Dispose() trans.Commit() MsgBox("Atualização de cadastro de escola efetuado com sucesso!", MsgBoxStyle.Information, "Aviso!") Limpa_campos() cmd_cadastrar.Enabled = True cmd_atualizar.Enabled = False Catch ex As Exception MsgBox("Houve um erro durante a atualização do cadastro!" + Chr(13) + ex.Message, MsgBoxStyle.Critical, "Aviso!") trans.Rollback() Finally If (conn.State = ConnectionState.Open) Then conn.Close() End If End Try End If Else MsgBox("Para atualizar o cadastro é obrigatório o preenchimento do nome e endereço!", MsgBoxStyle.Information, "Aviso!") End If Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Fevereiro 13, 2014 DB Locked é quando você executa muitas transações ao mesmo tempo e o DB não consegue segurar todas elas. Isso é problema de configuração de banco. Compartilhar este post Link para o post Compartilhar em outros sites
Dh-00 0 Denunciar post Postado Fevereiro 13, 2014 DB Locked é quando você executa muitas transações ao mesmo tempo e o DB não consegue segurar todas elas. Isso é problema de configuração de banco. KhaosDoctor, mas como realizo essa configuração? Lembrando que estou usando o modelo IsolationLevel.ReadCommitted, para não ter problema na leitura dos dados. O que acontece, é que dou um insert em uma tabela de historico, e depois um update. na hora do update ocorre o erro, e o rollback é executado. valeu Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Fevereiro 14, 2014 Você dá o commit no meio das transações? Compartilhar este post Link para o post Compartilhar em outros sites