Base de Datos Access desde Visual Basic 6.0

Estoy trabajando con una base de datos access desde visual basic 6.0, cuando intento actualizar un registro o guardar uno nuevo me envía el siguiente error (Error de Sintaxis Falta Operador en la Exprision de Consulta), ya he intentado depurar el código agrgandole comillas dobles o comillas simples cuando sea el caso, pero me sigue enviando el mismo error y no puedo actualizar ni insertar un registro nuevo.
Este es el código que estoy utilizando:
Select Case ACCION
    Case EDITAR_REGISTRO
        cnn.Execute "UPDATE TB_EMPLEADOS Set Nombres = " & Text1(1) & _
                                         ", Apellidos = " & Text1(2) & _
                                         " ,Cedula = " & Text1(3) & _
                                         ", Fecha_Nac = " & Text1(4) & _
                                         ", Lugar_Exp = " & Text1(5) & _
                                         ", Fecha_Ing = " & Text2 & _
                                         ", Fecha_Ret = " & Text3 & _
                                         ", Fecha_Traslado_Fondo = " & Text4 & _
                                         " 'where Cedula = " & Text1(3) & ""
    Case AGREGAR_REGISTRO
        cnn.Execute "INSERT INTO TB_EMPLEADOS " & "(Nombres,Apellidos,Cedula,Lugar_Exp,Fecha_Nac,Fecha_Ing,Fecha_Ret,Fecha_Traslado_Fondo) VALUES(" & _
                                 Text1(1) & "','" & _
                                 Text1(2) & "','" & _
                                 Text1(3) & "','" & _
                                 Text1(5) & "','" & _
                                 Text1(4) & "','" & _
                                 Text2 & "','" & _
                                 Text3 & "," & _
                                 Text4 & "," & _
                                 Format(Date, "dd/mm/yyyy") & "')"
    End Select
Por favor cualquier ayuda que me pueda brindar se la agradecería, ya que soy principiante en esto de la programación.

1 Respuesta

Respuesta
1
Estas equivocado, porque para ingresar un registro nuevo en la tabla se hace con INSERT no con UPDATE como lo estas mostrando en el ejemplo, ademas lso campos de fechas en Access deben ir entre #, o sea algo como : ", Fecha_Nac = #" & Text1(4) & "#· ...
Buenas tardes, quisiera que me ayudara en lo siguiente, como usted ya sabe estoy trabajando en una base de datos access desde visual basic, el problema esta en que cada vez que actualizo un registro me envía el siguiente error, (No se Encontró el Método o Miembro de Datos) el menaseje se sitúa en la siguiente linea .lblIdRegistro = LV.SelectedItem.Text, como puedo solucionar este problema. Este es el código que utilice para organizar los registros en un listview.
'Abre el formulario para Editar el registro seleccionado en el ListView
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Editar()
    Dim i As Integer
    ' verifica que hay datos en el ListView y que hay uno seleccionado
    If (LV.ListItems.Count = 0) Then
       MsgBox "No hay ningún regisro para editar", vbInformation
       Exit Sub
    End If
    If (LV.SelectedItem Is Nothing) Then
       MsgBox "Debe seleccionar previamente un registro para poder editarlo", vbInformation
       Exit Sub
    End If
    With FrmEdit
        ' obtiene el elemento seleccionado
        .lblIdRegistro = LV.SelectedItem.Text
        For i = 1 To LV.ListItems.Count
            .Text1(i).Text = LV.SelectedItem.ListSubItems(i).Text
        Next
        .IdRegistro = LV.SelectedItem.Text
        .Text1(1) = LV.SelectedItem.ListSubItems(1).Text
        .Text1(5) = LV.SelectedItem.ListSubItems(3).Text
        .Text1(2) = LV.SelectedItem.ListSubItems(1).Text
        .Text1(3) = LV.SelectedItem.ListSubItems(2).Text
        .Text1(4) = LV.SelectedItem.ListSubItems(4).Text
        .Text2 = LV.SelectedItem.ListSubItems(5).Text
        .Text3 = LV.SelectedItem.ListSubItems(6).Text
        .Text4 = LV.SelectedItem.ListSubItems(7).Text
        .Show vbModal
    End With
End Sub
Por anticipado gracias por su colaboración.
¿Estas seguro que lblIdRegistro existe? o colócale .Caption
Buenas noches, el lblIdRegistro si existe, es la clave principal de la tabla a la que accedo, toda la información se carga en un Listview, en realidad cuando intento actualizar un registro existente es cuando me muestra el error, pienso que este tiene relación con la propiedad count pero no logro encontrar el error cualquier ayuda se la agradecería.
Esta vez adjunto todo el código que utilizo.
Option Explicit
' Botones de opción
''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdOpciones_Click(Index As Integer)
    Select Case Index
        Case 0: Call Agregar
        Case 1: Call Editar
        Case 2: Call Eliminar
        Case 3: Unload Me
        Case 4: FrmFilter.Show , Me
        End Select
End Sub
'Abre el formulario para Editar el registro seleccionado en el ListView
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Editar()
    Dim i As Integer
    ' verifica que hay datos en el ListView y que hay uno seleccionado
    If (LV.ListItems.Count = 0) Then
       MsgBox "No hay ningún regisro para editar", vbInformation
       Exit Sub
    End If
    If (LV.SelectedItem Is Nothing) Then
       MsgBox "Debe seleccionar previamente un registro para poder editarlo", vbInformation
       Exit Sub
    End If
    With FrmEdit
        ' obtiene el elemento seleccionado
        .lblIdRegistro = LV.SelectedItem.Text
        For i = 1 To LV.ListItems.Count
            .Text1(i).Text = LV.SelectedItem.ListSubItems(i).Text
        Next
        .IdRegistro = LV.SelectedItem.Text
        .Text1(1) = LV.SelectedItem.ListSubItems(1).Text
        .Text1(5) = LV.SelectedItem.ListSubItems(3).Text
        .Text1(2) = LV.SelectedItem.ListSubItems(1).Text
        .Text1(3) = LV.SelectedItem.ListSubItems(2).Text
        .Text1(4) = LV.SelectedItem.ListSubItems(4).Text
        .Text2 = LV.SelectedItem.ListSubItems(5).Text
        .Text3 = LV.SelectedItem.ListSubItems(6).Text
        .Text4 = LV.SelectedItem.ListSubItems(7).Text
        .Show vbModal
    End With
End Sub
' Elimina el registro actual seleccionado
'''''''''''''''''''''''''''''''''''''''''''''
Private Sub Eliminar()
    If (LV.ListItems.Count = 0) Then
        MsgBox "No hay ningún registro para eliminar", vbInformation
        Exit Sub
    End If
    ' verifica que hay datos en el ListView y que hay uno seleccionado
    If (LV.SelectedItem Is Nothing) Then
        MsgBox "No hay registro seleccionado para eliminar", vbInformation
        Exit Sub
    End If
    With LV.SelectedItem
        ' pregunta
        If MsgBox("Se va a eliminar el registro : " & vbNewLine & _
                 String(50, "-") & vbNewLine & _
                 "Nombres: " & .Text & vbNewLine & _
                 "Apellidos " & .ListSubItems(1).Text & vbNewLine & _
                 "Cedula: " & .ListSubItems(2).Text, _
                 vbExclamation + vbYesNo, "El Registro se va a Eliminar") = vbYes Then
            ' Elimina
            cnn.Execute "DELETE from TB_EMPLEADOS where Cedula = " & .Text & ""
            ' refresca el recordset
            rs.Requery 1
            ' vuelve a cargar los datos en el ListView
            Call CargarListView(LV, rs)
        End If
    End With
End Sub
Sub Agregar()
    ' Acción
    FrmEditar.ACCION = AGREGAR_REGISTRO
    ' Abre el Form
    FrmEdit.Show 1
End Sub
Sub Salir()
    Unload Me
    End
End Sub
Private Sub Form_Load()
    ' Abre la conexión
    Call IniciarConexion
    ' carga el Recorset con todos los datos
    rs.Open "select * from TB_EMPLEADOS", cnn, adOpenStatic, adLockOptimistic
    ' llena el ListView
    Call CargarListView(LV, rs)
End Sub
Private Sub LV_DblClick()
    Call Editar
End Sub
Private Sub LV_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim Item As ListItem
    Set Item = LV.HitTest(x, y)
    If Not Item Is Nothing And Button = vbRightButton Then
       Item.Selected = True
       Me.PopupMenu mnuEdicion
    End If
End Sub
Private Sub mnfayuda_Click()
End Sub
Private Sub mnuAgregar_Click()
 FrmEdit.Show
End Sub
Private Sub mnuEditar_Click()
 Call Editar
End Sub
Private Sub mnuEliminar_Click()
 Call Eliminar
End Sub
Private Sub mnuImprimir_Click()
Set DataReport1.DataSource = rs
    DataReport1.Show 1
End Sub
' salir
''''''''''''''''''''''''
Private Sub mnuSalir_Click()
    Call Salir
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim ret As VbMsgBoxResult
    ret = MsgBox("¿ Desea Salir ?", vbInformation + vbYesNo)
    If ret = vbNo Then
        Cancel = True
    Else
        Call Salir
    End If
End Sub
Gracias por anticipado
' Obtiene el elemento seleccionado
        .lblIdRegistro = LV.SelectedItem.Text
        For i = 1 To LV.SelectedItem.ListSubItems.Count
            .Text1(i).Text = LV.SelectedItem.ListSubItems(i).Text
        Next
        .IdRegistro = LV.SelectedItem.Text
        .Text1(1) = LV.SelectedItem.ListSubItems(1).Text
Lo que creoq ue debes cambiar esta en Negrillas.
Hola buenas noches, después de realizar el ajuste que me sugeriste resulto el mismo error, que más puedo hacer al respecto. Nuevamente le digo que creo que le problema esta en la propiedad count, pero aun no se como manejarla con un listview.
Cualquier ayuda se la agradecería.
Revisa:
    For i = 1 To LV.SelectedItem.ListSubItems.Count
            .Text1(i).Text = LV.SelectedItem.ListSubItems(i).Text
        Next
¿Aquí estas suponiendo que tienes un array de controles textbox con el mismo tamaño del numero de columnas del listview esto si es así?
Otra cosa los arrays en VB empiezan en el Indice 0 y tu estas empezando a recorrer el listview desde la posición 1, entonces vasa referenciar un text1 que no existe y allí te da error.
Buenas noches, ya revise donde me lo solicitaste, el problema que me resulta es el siguiente (Indice fuera de los limites) ya revise lo concerniente a lo programado en el modulo y aun no se cual puede ser el problema.
Cualquier ayuda gracias, adjunto el código.
'Abre el formulario para Editar el registro seleccionado en el ListView
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Editar()
    Dim i As Integer
    ' verifica que hay datos en el ListView y que hay uno seleccionado
    If (LV.ListItems.Count = 0) Then
       MsgBox "No hay ningún regisro para editar", vbInformation
       Exit Sub
    End If
    If (LV.SelectedItem Is Nothing) Then
       MsgBox "Debe seleccionar previamente un registro para poder editarlo", vbInformation
       Exit Sub
    End If
    With FrmEdit
        ' obtiene el elemento seleccionado
        .lblID = LV.SelectedItem.Text
        For i = 1 To 4
            .Text1(i).Text = LV.SelectedItem.ListSubItems(i).Text
        Next
        .IdRegistro = LV.SelectedItem.Text
        .Text1(1) = LV.SelectedItem.ListSubItems(1).Text
        .Text1(5) = LV.SelectedItem.ListSubItems(4).Text
        .Text1(2) = LV.SelectedItem.ListSubItems(2).Text
        .Text1(3) = LV.SelectedItem.ListSubItems(3).Text
        .Text1(4) = LV.SelectedItem.ListSubItems(5).Text
        .Text2 = LV.SelectedItem.ListSubItems(6).Text
        .Text3 = LV.SelectedItem.ListSubItems(7).Text
        .Show vbModal
    End With
End Sub
Es lo que te digo, tu estas recorriendo el for desde 1 y le asignas el valor al array de controles de textbox que empieza en cero (0).
Cuando llegas a la posición 20 del for, el array de textbox solo llega hasta el 19 por eso te da ese error.
Buenos días, la sugerencia que me diste ya la aplique pero me envía el siguiente error, el elemento 0 de la matriz de controles no existe, ya revise la matriz y cuando cambio el el valor de 0 por el de 1 funciona pero con el error que te informe anteriormente, (Indice fuera de los limites).
Por tu ayuda gracias.
Los usbitems del listview empiezan desde 1 y el indice de los arrays que crees empiezan en cero
Entonces debes hallar una fórmula en la que ListView. ListItem. SubItem(1) sea igual al text1(0) que son los primeros item de cada una de las colecciones o arreglos de lo que estas manejando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas