Access - Error 3059

 
Vista:
sin imagen de perfil

Error 3059

Publicado por Jose (42 intervenciones) el 28/08/2017 19:39:28
Hola tengo una duda sobre el el error 3059: "Operación cancelada por el usuario."

Intento agregar registros a una de mis tablas y me aparece este error. Lo estoy realizando por un botón de enviar para poder mandar los registros aquí les dejo lo que tengo como código y una foto del error.

1
2
3
4
5
6
7
8
9
Private Sub Comando4_Click()
 
    Dim instruccion As String
 
    instruccion = "INSERT INTO Abrir_caso (OT,Fecha_Inicio, Hora_Inicio, Codigo_Componente, Codigo_Equipo, Componente, Equipo, Tipo_Intervencion) VALUES (c_ot,c_fecha,c_hora,c_codcomp,c_codequipo,c_comp,c_equipo,c_tipoint)"
 
    DoCmd.RunSQL instruccion, False
 
End Sub

3059
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

Error 3059

Publicado por Anonimo (3316 intervenciones) el 29/08/2017 10:23:01
Un consejo (para que lo puedas apreciar con claridad):

tras asignar el valor a la variable y ANTES de ejecutar la SQL añade esta línea (es para mostrar el contenido de la variable):
Msgbox instruccion


Y después tomate tu tiempo para reconstruir la lista de valores ya que Access en VBA espera que se lo den bien cocinado (y tiene la buena costumbre de no modificar los textos entre comillas, tras analizar si es correcta su sintaxis: los ejecuta 'tal cual')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Oscar Pérez
Val: 198
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Error 3059

Publicado por Oscar Pérez (80 intervenciones) el 29/08/2017 15:45:16
Buenas!

A mi cómo siempre me gusta la simplicidad lo resumiría en una única línea, pero ojo, una vez depurado el insert y bien construido, porque lo que te falla es la construcción del sql.

No es tan fácil como mirar google y copiar el primer resultado... XD

1
Docmd.RunSQL("INSERT INTO Abrir_caso (OT,Fecha_Inicio, Hora_Inicio, Codigo_Componente, Codigo_Equipo, Componente, Equipo, Tipo_Intervencion) VALUES (" & c_ot & ",'" & c_fecha & "','" & c_hora & "','" & c_codcomp & "'," & c_codequipo & ",'" & c_comp & "','" & c_equipo & "'," & c_tipoint & "'" & )")

Te da error porque... no puedes utilizar las variables de un formulario directamente en una sentencia SQL (Sí, si las pones con forms!formulario!campo). Pero también te dá error porque en los campos de texto has de poner comillas simples al inicio y al final.

Saludos!
Óscar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error 3059

Publicado por Anonimo (3316 intervenciones) el 29/08/2017 21:42:21
No tengo nada claro lo de que la referencia a los objetos de un formulario (utilizadas en el propio formulario) necesiten una referencia absoluta y no funcionen con una referencia relativa .....

Me atrevería a decir que es mas 'rápido' localizar a un objeto del formulario con 'Me.' que con un 'Forms.nombreFormulario.'

En uno (la absoluta) ha de localizar el objeto recorriendo toda la jerarquía , en el otro (la relativa ==> Me) el entorno es mas próximo y el conjunto en el que localizar algo es mas pequeño.

Dejemos a un lado que la construcción sea 'la correcta', porque (por ejemplo) a unos campos que parecen ser de tipo date (c_hora como referente) se le ha 'tratado como texto' (y eso no es una comida bien cocinada), aceptaría que tras la adecuada conversión se le pasase como numero (por ejemplo en lugar de "9:00" ==> 9/24 o también 0,375 y si no como es lo clasico: #9:00#)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 67
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Error 3059

Publicado por Raul (42 intervenciones) el 06/09/2017 08:33:18
Yo creo que te faltan """" y &&&.

Pero ademas que se supone que tiene que hacer el texto...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Samuel
Val: 62
Ha disminuido su posición en 3 puestos en Access (en relación al último mes)
Gráfica de Access

Error 3059

Publicado por Samuel (43 intervenciones) el 29/10/2021 22:22:26
Hola José

Lo que te recomiendo que hagas lo siguiente:

1.- Crea una consulta que apunte a la tabla donde quieres insertar los datos; por ejemplo: vwAbrir_caso
Nota: Existe una actualización de Office que obliga a utilizar una consulta para insertar datos a las tablas de Access.

2.- Asegúrate de escribir correctamente el comando SQL respetando las buenas practicas de programación; ejemplo:

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
Private Sub Comando4_Click()
    Dim m_return As Long
    Dim m_sql As String
    On Error GoTo ErroHandler
 
    m_sql = Empty
    m_sql = m_sql & vbCrLf & "INSERT INTO [vwAbrir_caso]("
    m_sql = m_sql & vbCrLf & "   [OT],"
    m_sql = m_sql & vbCrLf & "   [Fecha_Inicio],"
    m_sql = m_sql & vbCrLf & "   [Hora_Inicio],"
    m_sql = m_sql & vbCrLf & "   [Codigo_Componente],"
    m_sql = m_sql & vbCrLf & "   [Codigo_Equipo],"
    m_sql = m_sql & vbCrLf & "   [Componente],"
    m_sql = m_sql & vbCrLf & "   [Equipo],"
    m_sql = m_sql & vbCrLf & "   [Tipo_Intervencion]"
    m_sql = m_sql & vbCrLf & ")"
    m_sql = m_sql & vbCrLf & "VALUES (?,'?','?','?',?,'?','?','?')"
    m_sql = VBA.Replace(m_sql, "?", c_ot, 1, 1)
    m_sql = VBA.Replace(m_sql, "?", c_fecha, 1, 1)
    m_sql = VBA.Replace(m_sql, "?", c_hora, 1, 1)
    m_sql = VBA.Replace(m_sql, "?", c_codcomp, 1, 1)
    m_sql = VBA.Replace(m_sql, "?", c_codequipo, 1, 1)
    m_sql = VBA.Replace(m_sql, "?", c_comp, 1, 1)
    m_sql = VBA.Replace(m_sql, "?", c_equipo, 1, 1)
    m_sql = VBA.Replace(m_sql, "?", c_tipoint, 1, 1)
    Call CurrentProject.Connection.Execute(m_sql, m_return)
    If (m_return = 0) Then
        Call MsgBox("Ocurrio un problema al intentar guardar la información.", vbCritical, "Error")
    ElseIf (m_return = 1) Then
        Call MsgBox("La información se guardo correctamente.", vbInformation, "Notificación")
    End If
 
Finally:
    Exit Sub
 
ErroHandler:
    Call MsgBox("Error #:" & Err.Number & vbCrLf & Err.Description & vbCrLf & m_sql, vbCritical, "Error no controlado")
    Resume Finally
End Sub

A primera vista puede parecer mas complicado el código que te dejo de ejemplo, pero si lo estudias y lo analizas te darás cuenta de que es más claro y el valor de la variable m_sql lo puedes usar para depurar el código SQL.

Nota: Recuerda que tienes que darle el tratamiento correcto a los distintos tipos de datos, por ejemplo:
• Texto: 'texto que se va a insertar'
• Número: se pone como solo número
• Fecha: 'Fecha con formato dd/mm/yyyy'
• Hora: 'Hora con formato hh:mm:ss'
• Sí/No: se usa como número 0 o 1

Te dejo la referencia a la documentación de Microsoft:
https://support.microsoft.com/es-es/office/tipos-de-datos-para-bases-de-datos-de-escritorio-de-access-df2b83ba-cef6-436d-b679-3418f622e482
https://docs.microsoft.com/es-es/office/client-developer/access/desktop-database-reference/insert-into-statement-microsoft-access-sql
https://support.microsoft.com/es-es/office/instrucci%C3%B3n-insert-into-e12fd58b-33b1-479c-8221-e9f245ab8d24
https://www.errorvault.com/en/troubleshooting/runtime-errors/microsoft/microsoft-access/error-3059_microsoft-access-error-3059

Espero que te haya sido de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error 3059

Publicado por Anonimo (3316 intervenciones) el 30/10/2021 01:56:12
En VBA el formato de fecha = americano

• Fecha: 'Fecha con formato dd/mm/yyyy' <==== error
• Fecha: 'Fecha con formato mm/dd/yyyy'<==== correcto


• Sí/No: se usa como número 0 o 1


Access no utiliza un bit para el valor booleano, utiliza un LONG (al parecer por eficiencia) y lo real es
= 0 ====> NO
<> 0 ====> SI

Access ( para minimizar posibles problemas ) utiliza (-1 ) -que cumple la condición de ser diferente de cero- como valor por defecto para el:SI
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar