none
Guardar datos de un programa Visual Basic RRS feed

  • Pregunta

  • Buenos días, Estoy haciendo un programa con diversos formularios que contienen Textbox, combobox, conexión a base de datos.. Me gustaria poder por ejemplo, si estoy en el 2 formulario de 4 (por ejemplo) poder darle al boton de guardar y que me lo guardase todo. Si puede ser en una extensión propia. Y que luego cuando decida continuar que al abrirlo, me rellenase todos los textbox y combobox que hubiera completado y dejase en blanco los que no.

    Utilizo Visual Basic 2015.

    Gracias de antemano. Un saludo.

    • Editado Damuoza martes, 17 de enero de 2017 12:53
    martes, 17 de enero de 2017 8:56

Respuestas

  • te falto comprender un poco mejor el savefiledialog


    Private SUb AbrirArchivo_Click(sender As Object, e As EventArgs) Handles AbrirArchivo.Click Dim Open As New OpenFileDialog Open.Filter = "Text Files (*.Mit)|*.*" Open.InitialDirectory = "C:Desktop" Open.FilterIndex = 2 If Open.ShowDialog() = DialogResult.OK Then Dim objReader As New StreamReader(Open.FileName, System.Text.Encoding.Default, True) Try TextBox1.Text = objReader.ReadLine() 'escribo la primera linea en el textbox1 TextBox2.Text = objReader.ReadLine() 'escribo la segunda linea en el textbox2 TextBox3.Text = objReader.ReadLine() 'escribo la segunda linea en el textbox2 Cálculo.TextBox3.Text = objReader.ReadLine() 'escribo la tercera linea en el textbox3 Catch ex As Exception End Try objReader.Close() End If End Sub Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click Dim str(0) As String 'declaro un arreglo 'Dim fichero As String = DialogResult Dim Save As New SaveFileDialog Save.Filter = "Text Files (*.Mit)|*.*"'tu pusiste el Text Files? por que ahi puedes

    'poner lo que quieras como "Archivos de mi programa (*.Mit)|*.Mit"

    'le quite el *.* para que solo se filtren las carpetas y los archivos

    'que corresponden a tu extension, al igual que en openfiledialog Save.InitialDirectory = "C:Desktop" Save.DefaultExt = "Mit" Save.AddExtension = True ' Save.FilterIndex = 2 'DialogResult = Save.ShowDialog If Save.ShowDialog() = DialogResult.OK Then If System.IO.File.Exists(Save.FileName) = False Then 'si el archivo no existe lo creo Try Dim fs As FileStream = File.Create(Save.FileName) fs.Close() guardarfichero(Save.FileName) 'aqui guardo los datos en el archivo Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Else 'si ya existe el archivo solo guardo los datos guardarfichero(Save.FileName) End If End If End Sub Sub guardarfichero(ByVal fichero As String) Dim objStreamWriter As System.IO.StreamWriter Dim str(0) As String 'declaro un arreglo str(UBound(str)) = TextBox1.Text 'guardo el texto del primer textbox en la ultima posicion disponible del arreglo(en este caso la primera) ReDim Preserve str(UBound(str) + 1) 'le añado un espacio mas al arreglo str(UBound(str)) = TextBox2.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = TextBox3.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = Cálculo.TextBox3.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = ComboBox2.Text 'escribo los datos en el archivo objStreamWriter = New System.IO.StreamWriter(fichero, False, System.Text.Encoding.Default) For i As Integer = 0 To str.Length - 1 objStreamWriter.WriteLine(str(i)) Next objStreamWriter.Close() System.IO.File.SetLastWriteTime(fichero, Date.Now) End Sub End Class






    miércoles, 18 de enero de 2017 15:51

Todas las respuestas

  • creo que te hubieras explicado mejor diciendo que necesitas un autoguardado

    yo lo hice con un Timer asi tu le das el intervalo de cada cuanto se debe ejecutar el autoguardado, tambien podrias hacerlo en el evento form closing para que se guarde antes de que el formulario se cierre pero si el formulario o la aplicación se cierra por algun error o la computadora se apaga, el evento no se ejecutará.

        Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
            autosave()
        End Sub
    
        Sub autosave()
            
                    Dim fichero As String = "c:\autoguardado.MiExtención"
                    If System.IO.File.Exists(fichero) = False Then
                    'si el archivo no existe lo creo
    
                        Try
                           Dim fs As FileStream = File.Create(fichero)
                            fs.Close()
                            guardarfichero(fichero)'aqui guardo los datos en el archivo
                        Catch ex As Exception
                            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        End Try
                    Else
                        'si ya existe el archivo solo guardo los datos
                        guardarfichero(fichero)
                    End If
    
        End Sub
    
        Sub guardarfichero(ByVal fichero As String)
            Dim objStreamWriter As System.IO.StreamWriter
            Dim str(0) As String 'declaro un arreglo
            str(UBound(str)) = TextBox1.Text 'guardo el texto del primer textbox en la ultima posicion disponible del arreglo(en este caso la primera)
            ReDim Preserve str(UBound(str) + 1)'le añado un espacio mas al arreglo
            str(UBound(str)) = TextBox2.Text
            ReDim Preserve str(UBound(str) + 1)
            str(UBound(str)) = TextBox3.Text
            
    
            For f As Integer = 0 To DataGridView1.Rows.Count - 2
    'aqui hago lo mismo pero recorriendo un datagridview y separando las columnas mediante un punto medio "·"
    'asi se guarda toda la fila en una misma posicion del arreglo
                ReDim Preserve str(UBound(str) + 1)
                str(UBound(str)) = DataGridView1.Item(0, f).Value & "·" & DataGridView1.Item(1, f).Value & "·" & DataGridView1.Item(2, f).Value & "·" & DataGridView1.Item(3, f).Value & "·" & DataGridView1.Item(4, f).Value & "·" & DataGridView1.Item(5, f).Value & "·" & DataGridView1.Item(6, f).Value & "·" & DataGridView1.Item(7, f).Value
            Next
            
    'escribo los datos en el archivo
            objStreamWriter = New System.IO.StreamWriter(fichero, False, System.Text.Encoding.Default)
            For i As Integer = 0 To str.Length - 1
                objStreamWriter.WriteLine(str(i))
            Next
    
            objStreamWriter.Close()
            System.IO.File.SetLastWriteTime(fichero, Date.Now)
        End Sub

    y este codigo es para traer los datos devuelta

        Sub cargararchivo()
            Dim objReader As New StreamReader("C:\autoguardado.MiExtención", System.Text.Encoding.Default, True)
            Dim sLine As String = ""
            Try
                TextBox1.Text = objReader.ReadLine()'escribo la primera linea en el textbox1
                TextBox2.Text = objReader.ReadLine()'escribo la segunda linea en el textbox2
                TextBox3.Text = objReader.ReadLine()'escribo la tercera linea en el textbox3
    
                Form1.DataGridView1.Rows.Clear()
                Dim celdas(7) As String'declaro un arreglo de 7 por que mi datagridview tiene 8 columnas
                sLine = objReader.ReadLine()
                Do while sLine.contains("·") = false or sLine Is Nothing
                    
                    celdas = sLine.Split("·") 'divido la cadena por el punto medio y guardo en el arreglo
                    
    'escribo los datos en el datagridview
    Form1.DataGridView1.Rows.Add(celdas(0), celdas(1), celdas(2), celdas(3), celdas(4), celdas(5), celdas(6), celdas(7))
                    sLine = objReader.ReadLine()
                Loop
            Catch ex As Exception
            End Try
            objReader.Close()
            Me.Close()
        End Sub

    martes, 17 de enero de 2017 16:01
  • Buenas, 

    Primero, Muchas gracias por tu aporte!. 

    Segundo, mi intención no es que se auto guarde (que ahora que lo comenta no estaría mal), disculpa si no me he explicado bien. Mi intención es tener el típico botón de guardar, es decir que en cada formulario que vaya apareciendo, tenga ese botón y que en cualquier momento me permita hacer click y que yo guarde donde yo quiera el archivo con todo lo completado hasta entonces. 

    Entiendo que buena parte del código comentado es bastante útil mi problema es que no se exactamente si ponerlo en un modulo o en cada formulario o donde. Entiendo que con el código facilitado podría guardar y abrir el archivo con mi propia extensión. Usando imagino, OpenFileDialog o alguno similar. 

    Muchas gracias!! 

    Un saludo.

    miércoles, 18 de enero de 2017 8:53
  • Buenas, 

    He conseguido utilizar el OpenFileDialog para que me pregunte cual quiero abrir, el problema es que aunque ponga mi extensión propia, el archivo se ha guardado con esta extensión propia pero si quiero también lo puedo abrir con el bloc de notas... Como podría encriptarlo para que solo pueda abrirse con mi programa?

    Sabrias como utilizar en el mismo codigo que me has propuesto el SaveFileDialog, ya que se mete en varias funciones y no soy capaz de hacer que funcione, adjunto el codigo que utilizo: 

    Private SUb AbrirArchivo_Click(sender As Object, e As EventArgs) Handles AbrirArchivo.Click Dim Open As New OpenFileDialog Open.Filter = "Text Files (*.Mit)|*.*" Open.InitialDirectory = "C:Desktop" Open.FilterIndex = 2 If Open.ShowDialog() = DialogResult.OK Then Dim objReader As New StreamReader(Open.FileName, System.Text.Encoding.Default, True) Try TextBox1.Text = objReader.ReadLine() 'escribo la primera linea en el textbox1 TextBox2.Text = objReader.ReadLine() 'escribo la segunda linea en el textbox2 TextBox3.Text = objReader.ReadLine() 'escribo la segunda linea en el textbox2 Cálculo.TextBox3.Text = objReader.ReadLine() 'escribo la tercera linea en el textbox3 Catch ex As Exception End Try objReader.Close() End If End Sub Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click Dim str(0) As String 'declaro un arreglo Dim fichero As String = DialogResult

    Dim Save As New SaveFileDialog Save.Filter = "Text Files (*.Mit)|*.*" Save.InitialDirectory = "C:Desktop" ' Save.FilterIndex = 2 DialogResult = Save.ShowDialog If Save.ShowDialog() = DialogResult.OK Then If System.IO.File.Exists(fichero) = False Then 'si el archivo no existe lo creo Try Dim fs As FileStream = File.Create(fichero) fs.Close() guardarfichero(fichero) 'aqui guardo los datos en el archivo Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Else 'si ya existe el archivo solo guardo los datos guardarfichero(fichero) End If End If End Sub Sub guardarfichero(ByVal fichero As String) Dim objStreamWriter As System.IO.StreamWriter Dim str(0) As String 'declaro un arreglo str(UBound(str)) = TextBox1.Text 'guardo el texto del primer textbox en la ultima posicion disponible del arreglo(en este caso la primera) ReDim Preserve str(UBound(str) + 1) 'le añado un espacio mas al arreglo str(UBound(str)) = TextBox2.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = TextBox3.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = Cálculo.TextBox3.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = ComboBox2.Text 'escribo los datos en el archivo objStreamWriter = New System.IO.StreamWriter(fichero, False, System.Text.Encoding.Default) For i As Integer = 0 To str.Length - 1 objStreamWriter.WriteLine(str(i)) Next objStreamWriter.Close() System.IO.File.SetLastWriteTime(fichero, Date.Now) End Sub End Class


    miércoles, 18 de enero de 2017 12:36
  • te falto comprender un poco mejor el savefiledialog


    Private SUb AbrirArchivo_Click(sender As Object, e As EventArgs) Handles AbrirArchivo.Click Dim Open As New OpenFileDialog Open.Filter = "Text Files (*.Mit)|*.*" Open.InitialDirectory = "C:Desktop" Open.FilterIndex = 2 If Open.ShowDialog() = DialogResult.OK Then Dim objReader As New StreamReader(Open.FileName, System.Text.Encoding.Default, True) Try TextBox1.Text = objReader.ReadLine() 'escribo la primera linea en el textbox1 TextBox2.Text = objReader.ReadLine() 'escribo la segunda linea en el textbox2 TextBox3.Text = objReader.ReadLine() 'escribo la segunda linea en el textbox2 Cálculo.TextBox3.Text = objReader.ReadLine() 'escribo la tercera linea en el textbox3 Catch ex As Exception End Try objReader.Close() End If End Sub Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click Dim str(0) As String 'declaro un arreglo 'Dim fichero As String = DialogResult Dim Save As New SaveFileDialog Save.Filter = "Text Files (*.Mit)|*.*"'tu pusiste el Text Files? por que ahi puedes

    'poner lo que quieras como "Archivos de mi programa (*.Mit)|*.Mit"

    'le quite el *.* para que solo se filtren las carpetas y los archivos

    'que corresponden a tu extension, al igual que en openfiledialog Save.InitialDirectory = "C:Desktop" Save.DefaultExt = "Mit" Save.AddExtension = True ' Save.FilterIndex = 2 'DialogResult = Save.ShowDialog If Save.ShowDialog() = DialogResult.OK Then If System.IO.File.Exists(Save.FileName) = False Then 'si el archivo no existe lo creo Try Dim fs As FileStream = File.Create(Save.FileName) fs.Close() guardarfichero(Save.FileName) 'aqui guardo los datos en el archivo Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Else 'si ya existe el archivo solo guardo los datos guardarfichero(Save.FileName) End If End If End Sub Sub guardarfichero(ByVal fichero As String) Dim objStreamWriter As System.IO.StreamWriter Dim str(0) As String 'declaro un arreglo str(UBound(str)) = TextBox1.Text 'guardo el texto del primer textbox en la ultima posicion disponible del arreglo(en este caso la primera) ReDim Preserve str(UBound(str) + 1) 'le añado un espacio mas al arreglo str(UBound(str)) = TextBox2.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = TextBox3.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = Cálculo.TextBox3.Text ReDim Preserve str(UBound(str) + 1) str(UBound(str)) = ComboBox2.Text 'escribo los datos en el archivo objStreamWriter = New System.IO.StreamWriter(fichero, False, System.Text.Encoding.Default) For i As Integer = 0 To str.Length - 1 objStreamWriter.WriteLine(str(i)) Next objStreamWriter.Close() System.IO.File.SetLastWriteTime(fichero, Date.Now) End Sub End Class






    miércoles, 18 de enero de 2017 15:51
  • Perfecto! Ahora si que se guarda como yo queria :D 

    ¿Podría hacer que se guardase con un icono especifico? Como ocurre con los archivos que guardamos de Word o así.

    ¿Podría ponerle alguna encritación o bloqueo que solo deje abrirlo con este programa? Porque si le cambio la extensión a .txt me permite abrirlo con el bloc de notas. 

    Muchass gracias de verdad!! 

    Saludos.

    miércoles, 18 de enero de 2017 16:31