** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Duda sobre VBA INSERT INTO
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoDuda sobre VBA INSERT INTO

 Responder Responder
Autor
Mensaje
GFAP Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 12/Junio/2021
Localización: León Gto. Mex
Estado: Sin conexión
Puntos: 22
Enlace directo a este mensaje Tema: Duda sobre VBA INSERT INTO
    Enviado: 14/Junio/2021 a las 07:49
Hola. Soy nuevo en el foro. Primero darles gracias por aceptarme.
Ya hace un tiempo he programado en VBA Excel. Y en ese campo se puede decir que me defiendo. Decidí empezar a hacerlo en VBA Access y llevo un mes tomando cursos en línea y pues ahí la llevo. Pero clero me falta mucho tramo por recorrer para defenderme.
Mi Pregunta es la siguiente:
Cree un formulario en blanco desde donde el usuario da de alta a un Proveedor.
Lo hago con .execute y una instrucción SQL (INSERT INTO). En mi tabla de Proveedores tengo un ID del Proveedor que es un campo clave.
Todo lo hace Bien, pero cuando intento dar de alta otro proveedor con el mismo ID como es normal no lo registra, pero no entra al On error goto. Yo pensé que entraría al control de errores o marcaria algo que avisara que el registro ya existe, Y no hace nada. Intento ver si corriendo paso a paso existe un numero de error pero no se genera ninguno. razón lógica de porqué no entra al control de errores.
Seguramente este tema ya ha sido expuesto en este foro pero no tengo ni idea como buscarlo.

¿Cómo le hago para saber que en la base de datos no se ha añadido ningún registro por duplicidad del campo clave?

De antemano les agradezco su atención. Y espero ser yo el que ayude a otros en algún tiempo.




GFAP
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14021
Enlace directo a este mensaje Enviado: 14/Junio/2021 a las 08:14
Hola, bienvenido.

¿Y cómo lo haces? ... depende del camino que tomes se puede hacer de varias formas ...
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
GFAP Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 12/Junio/2021
Localización: León Gto. Mex
Estado: Sin conexión
Puntos: 22
Enlace directo a este mensaje Enviado: 14/Junio/2021 a las 08:16
Private Sub BotonDarAlta_Click()
    Dim dbs As Database
    Dim camino As String
    Dim Parte1 As String
    Dim Parte2 As String
    Dim Parte3 As String
    
    On Error GoTo ManipularError
    
    camino = Application.CurrentProject.Path & "\"
    Set dbs = OpenDatabase(camino & "DBRIO.accdb")
    Parte1 = " INSERT INTO Productos(CodigoBarras, Articulo, "
    Parte2 = "Precio, Proveedor) VALUES "
    Parte3 = "(" & CampoCodigoBarras.Value & ", '" & CampoNombreArticulo.Value & "', " & CampoPrecio.Value & ", " & ComboProveedor.Value & ");"
    dbs.Execute Parte1 & Parte2 & Parte3
     
    'dbs.Execute " INSERT INTO Productos " _
     '   & "(CodigoBarras, Articulo, Precio, Proveedor) VALUES " _
     '   & "(" & CampoCodigoBarras.Value & ", " & CampoNombreArticulo.Value & ", " & CampoPrecio.Value & ", " & ComboProveedor.Value & ");"
    dbs.Close
    
ManipularError:
    x = Err.Number
    If Err.Number <> 0 Then
        MsgBox "Hubo un error al realizar la operacion" & vbNewLine & _
        Err.Description, vbCritical, "Error"
    End If
    
End Sub
GFAP
Arriba
GFAP Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 12/Junio/2021
Localización: León Gto. Mex
Estado: Sin conexión
Puntos: 22
Enlace directo a este mensaje Enviado: 14/Junio/2021 a las 08:17
gracias por responder Jesús.
GFAP
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14021
Enlace directo a este mensaje Enviado: 14/Junio/2021 a las 08:50
La solución más académica es comprobar antes si el registro existe ... eso lo puedes hacer con un Dlookup, ... 

Otra forma sería controlar el numero de registros afectados por la SQL, si es cero no la ha hecho (es decir, ya existe) y si es distinto de cero ha realizado la creación del nuevo registro.

dbs.Execute "INSERT INTO ....."
If dbs.recordsAffected = 0
'ya existe el registro
    else
'alta realizada
end if


Te repito, la primera forma es la 'académica', yo empleo siempre la segunda si uso SQL, -te ahorra un acceso a la BD-.



Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
GFAP Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 12/Junio/2021
Localización: León Gto. Mex
Estado: Sin conexión
Puntos: 22
Enlace directo a este mensaje Enviado: 14/Junio/2021 a las 09:32
Gracias Jesús ya probé las dos y Funcionaron a la perfección.
Se Puede cerrar el Hilo.
GFAP
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable