Tópico anterior Próximo tópico Novo tópico
VB.NET
#496221 - 10/02/2021 17:29:48 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Última edição em 10/02/2021 17:31:15 por MFLAVIO Ola gente eu travezzzzz.preciso de um norte estamos criado um APP, que verifica alguns arquivos enviados pelos nossos clientes dentre os arquivos recebemos um banco de dados (firebird) eu faço a conexão a esse arquivos dessa forma Public conexaoFB As FbConnection ' esta esta declarada no cabeçario do Modulo Public Sub Conecta(Svalor As Boolean) Dim IP, DB, cString As String Try If Svalor = True Then IP = '127.0.0.1' DB = sPath & '\fecha\dic.fdb' cString = 'User=SYSDBA;Password=masterkey;Database=' & DB & ';DataSource=' & IP & ';ConnectionTimeout=30;Port=3050;Dialect=3' conexaoFB = New FbConnection(cString) conexaoFB.Open() Else conexaoFB.Close() conexaoFB.Dispose() End If Catch ex As Exception SAviso = '***Atenção Erro ao Conectar a Base de dados***' & vbCrLf & ex.Message Aviso.ShowDialog() Err.Clear() End Try End Sub esta normal a única coisa e que mesmo executando o comando Close e Dispose na conexão o arquivo do Banco de dados continua em uso , ou seja não consigo mover ele para outra pasta so consigo usar o Arquivo do Banco se eu fechar o APP alguém sabe como consigo liberar o Arquivos sem fechar o APP? Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#496222 - 10/02/2021 18:02:48 | ||||
![]() OMAR2011 MONTES CLAROS Cadast. em:Setembro/2011 ![]() |
Última edição em 10/02/2021 18:04:06 por OMAR2011 Tem que fechar a conexão.Verdadeiro,sempre estará aberta. Usa o Using.Terminado o código fecha conexão sem precisar de Close. |
|||
#496223 - 10/02/2021 18:12:44 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Citação: : Tem que fechar a conexão. Verdadeiro,sempre estará aberta. Usa o Using.Terminado o código fecha conexão sem precisar de Close. cara a te tentei usar o Bloco Using mais não consegui da erro e não aceita as variaveis do Firebird Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#496224 - 10/02/2021 18:17:22 | ||||
![]() KERPLUNK RIO GRANDE DO SUL Cadast. em:Junho/2009 ![]() |
Seu problema é estrutural. Não deveria ser um método 'conecta' que realmente conecta algo. Você deveria ter uma função que retorna um objeto do tipo 'FbConnection' já configurado. Esse objeto deveria ser o que o bloco using processa. A conexão é aberta dentro do bloco using e será fechada e descartada no final do mesmo.
_______________________________________________________________________ Virei Oráculo! The end is nigh, be ready for the nukes! |
|||
#496225 - 10/02/2021 18:26:37 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Citação: : Seu problema é estrutural. Não deveria ser um método 'conecta' que realmente conecta algo. Você deveria ter uma função que retorna um objeto do tipo 'FbConnection' já configurado. Esse objeto deveria ser o que o bloco using processa. A conexão é aberta dentro do bloco using e será fechada e descartada no final do mesmo. Mais CONECTA e o nome da sub Que faz a Conexão, eu realmente não estou sabendo criar a conexão Usando Bloco USING estou pesquisando no google tentando achar algum exemplo Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#496226 - 10/02/2021 19:05:43 | ||||
![]() KERPLUNK RIO GRANDE DO SUL Cadast. em:Junho/2009 ![]() |
Última edição em 10/02/2021 19:17:05 por KERPLUNK Isso é porque você não está usando OOP, Só por mencionar 'cabeçalho de módulo', é forte indÃcio disso. Aqui um exemplo simples:Public Class Program Public Shared Sub Main() Using cn As FbConnection = New Firebird.GetConnection() Try cn.Open() 'Aqui a conexão chamada 'cn' estará aberta e disponÃvel para ser usada com o que quiser. Ela é o alvo do bloco using e portanto será fechada e descartada quando o bloco terminar Catch ex As Exception End Try End Using End Sub End Class Public Class Firebird Public Function GetConnection() As FbConnection Dim _return As FbConnection = New FbConnection() _return.ConnectionString = 'bla bla sua connection string' Return _return End Function End Class _______________________________________________________________________ Virei Oráculo! The end is nigh, be ready for the nukes! |
|||
#496227 - 11/02/2021 10:13:58 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Citação: : Isso é porque você não está usando OOP, Só por mencionar 'cabeçalho de módulo', é forte indÃcio disso. Aqui um exemplo simples: Public Class Program Public Shared Sub Main() Using cn As FbConnection = New Firebird.GetConnection() Try cn.Open() 'Aqui a conexão chamada 'cn' estará aberta e disponÃvel para ser usada com o que quiser. Ela é o alvo do bloco using e portanto será fechada e descartada quando o bloco terminar Catch ex As Exception End Try End Using End Sub End Class Public Class Firebird Public Function GetConnection() As FbConnection Dim _return As FbConnection = New FbConnection() _return.ConnectionString = 'bla bla sua connection string' Return _return End Function End Class cara usei o bloco de comandos mais mesmo após terminar o Bloco (using) o arquivos continua em uso e ja verifiquei a Conexão esta fechada (status =0) Public Function Valida() As String If Grid_cli.RowCount <= 0 Then Exit Sub Dim CMD As FbCommand Dim DR As FbDataReader Dim IDFecha As String Dim Sfile As String Dim IP, DB, cString As String IP = '127.0.0.1' DB = sPath & '\fecha\dic.fdb' cString = 'User=SYSDBA;Password=masterkey;Database=' & DB & ';DataSource=' & IP & ';ConnectionTimeout=30;Port=3050;Dialect=3' SQL = '' SQL = 'select * from informacoes where((status)='Aberto')' CMD = New FbCommand(SQL, ConexaoROOT) DR = CMD.ExecuteReader Do While DR.Read Using CONECTAFB As New FbConnection(cString) LErro = '' LST_info.Items.Clear() BT_Finaliza.Visible = False Try Directory.Delete('C:\Fecha', True)' o erro sempre acontece aqui não e possÃvel apagar o BD, Catch ex As Exception Err.Clear() End Try BT_Executa.Enabled = False IDFecha = Trim(DR('id').ToString) Sfile = PegaArquivoRAR(Trim(DR('pasta').ToString)) If Sfile = 'OFF' Then LErro = 'Arquivo de Backup Não Localizado' GoTo proximo End If LST_info.Items.Add('Iniciando Fechamento') LST_info.Items.Add(Trim(DR('nome').ToString)) If Sfile <> '' Then DescompactaArquivo(Sfile) If File.Exists(sPath & '\fecha\dic.fdb') Then LST_info.Items.Add('Base de dados Localizada') LST_info.Items.Add('Analizando Base de dados') Else LST_info.Items.Add('Base de dados não Localizada verifique o Arquivo') End If Compacta(My.Computer.FileSystem.SpecialDirectories.Desktop & '\' & sEmp) If Directory.Exists(My.Computer.FileSystem.SpecialDirectories.Desktop & '\' & sEmp) Then System.IO.Directory.Delete(My.Computer.FileSystem.SpecialDirectories.Desktop & '\' & sEmp, True) End If System.Threading.Thread.Sleep(300) LST_info.SelectedIndex = LST_info.Items.Count - 1 Me.Refresh() LST_info.Items.Add('Enviando email') Pnome = '' Dim CLS_EnviaMail As New Envia_Email Envia_Email.EnviaEmail('', Trim(DR('email').ToString), 'Fechamento ->' & Trim(DR('nome').ToString), My.Computer.FileSystem.SpecialDirectories.Desktop & '\' & sEmp & '.rar') LErro &= Pnome System.Threading.Thread.Sleep(300) LST_info.SelectedIndex = LST_info.Items.Count - 1 Me.Refresh() proximo: Try If File.Exists(My.Computer.FileSystem.SpecialDirectories.Desktop & '\' & sEmp & '.rar') = True Then Kill(My.Computer.FileSystem.SpecialDirectories.Desktop & '\' & sEmp & '.rar') End If Catch ex As Exception Err.Clear() End Try Conecta(False) AtualizaListaAUTOMATIZADA(Trim(DR('id').ToString)) CarregaRoot() System.Threading.Thread.Sleep(300) Me.Refresh() End If CONECATFB.close End Using Loop Return Log End Function eu pensei em dar um stop no FirebirdServer, nos serviços do Windows e depois Reiniciar mais isso iria derrubar todas as outras conexões dos outros aplicativos então não tem como. e ja testei, para ver se não e outros recursos usando o Arquivo, mais não e, o que prende o arquivo e justamente a Conexao com BD, mesmo com a conexão finalizada Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#496230 - 11/02/2021 12:20:23 | ||||
![]() KERPLUNK RIO GRANDE DO SUL Cadast. em:Junho/2009 ![]() |
Se há outras conexões ao banco, não tem outra maneira se não derrubar todos.
Além disso, no seu código aà em cima, você tem DUAS conexões ao banco, acho que você ainda não entendeu o que é o bloco using e nem a OOP. Que tal assistir os vÃdeos da série sobre isso no meu canal? _______________________________________________________________________ Virei Oráculo! The end is nigh, be ready for the nukes! |
|||
#496231 - 11/02/2021 12:37:16 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Citação: : Se há outras conexões ao banco, não tem outra maneira se não derrubar todos. Além disso, no seu código aà em cima, você tem DUAS conexões ao banco, acho que você ainda não entendeu o que é o bloco using e nem a OOP. Que tal assistir os vÃdeos da série sobre isso no meu canal? Sim são 2 Conexoes mesmo 1. conexão e com nosso banco de dados onde tem as informações(Nosso servidor) 2. e com um arquivo que recebemos via FTP do Terminal do Cliente, e nessa que da o B.O como viu existe um LOOP (basicamente esse APP e so esse loop) esse app e disparado pelas GPO do DomÃnio do nosso servidor o app le informações do BD enviado por FTP, e sincroniza algumas informações com Nosso Banco de dados, em alguns casos e envia por email um aviso de erros em procedimentos ao cliente com os dados do DB em anexo tudo Funciona, so que o LOOP trava quando tento apagar o DB da conexão 2, para poder descompactar o Arquivo de próximo Cliente Não fui o Criador desse APP Originalmente o APP, vai descompactando os arquivos recebidos em Diretórios Diferentes tipo c:\fecha\PAST1, no próximo vai para PAST2 e assim por diante o que acontece que tem hora que tem uma infinidade de pastas no Nosso servidor e começa atrapalhar ai vou la e apago o Diretório, passo um Defrag no disco e tal so queria melhorar o APP para não ficar esse monte de pastas no diretório, já que elas não são mais uteis com isso Diminuir a necessidade de manutenção neste servidor. Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#496232 - 11/02/2021 14:35:02 | ||||
![]() KERPLUNK RIO GRANDE DO SUL Cadast. em:Junho/2009 ![]() |
Pois então, você precisa de um manejo correto de abertura e fechamento, tanto de arquivos quanto de conexões com o banco e o melhor jeito de fazer isso é usando OOP.
_______________________________________________________________________ Virei Oráculo! The end is nigh, be ready for the nukes! |
|||
Tópico anterior Próximo tópico Novo tópico