Guardar Datos en 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 Text1(3) = " & Cedula & ""
    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 puedan brindar se las agradecería, ya que soy nuevo en esto de la programación.
1

1 respuesta

Respuesta
1
Hay algunos problemas con sus sentencias
1.- Cuando actualizas campos tipo texto el valor debe estar entre comillas
Set Nombres = '" & Text1(1) & "'" & _
o
Set Nombres = """ & Text1(1) &  """" & _
Si se trata de fechas debe estar entre #
", Fecha_Ing = #" & Text2 & "#" & _
Para que la fecha se almacene correctamente el formato en que debe estar tu fecha debe ser mm/dd/yyyy
lo mismo para el insert
.....Fondo) VALUES(   '" & _
                                 Text1(1) & "','" & _
Saldos.
Buenas noches, gracias por tu ayuda, pero cuando intento realizar los cambios que me sugeriste me envía el siguiente mensaje de error, el numero de valores de consulta y el numero de campos de destino son diferentes, así quedo el código luego de realizar los cambios que me sugeriste.
Select Case ACCION
    Case EDITAR_REGISTRO
        cnn.Execute "UPDATE TB_EMPLEADOS Set Nombres = " & Text1(1) & _
                                         ", Apellidos = " & Text1(2) & _
                                         ", 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
Nuevamente gracias por tu ayuda.
'El Codigo deberia quedar asi
Select Case ACCION
    Case EDITAR_REGISTRO
        cnn.Execute "UPDATE TB_EMPLEADOS Set Nombres = '" & Text1(1) & "'" & _
                                         ", Apellidos = '" & Text1(2) & "'" & _
                                         ", Fecha_Nac = #" & Text1(4) & "#" & _
                                         ", Lugar_Exp = '" & Text1(5) & "'" & _
                                         ", Fecha_Ing = #" & Text2 & "#" & _
                                         ", Fecha_Ret = #" & Text3 & "#" & _
                                         ", Fecha_Traslado_Fondo = #" & Text4 & "#" & _
                                         " 'where Cedula = " & Text1(3) & ""
'Ojo que Fecha_Nac esta considerada como tipo fecha y en el Where Cedula esta como numerico si es tipo texto deberia estar: 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
'Nuevamente gracias por tu ayuda.
'En la Consulta Insert efectivamente el numero de valores de consulta y el numero de campos de destino son diferentes.
'los campos destino son 8: (Nombres,Apellidos,Cedula,Lugar_Exp,Fecha_Nac,Fecha_Ing,Fecha_Ret,Fecha_Traslado_Fondo)
' y los de destino son 9: Text1(1)......
Ademas si son Tipo fecha deben de ir entre #
                                 ................"',#" & _
                                 Textx & "#,'" & _
Buenos días, nuevamente acudo a usted en busca de ayuda, disculpe tanta molestia al respecto pero como le explique estoy iniciando en esto de la programación y muchas cosas aun se me dificultan, mi problema ahora, una vez realice los cambios sugeridos por usted, es relacionado con las fechas, el error que me envía es el siguiente: Error de sintaxis (Falta Operador) en la expresión de consulta "13/12/1952'#'01/11/1984'#"#'04/04/1994'#'dd/mm/yyyy". estuve revisando que fuera alguna comilla doble o simple pero siempre genera el mismo error. Adjunto el código para que por favor lo revise y me de sus sugerencias.
Gracias por su ayuda.
Select Case ACCION
    Case EDITAR_REGISTRO
        cnn.Execute "UPDATE TB_EMPLEADOS Set Nombres = '" & Text1(1) & "'" & _
                                         ", Apellidos = '" & Text1(2) & "'" & _
                                         ", 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("dd/mm/yyyy") & "')"""
    End Select
Dim Qry As String
Select Case ACCION
    Case EDITAR_REGISTRO
        cnn.Execute "UPDATE TB_EMPLEADOS Set Nombres = '" & Text1(1) & "'" & _
                                         ", Apellidos = '" & Text1(2) & "'" & _
                                         ", 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
        Qry = "INSERT INTO TB_EMPLEADOS " & "(Nombres,Apellidos,Cedula,Lugar_Exp,Fecha_Nac,Fecha_Ing,Fecha_Ret,Fecha_Traslado_Fondo) VALUES('"
        Qry = Qry & Text1(1) & "','"      'Nombre
        Qry = Qry & Text1(2) & "','"      'Apellido
        Qry = Qry & Text1(3) & "','"      'Cedula
        Qry = Qry & Text1(5) & "'"      'Lugar de Exp
        Qry = Qry & ",'" & Text1(4) & "'"      '********** ESTA LINEA ESTA POR  DEMAS    -ELIMINAR ****
        Qry = Qry & ",#" & Text2 & "#,#"         'Fecha de Nacimiento
        Qry = Qry & Text3 & "#,#"         'Fecha de ingreso
        Qry = Qry & Text4 & "#,#"         'Fecha Ret
        Qry = Qry & Format(Date, "mm/DD/yyyy") & "#)"   'Fecha de Traslado de fondOS
       cnn.Execute Qry
    End Select
Perdone tantas molestias que le ocasiono pero es que aun estoy algo confundido con esta linea de código, usted me dice que elimine la linea del Text1(4) y le asigne al Text2 el recibir esa información pero donde queda el text1(4) si en formulario de captura es ese text quien debe recibir esa información, ademas el Text3 no es la fecha de ingreso sino de retiro y así los demás, al hacer los cambios me envía el siguiente mensaje de error INSTRUCCIÓN SQL NO VALIDA SE ESPERABA DELETE, INSERT, PROCEDURE, SELECT O UPDATE.
Esta vez te adjunto toda la linea de código que tengo a ver en que me puedes seguir ayudando.
Mil gracias por tu ayuda.
Option Explicit
Enum EACCION
    AGREGAR_REGISTRO = 0
    EDITAR_REGISTRO = 1
End Enum
Public Cedula As Long
Public ACCION As EACCION
Private Sub cmdGuardar_Click()
On Error GoTo ErrorSub
    ' Valida el Cedula
    ''''''''''''''''''''''''''''''''
    If Trim(Text1(3)) = "" Then
        MsgBox "No se ha Escrito la Cedula", vbCritical, "Datos incompletos"
        Text1(3).SetFocus
        Exit Sub
    End If
    'Agrega el registro
    '''''''''''''''''''''''''''''''
    Dim Qry As String
    Select Case ACCION
    Case EDITAR_REGISTRO
        cnn.Execute "UPDATE TB_EMPLEADOS Set Nombres = '" & Text1(1) & "'" & _
                                         ", Apellidos = '" & Text1(2) & "'" & _
                                         ", 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
        Qry = "INSERT INTO TB_EMPLEADOS " & "(Nombres,Apellidos,Cedula,Lugar_Exp,Fecha_Nac,Fecha_Ing,Fecha_Ret,Fecha_Traslado_Fondo) VALUES('" & _
                                 Qry = Qry & Text1(1) & "','" 'Nombre
                                 Qry = Qry & Text1(2) & "','"      'Apellido
                                 Qry = Qry & Text1(3) & "','"      'Cedula
                                 Qry = Qry & Text1(5) & "'"      'Lugar de Expedicion
                                 Qry = Qry & ",#" & Text2 & "#,#" 'Fecha de Nacimiento
                                 Qry = Qry & Text3 & "#,#"         'Fecha de Ingreso
                                 Qry = Qry & Text4 & "#,#"         'Fecha de Retiro
                                 Qry = Qry & Format(Date, "mm/dd/yyyy") & "#)"
       cnn.Execute Qry
    End Select
    rs.Requery 1
    Call CargarListView(FrmPrincipal.LV, rs)
    DoEvents
    Unload Me
    Set FrmEdit = Nothing
Exit Sub
ErrorSub:
MsgBox Err.Description
End Sub
Private Sub cmdCancelar_Click()
    Unload Me
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then
       Unload Me
    End If
End Sub
En la parte del UPDATE, en la linea del Where hay un carácter por demás
" 'where Cedula = " & "Text1(3)" & ""
Si cedula es tipo texto lo correcto es >>> " where Cedula = '" & Text1(3) & "'"
Si es tipo numerico =>>> " where Cedula = " & Text1(3) & ""
En la Parte del INSERT, decía que hay que eliminar una linea porque sobra por eso puse como comentario a que campo debería corresponder.
Y da el error porque sobran dos caracteres al final de la primera linea
Qry = "INSERT ..........ha_Traslado_Fondo) VALUES('" & _
Que pena, nuevamente acudo a usted por otra aclaración, en la parte del INSERT elimine los caracteres que estaban de más y me da el siguiente error Error de Sintaxis en la Fecha en la Expresión de Consulta '##'.
Nuevamente Gracias por prestarme atención tantas veces y disculpa tantos inconvenientes.
Qry = "INSERT INTO TB_EMPLEADOS " & "(Nombres,Apellidos,Cedula,Lugar_Exp,Fecha_Nac,Fecha_Ing,Fecha_Ret,Fecha_Traslado_Fondo) VALUES('"
        Qry = Qry & Text1(1) & "','"      'Nombres
        Qry = Qry & Text1(2) & "','"      'Apellidos
        Qry = Qry & Text1(3) & "','"      'Cedula
        Qry = Qry & Text1(5) & "'"      'Lugar de Expedicion
        Qry = Qry & ",#" & Text2 & "#,#" 'Fecha de Nacimiento
        Qry = Qry & Text3 & "#,#"         'Fecha de ingreso
        Qry = Qry & Text4 & "#,#"         'Fecha Retiro
        Qry = Qry & Format(Date, "mm/dd/yyyy") & "#)" 'Fecha de Traslado de fondos
       cnn.Execute Qry
No te preocupes mucho, seria una pena si al final no podemos resolver el problema.
El error que te da es porque el text esta en blanco, tal vez podrías validarloa de la siguiente manera
  Qry = Qry & "," & iif(isdate(Text2), "#" & Text2 & "#","Null")  'Fecha de Nacimiento
 Qry = Qry & "," & iif(isdate(Text3), "#" & Text3 & "#","Null")   'Fecha de ingreso
 Qry = Qry & "," & iif(isdate(Text4), "#" & Text4 & "#","Null")    'Fecha Retiro
Qry = Qry &",#" Format(Date, "mm/dd/yyyy") & "#)" 'Fecha de Traslado de fondos
Buenas tardes, gracias a su ayuda he podido superar los errores que tenia al actualizar o insertar un nuevo registro, pero la pregunta que tengo, creo que la final, es que al insertar los datos de las fechas se cargan de una forma que no corresponde, es decir, la fecha de nacimiento se carga como la fecha de ingreso, la fecha de ingreso se carga como la fecha de retiro, la fecha de traslado de fondo se carga con la fecha actual que tenga el sistema, la idea es que yo incluyo estos datos a través de un formulario que ya diseñe, por esta razón en la pregunta anterior le solicite que me explicara donde queda la fecha de nacimiento, es decir, el valor que indico en el Text1(4) que me dijo que eliminara por estar demás.
Le explico algo más, en la linea de código de la sentencia UPDATE 'Cedula' es el campo llave de mi base de datos, es un campo nuemrico, y se inserta bien a través de la sentencia INSERT, como ya le entendí lo que me explico sobre el error de que deben haber iguales campos tanto a actualizar como a insertar, necesariamente y para que se den todos los campos a insertar, incluyendo el campo que se encuentra en el text1(4), ¿debo crear otro item que sea la clave principal y relacionarlo en el condición Where o por el contrario puedo relacionar 'Cedula' (Text1(3)) en el la sentencia UPDATE sin ningún problema?.
No se si me explique bien, pero Gracias por su ayuda.
La consulta UPDATE y la INSERT son totalmente independientes, podrías modificar solo un campo y no es necesario poner ..., Cedula=... text1(3)... a no ser que vayas a modificar la clave cosa que no creo que quieras hacer.
Sin mebargo en la consulta INSER tiene dos partes la primera va entre () y ahi indicas los campos donde se realizaran la insercion, y la segunda parte esta los valores VALUES(), el orden enque pones en la primera parte debe corresponder al orden de la segunda parte
por ejemplo esto seria un error
INSERT INTO UNATABLA (Nombre, Fecha_Nac) Values (#01/01/2009#,'Juan')
porque estoy pasando una fecha para un campo tipo texto y paso una texto a una valor fecha, entoces tines que pasar los valores (VALUES) en el Mismo orden en que declaras tus campo, entonces lo correcto seria
INSERT INTO UNATABLA (Nombre, Fecha_Nac) Values ('Juan',#01/01/2009#)
Agradezco su colaboración, gracias a su ayuda pude solucionar este problema adecuadamente, espero seguir contando con su ayuda en preguntas futuras.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas