Visual Basic - Necesito ayuda con errores para ejecutar nuevo,eliminar,modificar y filatrar contacto

Life is soft - evento anual de software empresarial
   
Vista:

Necesito ayuda con errores para ejecutar nuevo,eliminar,modificar y filatrar contacto

Publicado por maria marylandnovember@hotmail.com (1 intervención) el 13/04/2013 12:10:11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
'Importamos Librerias
Imports System.Data.OleDb
 
Public Class Form1
    'VARIABLES A NIVEL DE CLASE FORM1
    'El adaptador nos ayuda a las modificaciones de la tabla contactos
    Dim adaptador As New AgendaDataSet1TableAdapters.ContactoTableAdapter
    'La hemos declarado.
    'AgendaDataSet1 nos ayuda a recorrer los datos de la tabla.
    'El DataSet es como un contenedor de la tabla contacto que nos ayuda a recorrer las filas,datos,....
 
    Dim arrayIds() As Integer
    Dim filaSeleccionada As Integer    'La variable fila seleccionada se va poder leere desde toda la clase
    Dim mensajeError As String = ""
 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: esta línea de código carga datos en la tabla 'AgendaDataSet1.Contacto' Puede moverla o quitarla según sea necesario.
        Me.ContactoTableAdapter.Fill(Me.AgendaDataSet1.Contacto)
        'variable de conexion
        Dim conexion As New OleDbConnection
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\Maria82\Desktop\Agenda correcto\Agenda - prueba conexion 2\Agenda"
        'variable para el sql comand
        Dim comando As New OleDbCommand("SELECT * FROM Contacto")
        comando.Connection = conexion
        'variable adapter
        Dim adaptador As New OleDbDataAdapter
        adaptador.SelectCommand = comando
        'variable que contendra a la tabla
        Dim Tabla As New DataSet
        'Interesa que la primera vez que se carga el formulario , se muestre los datos de la primera fila del Grid
        cargaFilaSeleccionada(0)
        'Deshabilito los dos botones que acabo de crear y los habilito solo en el Guardar
        GuardarToolStripMenuItem1.Visible = False
        CancelarToolStripMenuItem2.Visible = False
    End Sub
    Private Sub cargaColumnasDelGrid()
 
    End Sub
    Private Sub cargaFilasDelGrid()
        ReDim arrayIds(AgendaDataSet1.Contacto.Rows.Count = 1)
        For i As Integer = 0 To AgendaDataSet1.Contacto.Rows.Count - 1
            'Se obtiene cada fila de la tabla contactos para después leer el valor de cada celda por fila
            Dim fila As DataRow = AgendaDataSet1.Contacto.Item(i)
            DataGridView1.Rows.Add() 'Fila en blanco y despues la relleno
            'Al cargar la propiedad item me pedia columna y fila, no solo fila
            'DataGriedView1.Item(0,1)= fila.Item(0) 'ID' Aqui estoy leyendo las columnas de una fila de datos de Contacto
            arrayIds(i) = fila.Item(0) 'Guardo los ID´s y no los muestro
            DataGridView1.Item(0, i).Value = CStr(fila.Item(1)) 'DNI
            DataGridView1.Item(1, i).Value = fila.Item(2) 'LETRA_DNI
            DataGridView1.Item(2, i).Value = fila.Item(3) 'APELLIDOS1
            DataGridView1.Item(3, i).Value = fila.Item(4) 'APELLIDOS2
            DataGridView1.Item(4, i).Value = fila.Item(5) 'NOMBRE
            'Las posiciones del Grid empiezan en 0,como siempre
 
        Next
 
    End Sub
 
 
    Private Sub cargaFilaSeleccionada(ByVal filaSeleccionada As Integer)
        'Ahora cargo los datos del contacto seleccionado en ls campos
        Me.txtDni.Text = DataGridView1.Item(0, filaSeleccionada).Value 'DNI
        Me.txt_LetraDni.Text = DataGridView1.Item(1, filaSeleccionada).Value 'LETRA_DNI
        Me.txtApellido1.Text = DataGridView1.Item(2, filaSeleccionada).Value 'APELLIDO1
        Me.txtApellido2.Text = DataGridView1.Item(3, filaSeleccionada).Value 'APELLIDO2
        Me.txtNombre.Text = DataGridView1.Item(4, filaSeleccionada).Value 'NOMBRE
    End Sub
    Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        'Aqui si que puedo saber la fila seleccionada
        filaSeleccionada = e.RowIndex
        'este código quiero reutilizarlo desde otro eventos,para ello,encapsulo en código en un procedimiento
        cargaFilaSeleccionada(filaSeleccionada)
 
    End Sub
 
    Private Sub pcbSiguiente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbSiguiente.Click
        'Ahora si que tenemos la filaSeleccionada
        If filaSeleccionada = DataGridView1.Rows.Count - 1 Then
            MessageBox.Show("No hay más filas para seleccionar")
        Else
            filaSeleccionada = filaSeleccionada + 1
            cargaFilaSeleccionada(filaSeleccionada)
            'Al utilizar el boton Siguiente debe seleccionar fila correspondiente, para ello, utilizamos siguiente código:
            DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
 
        End If
    End Sub
 
    Private Sub pcbAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbAnterior.Click
        If filaSeleccionada = 0 Then
            MessageBox.Show("No hay más filas para seleccionar")
        Else
            filaSeleccionada = filaSeleccionada - 1
            cargaFilaSeleccionada(filaSeleccionada)
            DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
        End If
    End Sub
 
    Private Sub pcbPrimero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbPrimero.Click
        filaSeleccionada = 0
        cargaFilaSeleccionada(filaSeleccionada)
        DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
    End Sub
 
    Private Sub pcbUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbUltimo.Click
        filaSeleccionada = DataGridView1.Rows.Count - 1
        cargaFilaSeleccionada(filaSeleccionada)
        DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
    End Sub
 
    Private Sub NuevoToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NuevoToolStripMenuItem1.Click
        'CUANDO PINCHE NUEVO , LIMPIAREMOS LOS CAMPOS Y DEJAREMOS QUE ESCRIBA UNO NUEVO
        limpiarCamposPantalla()
        GuardarToolStripMenuItem1.Visible = True
        CancelarToolStripMenuItem2.Visible = True
    End Sub
    Private Sub limpiarCamposPantalla()
        Me.txtDni.Text = ""
        Me.txt_LetraDni.Text = ""
        Me.txtApellido1.Text = ""
        Me.txtApellido2.Text = ""
        Me.txtNombre.Text = ""
        'Se pone el foco en el primer campo
        Me.txtDni.Focus()
        ' Se va a deshabilitar todas las opciones y solo voy a dejar dos opciones: Guardar y Cancelar
 
 
 
 
    End Sub
 
    Private Sub MenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles MenuStrip1.ItemClicked
 
    End Sub
 
    Private Sub GuardarToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GuardarToolStripMenuItem1.Click
        'En este punto se debe guardar el contacto en la BD.
        'Antes de cualquier cambio se debe realizar una validación de todos lso campos escrito por el usuario en pantalla
        If validarCamposPantalla() Then
            'Si devuelve True guardo
            MessageBox.Show("Voy a ir a la BD.Los campos son correctos")
            'Vamos a guardar
            Dim numDni As Integer = CInt(Me.txtDni.Text)
            Dim respuesta As Integer = adaptador.altaContacto(numDni, Me.txt_LetraDni.Text, Me.txtApellido1.Text, Me.txtApellido2.Text, Me.txtNombre.Text)
            If respuesta > 0 Then
                MessageBox.Show("Se ha guardado correctamente. ")
            Else
                MessageBox.Show("Error al guardar el contacto. ")
 
            End If
            'Esta función devuelve un valor positivo si se ha creado bien y negativo si ocurre lo contrario.
            'Ahora se debe recargar el DataGrid con los nuevos datos.
            recargaPantalla()
            'Nos falta corregir algunas cosas
        Else
            'Mostrare el mensaje de error.Para poder verla desde aqui la msotrare a nivel de clase.
            MessageBox.Show(mensajeError)
        End If
    End Sub
    Private Sub limpiaGrid()
        For i As Integer = 0 To DataGridView1.Rows.Count - 2
            'Pongo -2 porque siempre debemos dejar una fila en el Grid sin oda error.
            DataGridView1.Rows.RemoveAt(0) 'Borro siempre la primera , porque el Grid decrece
        Next
    End Sub
    Private Sub recargaPantalla()
        Me.ContactoTableAdapter.Fill(Me.AgendaDataSet1.Contacto)
        'variable de conexion
        Dim conexion As New OleDbConnection
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\Maria82\Desktop\Agenda correcto\Agenda - prueba conexion 2\Agenda"
        'variable para el sql comand
        Dim comando As New OleDbCommand("SELECT * FROM Contacto")
        comando.Connection = conexion
        'variable adapter
        Dim adaptador As New OleDbDataAdapter
        adaptador.SelectCommand = comando
        'variable que contendra a la tabla
        Dim Tabla As New DataSet
        'Antes de recargar, debo eliminar todas las anteriores y cargar las nuevas
        limpiaGrid()
        cargaFilasDelGrid()
        'Deshabilito los dos botones que acabo de crear y los habilito solo en el Guardar
        GuardarToolStripMenuItem1.Visible = False
        CancelarToolStripMenuItem2.Visible = False
    End Sub
    Private Function validarCamposPantalla() As Boolean
        If Me.txtDni.Text = "" Or Not dimeSiEsNumero(Me.txtDni.Text) Then
            mensajeError = "El dni es incorrecto. "
            Me.txtDni.SelectAll()
            Me.txtNombre.Focus()
            Return False
        End If
        Return True
    End Function
    Private Function dimeSiEsNumero(ByVal cadena As String) As Boolean
        'Código para validar DNI
        'Esta función convierte el Dni en un array y comprueba letra a letra o numero a numero
        Dim arrayCadena() As Char = cadena.ToCharArray
        For i As Integer = 0 To arrayCadena.Length - 1
            If IsNumeric(arrayCadena(i)) = False Then
                'Si encontrara una letra devolveria False.Diria No es numero
                Return False
            End If
        Next
        Return True
    End Function
 
    Private Sub CancelarToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CancelarToolStripMenuItem2.Click
        'si pincho Cancelar no hago ninguna acción
        limpiarCamposPantalla()
    End Sub
 
    Private Sub ModificarToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem2.Click
        'vamos a modificar
        'Recordar que nos lo habiamos guardado en un array en orden
        Dim id As Integer = arrayIds(filaSeleccionada)
        'adaptador.modificarContacto(txtDni.Text, txt_LetraDni.Text, txtApellido1.Text, txtApellido2.Text, txtNombre.Text, id)
        recargaPantalla()
        cargaFilaSeleccionada(filaSeleccionada)
        DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
    End Sub
 
    Private Sub EliminarToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem3.Click
        'Vamos a eliminar
        'adaptador.eliminaContacto(id)
        recargaPantalla()
        cargaFilaSeleccionada(DataGridView1.Rows.Count - 1)
        DataGridView1.CurrentCell = DataGridView1.Rows.Item(0).Cells(DataGridView1.Rows.Count - 1)
 
    End Sub
 
 
    Private Sub PorNombreToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PorNombreToolStripMenuItem.Click
        Dim filtro As String = InputBox("", "Dime el nombre por el que quieres filtras los datos")
        ' Dim filtroNombre As DataTable = adaptador.filtraPorNombre("" & filtro & "")
        limpiaGrid()
        'cargaTablaFiltrada(filtroNombre)
    End Sub
    Private Sub cargaTablaFiltrada(ByVal TablaFiltrada As DataTable)
        For i As Integer = 0 To TablaFiltrada.Rows.Count - 1
            'Se obtiene cada fila de la tabla contactos para después leer el valor de cada celda por fila
            Dim fila As DataRow = TablaFiltrada.Rows(i)
            DataGridView1.Rows.Add() 'Fila en blanco y despues la relleno
            'Al cargar la propiedad item me pedia columna y fila, no solo fila
            'DataGriedView1.Item(0,1)= fila.Item(0) 'ID' Aqui estoy leyendo las columnas de una fila de datos de Contacto
            arrayIds(i) = fila.Item(0) 'Guardo los ID´s y no los muestro
            DataGridView1.Item(0, i).Value = CStr(fila.Item(1)) 'DNI
            DataGridView1.Item(1, i).Value = fila.Item(2) 'LETRA_DNI
            DataGridView1.Item(2, i).Value = fila.Item(3) 'APELLIDOS1
            DataGridView1.Item(3, i).Value = fila.Item(4) 'APELLIDOS2
            DataGridView1.Item(4, i).Value = fila.Item(5) 'NOMBRE
            'Las posiciones del Grid empiezan en 0,como siempre
        Next
    End Sub
 
    Private Sub PorDniToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PorDniToolStripMenuItem.Click
        Dim filtro As String = InputBox("", "Dime el nombre por el que quieres filtras los datos")
        Dim filtroDni As DataTable = adaptador.filtraPorDni(CInt(filtro))
        limpiaGrid()
        cargaTablaFiltrada(filtroDni)
    End Sub
 
    Private Sub TodosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TodosToolStripMenuItem.Click
        recargaPantalla()
    End Sub
End Class
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder