Fórum Arquivo TXT no VB2005 .NET + Coletor de Dados #6909

18/06/2009

0

Boa noite,

Estou com o seguinte problema em VB2005.NET e um Coletor para código de barras:

****************************************************************************
****************************************************************************
****************************************************************************

Funcionamento:

O programa lê códigos e grava em arquivo TEXTO
 ( DEFINIÇÃO GLOBAL      Dim TxT As New System.IO.StreamWriter......).
Quando atinge a quantidade de 5 eu fecho o arquivo "Leituras.txt" , e transfiro os dados para o Banco de dados.
 Essa operação se repetir inúmeras vezes. O problema ocorre quando vou ler a próxima variável, pois em
Sub InsereDados estou fechando TxT.Close()


Como faço para refazer a conexão com o arquivo "Leituras.txt" ?????

****************************************************************************
****************************************************************************
****************************************************************************

EXECUTANDO O PROGRAMA:

 Tenho um form "FrmLeitura" onde tenho 3 SUB E A CLASSE Public Class ClsBD com a função
Function InsereLeituras()

1-  TxT As New System.IO.StreamWriter( - Como GLOBAL)
2-  Em InsereDados  LEIO OS 5 CÓDIGOS
3-  Executo TXT.Close
4-  InsereLeituras() da Classe ClsBD - Gravo no banco e APAGO "Leituras.txt"
5-  Volto para  InsereDados, crio novamente o arquivo "Leituras.txt"
6-  No próxima leitura trava em TxT.WriteLine(GravarTexto) 

7 - Eu precisava que o TXT voltasse a funcionar



Obrigado


Ernany




****************************************************************************
****************************************************************************
****************************************************************************
CÓDIGO


Public Class FrmLeitura
 

    Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)
    Dim BDDescrCod As New ClsBD
    WithEvents BDTxt As New ClsBD
    Dim GravarTexto As String = ""
 

    '     Quando carrega o form - Novo
1-    Private Sub FrmLeitura_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

         TxT.AutoFlush = True
         BDDescrCod.AbreBD()
         Me.Tela()

    End Sub


2-    Private Sub FrmLeitura_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TxT.Flush()
        TxT.Close()
        GravaLeituras()
    End Sub



   'Insere os dados no Banco de dados
3-    Private Sub InsereDados(ByVal Codigo As String, ByVal Quantidade As Double, ByVal TipoDescricaoQtde As Integer)

         If GravarTexto <> "" Then
                TxT.WriteLine(GravarTexto)   <<======================
            End If

            GravarTexto = LojaCod
            ContLeituras += 1

            If ContLeituras = 5 Then
                TxT.WriteLine(GravarTexto)
                TxT.Flush()
                TxT.Close()
                InsereLeituras()

                If IO.File.Exists(EnderecoBDDados & "Leituras.txt") = False Then
                    Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)
                End If
                TxT.AutoFlush = True   ????????????????????

            End If

    End Sub
 

End Class

'***********************************************************************
'***********************************************************************
'***********************************************************************
'***********************************************************************


'Nesta classe estão todas as funções de Banco de Dados
Public Class ClsBD
 

    'Esta é a variável do endereço do BD
    Const bd As String = EnderecoBDDados & NomeArquivoBDDados
    Dim conn As New SQLite.SQLiteConnection(ConnStringDados) '"Data Source = " & bd)
    Dim comm As New SQLite.SQLiteCommand
    Public Event LinhaGravada(ByVal TamanhoString As Long)
    Public TamanhoArquivo As Long


    Public Function InsereLeituras() As Boolean

        Dim Retorno As Boolean = True
        Dim Txt As New IO.StreamReader(EnderecoBDDados & "Leituras.txt")
        Dim Trans As SQLite.SQLiteTransaction
        Dim Linha As String = "a"
        Dim Valor As String()
        Dim CommInsere As New SQLite.SQLiteCommand()

        AbreBD()
        CommInsere = conn.CreateCommand
        Trans = conn.BeginTransaction
        CommInsere.Transaction = Trans

        While Linha <> Nothing And Retorno = True
            Linha = Txt.ReadLine
            If Linha <> Nothing Then
                Valor = Linha.Split(";")
                If Valor.Length = 8 Then
                    Try
                        CommInsere.CommandText = "insert into pcdesc (loja) values ('" & Valor(0) & "' )"

                        CommInsere.ExecuteNonQuery()
                    Catch ex As SQLite.SQLiteException
                        MsgBox(ex.Message)
                        Retorno = False
                    End Try
                Else
                    Retorno = False
                End If

                RaiseEvent LinhaGravada(Linha.Length)
            End If
        End While

        If Retorno = True Then
            Try
                Trans.Commit()
            Catch ex As Exception
                Trans.Rollback()
                Retorno = False
            End Try

        End If

        FechaBD()

        Try
            Txt.DiscardBufferedData()
            Txt.Close()
        Catch ex As Exception
            Retorno = False
        End Try

        If Retorno = True Then
            Try
                IO.File.Delete(EnderecoBDDados & "Leituras.txt")
            Catch ex As Exception
                Retorno = False
            End Try
        End If

        CommInsere = Nothing
        Txt = Nothing
        Trans = Nothing

        Return Retorno
    End Function
End Class
 
Ernany

Ernany

Responder

Posts

18/06/2009

Ernany

Mensagem de ERRO:

Ocorre em :


            If GravarTexto <> "" Then
                TxT.WriteLine(GravarTexto)               <<<<=================================



System.ObjectDisposedException was unhandled
  Message="ObjectDisposedException"
  ObjectName=""
  StackTrace:
    at System.IO.__Error.WriterClosed()
    at System.IO.StreamWriter.Flush()
    at System.IO.StreamWriter.Write()
    at System.IO.TextWriter.WriteLine()
    at PocketClient.FrmLeitura.InsereDados()
    at PocketClient.FrmLeitura.txtquantidade_KeyDown()
    at System.Windows.Forms.Control.OnKeyDown()
    at System.Windows.Forms.Control.WnProc()
    at System.Windows.Forms.Control._InternalWnProc()
    at Microsoft.AGL.Forms.EVL.EnterMainLoop()
    at System.Windows.Forms.Application.Run()
    at PocketClient.FrmMain.Main()

Responder

Gostei + 0

19/06/2009

Ernany


A criação de "Dim TxT As New System.IO....."  não funciona, pois "TXT" não está como global.
https://www.devmedia.com.br/imagens/discovirtual/185374/ErroArquivoTXT.zip

  If ContLeituras = 5 Then
                TxT.WriteLine(GravarTexto)
                TxT.Flush()
                TxT.Close()
                InsereLeituras()

                If IO.File.Exists(EnderecoBDDados & "Leituras.txt") = False Then
                    Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)
                End If
                TxT.AutoFlush = True   ????????????????????

*******************************************************************************
*********************************************************************************************************************************************************************************************************************************************OUTRA TENTATIVA:

Eu tentei colocar o seguinte código:

  If ContLeituras = 5 Then
                me.close()
  endIf
             
Mas ocorre o ERRO no  Sub InterfaceComQtde() , quando está limpando a tela paraler um próximo número. Segue o código e a imagem do ERRO.        

Esse código ficou melhor pois mantenho "TXT" como global.
 
 https://www.devmedia.com.br/imagens/discovirtual/185374/ErroArquivoTXT2.zip

Obrigado

Ernany


****************************************************************************
****************************************************************************
****************************************************************************
CÓDIGO


Public Class FrmLeitura
 

    Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)
    Dim BDDescrCod As New ClsBD
    WithEvents BDTxt As New ClsBD
    Dim GravarTexto As String = ""
 

    '     Quando carrega o form - Novo
1-    Private Sub FrmLeitura_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

         TxT.AutoFlush = True
         BDDescrCod.AbreBD()
         Me.Tela()

    End Sub


2-    Private Sub FrmLeitura_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TxT.Flush()
        TxT.Close()
        GravaLeituras()                                        <<=========== Gravação
    End Sub



   'Insere os dados no Banco de dados
3-    Private Sub InsereDados(ByVal Codigo As String, ByVal Quantidade As Double, ByVal TipoDescricaoQtde As Integer)

         If GravarTexto <> "" Then
                TxT.WriteLine(GravarTexto)  
            End If

            GravarTexto = LojaCod
            ContLeituras += 1

            If ContLeituras = 5 Then
                Me.close                    <<<< ================= fecha
            End If

    End Sub
 
4-    'Faz a limpeza da tela nos casos com qtde
    Private Sub InterfaceComQtde()
              Me.txtquantidade.Text = ""                      <<<< =================  ERRO
              Me.TxtCodValue.Text = ""
              Me.TxtCodValue.Focus()
              Me.TxtCodValue.SelectAll()
    End Sub

End Class

'***********************************************************************
'***********************************************************************
'***********************************************************************
'***********************************************************************


'Nesta classe estão todas as funções de Banco de Dados
Public Class ClsBD
 

    'Esta é a variável do endereço do BD
    Const bd As String = EnderecoBDDados & NomeArquivoBDDados
    Dim conn As New SQLite.SQLiteConnection(ConnStringDados) '"Data Source = " & bd)
    Dim comm As New SQLite.SQLiteCommand
    Public Event LinhaGravada(ByVal TamanhoString As Long)
    Public TamanhoArquivo As Long


    Public Function InsereLeituras() As Boolean

        Dim Retorno As Boolean = True
        Dim Txt As New IO.StreamReader(EnderecoBDDados & "Leituras.txt")
        Dim Trans As SQLite.SQLiteTransaction
        Dim Linha As String = "a"
        Dim Valor As String()
        Dim CommInsere As New SQLite.SQLiteCommand()

        AbreBD()
        CommInsere = conn.CreateCommand
        Trans = conn.BeginTransaction
        CommInsere.Transaction = Trans

        While Linha <> Nothing And Retorno = True
            Linha = Txt.ReadLine
            If Linha <> Nothing Then
                Valor = Linha.Split(";")
                If Valor.Length = 8 Then
                    Try
                        CommInsere.CommandText = "insert into pcdesc (loja) values ('" & Valor(0) & "' )"

                        CommInsere.ExecuteNonQuery()
                    Catch ex As SQLite.SQLiteException
                        MsgBox(ex.Message)
                        Retorno = False
                    End Try
                Else
                    Retorno = False
                End If

                RaiseEvent LinhaGravada(Linha.Length)
            End If
        End While

        If Retorno = True Then
            Try
                Trans.Commit()
            Catch ex As Exception
                Trans.Rollback()
                Retorno = False
            End Try

        End If

        FechaBD()

        Try
            Txt.DiscardBufferedData()
            Txt.Close()
        Catch ex As Exception
            Retorno = False
        End Try

        If Retorno = True Then
            Try
                IO.File.Delete(EnderecoBDDados & "Leituras.txt")
            Catch ex As Exception
                Retorno = False
            End Try
        End If

        CommInsere = Nothing
        Txt = Nothing
        Trans = Nothing

        Return Retorno
    End Function
End Class
 
Responder

Gostei + 0

19/06/2009

Fabio Mans

Ernani você não pode passar por partes o seu chamado, você colocou várias coisas e ficou complicado te ajudar.
Passo somente o problema

Obrigado
Responder

Gostei + 0

19/06/2009

Ernany

Boa Noite,

Vamos tentar novamente:

O ocorre o ERRO no  Sub InterfaceComQtde() , quando está limpando a tela paraler um próximo número.

 https://www.devmedia.com.br/imagens/discovirtual/185374/ErroArquivoTXT2.zipSequencia do programa:
1- Sub InsereDados2- ContLeituras = 5     ===>  me.close3- Sub FrmLeitura_Closing   == > GravaLeituras()4- Function InsereLeituras() ==> insere os dados no Banco5- Volta para FrmLeitura_Closing6- Continua para novas Leituras ..... e trava em : Sub InterfaceComQtde()
  Obrigado

Ernany


****************************************************************************
****************************************************************************
****************************************************************************
C�DIGO


Public Class FrmLeitura
 

    Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)
    Dim BDDescrCod As New ClsBD
    WithEvents BDTxt As New ClsBD
    Dim GravarTexto As String = ""
 

    '     Quando carrega o form - Novo
1-    Private Sub FrmLeitura_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

         TxT.AutoFlush = True
         BDDescrCod.AbreBD()
         Me.Tela()

    End Sub


2-    Private Sub FrmLeitura_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TxT.Flush()
        TxT.Close()
        GravaLeituras()                                        <<=========== Gravação

        BDDescrCod.FechaBD()
        BDDescrCod.Dispose()
        BDDescrCod = Nothing
        BDTxt = Nothing
        GC.Collect()
    End Sub



   'Insere os dados no Banco de dados
3-    Private Sub InsereDados(ByVal Codigo As String, ByVal Quantidade As Double, ByVal TipoDescricaoQtde As Integer)

         If GravarTexto <> "" Then
                TxT.WriteLine(GravarTexto)  
            End If

            GravarTexto = LojaCod
            ContLeituras += 1

            If ContLeituras = 5 Then
                Me.close                    <<<< ================= fecha
            End If

    End Sub
 
4-    'Faz a limpeza da tela nos casos com qtde
    Private Sub InterfaceComQtde()
              Me.txtquantidade.Text = ""                      <<<< =================  ERRO
              Me.TxtCodValue.Text = ""
              Me.TxtCodValue.Focus()
              Me.TxtCodValue.SelectAll()
    End Sub

End Class

'***********************************************************************
'***********************************************************************
'***********************************************************************
'***********************************************************************


'Nesta classe estão todas as funções de Banco de Dados
Public Class ClsBD
 

    'Esta é a variável do endereço do BD
    Const bd As String = EnderecoBDDados & NomeArquivoBDDados
    Dim conn As New SQLite.SQLiteConnection(ConnStringDados) '"Data Source = " & bd)
    Dim comm As New SQLite.SQLiteCommand
    Public Event LinhaGravada(ByVal TamanhoString As Long)
    Public TamanhoArquivo As Long


    Public Function InsereLeituras() As Boolean

        Dim Retorno As Boolean = True
        Dim Txt As New IO.StreamReader(EnderecoBDDados & "Leituras.txt")
        Dim Trans As SQLite.SQLiteTransaction
        Dim Linha As String = "a"
        Dim Valor As String()
        Dim CommInsere As New SQLite.SQLiteCommand()

        AbreBD()
        CommInsere = conn.CreateCommand
        Trans = conn.BeginTransaction
        CommInsere.Transaction = Trans

        While Linha <> Nothing And Retorno = True
            Linha = Txt.ReadLine
            If Linha <> Nothing Then
                Valor = Linha.Split(";")
                If Valor.Length = 8 Then
                    Try
                        CommInsere.CommandText = "insert into pcdesc (loja) values ('" & Valor(0) & "' )"

                        CommInsere.ExecuteNonQuery()
                    Catch ex As SQLite.SQLiteException
                        MsgBox(ex.Message)
                        Retorno = False
                    End Try
                Else
                    Retorno = False
                End If

                RaiseEvent LinhaGravada(Linha.Length)
            End If
        End While

        If Retorno = True Then
            Try
                Trans.Commit()
            Catch ex As Exception
                Trans.Rollback()
                Retorno = False
            End Try

        End If

        FechaBD()

        Try
            Txt.DiscardBufferedData()
            Txt.Close()
        Catch ex As Exception
            Retorno = False
        End Try

        If Retorno = True Then
            Try
                IO.File.Delete(EnderecoBDDados & "Leituras.txt")
            Catch ex As Exception
                Retorno = False
            End Try
        End If

        CommInsere = Nothing
        Txt = Nothing
        Trans = Nothing

        Return Retorno
    End Function
End Class
Responder

Gostei + 0

22/06/2009

Luiz Maia

Ola Ernany, como vai?   Ocorreu uma troca de consultores e agora eu estou responsavel pelo seu chamado. Pode me dizer qual o problema e o contexto de seu projeto?   Aguardo   Abraços Att Luiz Maia
Responder

Gostei + 0

22/06/2009

Ernany

Bom dia Luiz,

Vamos lá:

Tenho um coletor de Dados com VB2005.NET e SQLite.

Qdo eu faço uma consulta no Banco SQLite está rápida, mas a gravação está lenta. Geralmente na
terceira consulta ele fica "pensando" uns 5 segundos.... para gravar.

Devido a essa demora, após um valor de leituras estipulado, eu grava os dados em um ARQUIVO texto
e depois transfiro para o BANCO SQLite.

Basicamente o programa tem duas Telas:
a)Entrada (Menu de Opções)
b)Leituras ( onde são feitas as inúmeras leituras dos produtos de código de barras.)

Problema: Está sendo as aberturas do ARQUIVO Texto.

a) Qdo estou em na SUB InsereDados executo o seguinte comando : "TxT.Close()"
b) Em  Sub GravaLeituras() estou BDTxt.FechaBD()  
c) E qdo estou em   Public Function InsereLeituras  estou apagando o arquivo texto
IO.File.Delete(EnderecoBDDados & "Leituras.txt")

COMO FAÇO PARA ABRI-LOS NOVAMENTE, pois eles estão definidos como
GLOBAL???


****************************************************************************
****************************************************************************
****************************************************************************

Sequencia do programa:
1- Sub InsereDados2- ContLeituras = 5    (5 leituras para fazer os testes)
3-  GravaLeituras()4- Function InsereLeituras() ==> insere os dados no Banco5-  Sub InsereDados6- Aguarda para a próxima leitura
  Obrigado

Ernany


****************************************************************************
****************************************************************************
****************************************************************************
CODIGO


Public Class FrmLeitura
 

    Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)
    Dim BDDescrCod As New ClsBD
    WithEvents BDTxt As New ClsBD   <<========== Classe onde tenho a função que grava no SQLite
    Dim GravarTexto As String = ""
 

   
1-    '     Gerencia quantas leituras são realizadas antes de inserir no Banco

Private Sub InsereDados(ByVal Codigo As String, ByVal Quantidade As Double, ByVal TipoDescricaoQtde As Integer)

         If GravarTexto <> "" Then
                TxT.WriteLine(GravarTexto)  
            End If

            GravarTexto = LojaCod               <<=========== variável a ser gravada
            ContLeituras += 1

 
            If ContLeituras = 5 Then
                If GravarTexto <> "" Then                                    <<=========== Gravação
                    TxT.WriteLine(GravarTexto)
                    GravarTexto = ""
                    ContLeituras = 0
                End If
                TxT.Flush()
                TxT.Close()                          <<========= fechando
                GravaLeituras()                                        <<=========== Gravação

' Criação do Arquivo Leituras.txt , pois foi apagado em  InsereLeituras()
                 If IO.File.Exists(EnderecoBDDados & "Leituras.txt") = False Then
                         Dim novo As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", True)
                 End If

    End Sub
 


         
2-      'Faz o processo de inclusão das leituras

Private Sub GravaLeituras()

        If IO.File.Exists(EnderecoBDDados & "Leituras.txt") = True Then
            PB.Maximum = ClsTexto.TamanhoArquivo(EnderecoBDDados & "Leituras.txt")
            If PB.Maximum > 60 Then  
                Application.DoEvents()
                Me.Refresh() ' colocado depois
                BDTxt.InsereLeituras()
                BDTxt.FechaBD()                <<========= fechando
                BDTxt = Nothing
            Else
                IO.File.Delete(EnderecoBDDados & "Leituras.txt")    << =======arquivo vazio
            End If

        End If

    End Sub
 
3-    Public Function InsereLeituras() As Boolean da Classe   <<== Está em outro arquivo 
Classe ClsBD



'***********************************************************************
'***********************************************************************
'***********************************************************************
'***********************************************************************


'Nesta classe estão todas as funções de Banco de Dados
Public Class ClsBD
 

    'Esta é a variável do endereço do BD
    Const bd As String = EnderecoBDDados & NomeArquivoBDDados
    Dim conn As New SQLite.SQLiteConnection(ConnStringDados) '"Data Source = " & bd)
    Dim comm As New SQLite.SQLiteCommand
    Public Event LinhaGravada(ByVal TamanhoString As Long)
    Public TamanhoArquivo As Long


    Public Function InsereLeituras() As Boolean

        Dim Retorno As Boolean = True
        Dim Txt As New IO.StreamReader(EnderecoBDDados & "Leituras.txt")
        Dim Trans As SQLite.SQLiteTransaction
        Dim Linha As String = "a"
        Dim Valor As String()
        Dim CommInsere As New SQLite.SQLiteCommand()

        AbreBD()
        CommInsere = conn.CreateCommand
        Trans = conn.BeginTransaction
        CommInsere.Transaction = Trans

        While Linha <> Nothing And Retorno = True
            Linha = Txt.ReadLine
            If Linha <> Nothing Then
                Valor = Linha.Split(";")
                If Valor.Length = 8 Then
                    Try
                        CommInsere.CommandText = "insert into pcdesc (loja) values ('" & Valor(0) & "' )"

                        CommInsere.ExecuteNonQuery()
                    Catch ex As SQLite.SQLiteException
                        MsgBox(ex.Message)
                        Retorno = False
                    End Try
                Else
                    Retorno = False
                End If

                RaiseEvent LinhaGravada(Linha.Length)
            End If
        End While

        If Retorno = True Then
            Try
                Trans.Commit()
            Catch ex As Exception
                Trans.Rollback()
                Retorno = False
            End Try

        End If

        FechaBD()

        Try
            Txt.DiscardBufferedData()
            Txt.Close()
        Catch ex As Exception
            Retorno = False
        End Try

        If Retorno = True Then
            Try
                IO.File.Delete(EnderecoBDDados & "Leituras.txt")
            Catch ex As Exception
                Retorno = False
            End Try
        End If

        CommInsere = Nothing
        Txt = Nothing
        Trans = Nothing

        Return Retorno
    End Function
End Class

Responder

Gostei + 0

22/06/2009

Luiz Maia

Ola Ernany,   Por que vc não tenta LIMPAR o arquivo txt ao invés de Deleta-lo e depois recria-lo?   Aguardo   Abraços Att Luiz Maia
Responder

Gostei + 0

22/06/2009

Ernany

Boa Tarde Luiz,

Como faço para "limpar" um arquivo TXT?

Ernany
Responder

Gostei + 0

22/06/2009

Luiz Maia

Ola Ernany,   Tente tb:   Quando você constrói o objeto StreamWriter, coloque false no segundo parâmetro.

Substituir:

StreamWriter arquivo = new StreamWriter(Server.MapPath("ListaCpf.txt"), true, Encoding.ASCII); 




Por:

StreamWriter arquivo = new StreamWriter(Server.MapPath("ListaCpf.txt"), false, Encoding.ASCII); 




O segundo parâmetro indica se o modo de escrita é appendable, ou seja, ao invés de criar um novo arquivo ele incrementa ao arquivo anterior o conteúdo a ser escrito. Como false o arquivo é sobrescrito pelo novo conteúdo.

Espero ter ajudado. Aguardo   Abraços   Att Luiz Maia
Responder

Gostei + 0

22/06/2009

Ernany

Boa tarde,

Não deu certo.

1- Se você reparar inicialmente o arquivo foi criado como "FALSE"

  Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)

2- Recriando o arquivo como FALSE, dentro de Sub InsereDados, também não deu certo, pois
tive antes que  executar "TxT.Close()"


Dim Txt As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", FALSE)

3- Se eu não executo "TxT.Close()" e BDTxt.FechaBD()  não consigo recriar o Arquivo.


4- Executando  "TxT.Close()""Quando chego em 

     If GravarTexto <> "" Then
                TxT.WriteLine(GravarTexto)    <<<<============ Erro NullReferenceException"
            End If



Então ficamos na mesma.... ou eu falta alguma coisa???

Obrigado,

Ernany



Responder

Gostei + 0

23/06/2009

Luiz Maia

Ernany,   Me explique o problema que esta tendo, e vamos achar uma outra solução. Qual o contexto de sua aplicação?   Não entendi o porque do arquivo TXT. Não tem logica a inserção estar lenta. Aguardo   Abraços   Att Luiz Maia
Responder

Gostei + 0

24/06/2009

Luiz Maia

Oi Ernany, blz?   Estou aguardando seu contato, ok?   Abraços Att Luiz Maia
Responder

Gostei + 0

24/06/2009

Ernany

Bom dia Luiz,

Eu também estou tentando entender a lógica para te falar sobre o porque da lentidão. Eu tenho
problema de memória no Coletor... tem pouca memória para trabalhar. E a cada 3 leituras o coletor para
uns 3 a 5 segundos para a próxima leitura.

Com o arquivo texto eu só paro uma vez para gravar no banco ....em um intervalo  determinado de leituras.
Estou preparando e te passo para entendermos o que acontece.

Obrigado,

Ernany
Responder

Gostei + 0

25/06/2009

Ernany

Boa tarde Luiz,

Fiz vários testes de Leitura e Gravação e o problema está nos acessos à memória. O coletor
possui 3 memórias: a RAM, um pen driver e um cartão SD.

Quando se trabalha na RAM é super rápido.... tanto Leitura quanto gravação, mas o problema é se
ocorrer algum problema de energia da bateria perco todos os dados. Com isso voltamos a necessidade
de uma ARQUIVO TXT, pois o acesso a gravação fora da memória RAM é mais lento.

Continuando a idéia do Arquivo TXT:

Como eu tenho duas TELAS
a) Principal (Menu)
b) Leitura   (onde se lê e grava os códigos de barras)


A idéia é:

1- Ler por exemplo 200 códigos gravando em TXT;
2- Fecho o arquivo TXT
3- Gravo no Banco
4- Fecho o Form Leitura, retornando para o Prrincipal
5- E em seguida retorno para o Form Leitura parando na posição de leitura de novo código.
6- Com isso tenho restituo os meus acessos ao banco, que estão como globais.

    Dim TxT As New System.IO.StreamWriter(EnderecoBDDados & "Leituras.txt", False)
    Dim BDDescrCod As New ClsBD
    WithEvents BDTxt As New ClsBD

Problema:

Não estou conseguindo fechar o form e retornar para a posição leitura. Como faço?

Ou você tem outra idéia melhor???

Obrigado,

Ernany


Responder

Gostei + 0

27/06/2009

Luiz Maia

Ola Ernany,   Preciso enteder direito o que vc realmente esta precisando. Vc quer transferir dados da base de um Pocket para outra base em desktops? É isto?   Estou aguardando... Por que se for isto mesmo. Podemos usar varios outras formas de conexao, uma delas, a mais indicada, é, se os Palms Tiverem acesso a Web, podemos usar um web service, ai teremos como transacionar o processo e assim que o usuario clicar em um botao no Palm de sincronizar, o processo starta e uma transaçao tb, se caso de algum tipo de falha na conexao, vc da um RollBack na transacao, assim vc mantem seus dados totalmente concistentes. É isto que ocorre em transaçoes bancarias...     Att Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar