Access - Insert Into desde Modulo

 
Vista:
Imágen de perfil de Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Insert Into desde Modulo

Publicado por Jhonattan (123 intervenciones) el 18/06/2018 05:53:30
Hola estimados colegas y amigos, tengo una consulta y me gusta tía saber si pueden colaborarme un poco, tengo un formulario con dos campos independientes y quiero insertar datos mediante docmd. Runsql el tema es que quiero correr esta sentencia sql desde un modulo, si ejecutó dicho código desde el formulario funciona pero desde un modulo no, me da un error aquí dejo el código que tengo en un modulo llamado insertar datos.

Compare database
Option explicit
Dim agregar as string
Agregar = "insert into registro (nombres, teléfono) values (" & "txtnombres" & "," & "txttelefono" & ")"

La estructura está bien si la ejecutó dentro de un evento del formulario funciona pero si lo trato de ejecutar desde el modulo no me funciona la llamada se la hago desde un botón de la siguiente forma.

Cmdinsertar_click()

Call agregar

Me muestra un error que dice que la variable no se ha definido.
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

Insert Into desde Modulo

Publicado por Anonimo (3314 intervenciones) el 18/06/2018 12:24:40
La sentencia funcionara desde donde se quiera ejecutar, lo único que se precisa es que la ruta a los objetos sea la adecuada.

Aunque funciona en el actual entorno, la ruta a los objetos (txnombres, txtelefono) son imprecisas o ambiguas, las toma por 'descarte', pues la ruta correcta seria:
…. "insert into registro (nombres, teléfono) values (" & ME.txtnombres & "," & ME.txttelefono & ")"

Lo de asignar a una variable de texto (agregar) esa SQL de acción no creo que funcione, tampoco debería funcionar el 'llamar/tratar" a esa variable de texto como si fuera una función (si es una variable de texto NO PUEDE ser una función, Access no permite ambigüedades)

En definitiva:
.- si se crea una función y en ella se solicitan (o se le envían) los parámetros, seria funcional
.- si esa SQL se EJECUTA indicando la ruta adecuada a los parámetros, también funcionaria

El utilizar de forma incorrecta cualquier dato … funcionara alguna vez (si la suerte esta 'de cara' y los santos acompañan) pero generaría una aplicación inestable y con futuro impreciso.

Soluciones posibles:
.- Generar una verdadera función, que solicite los datos y EJECUTE la SQL (se la reutilizaría desde cualquier parte)
.- Ejecutar esa SQL en el formulario y allá donde se precise (pero asignando de forma correcta los parámetros, en la procura de que Access no re-invente los datos poco formales)
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 Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Insert Into desde Modulo

Publicado por Jhonattan (123 intervenciones) el 18/06/2018 14:18:49
Muchas gracias por la ayuda Anónimo aplícare las funciones necesarias según lo que me indicas ejecutare, veré el resultado y allí te comento como me fue saludos desde Chile..
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 Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Insert Into desde Modulo

Publicado por Jhonattan (123 intervenciones) el 18/06/2018 22:31:36
Hola Anonimo te comento que no me funciona el dato que me diste no si es que soy yo que no sabe emplearlo o quizas me falte hacer algo mas..

Podrias darme un ejemplo funcional si esta a tu alcance..
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

Insert Into desde Modulo

Publicado por Anonimo (3314 intervenciones) el 19/06/2018 09:40:24
Para ejecutar una SQL desde VBA se suelen utilizar dos métodos (cada uno tiene sus ventajas e inconvenientes que si acaso entrarían en un post sobre teoría de programación).

Metodo uno:
Docmd.RunSQL "aquí la SQL en formato string"

Metodo dos:
CurrentDb.Execute "aquí la SQL en formato string"

Una función no es mas que un conjunto de acciones que efectúan bajo un titulo, si se desea que aporte una respuesta se crea una FUNCION, si no se desea/necesita una respuesta se crea una SUB-Funcion si a ello añadimos que las funciones se pueden utilizar desde cualquier parte de la aplicación y a las subfunciones solo desde VBA tenemos sus diferencias básicas)

Parametros de una función/subfunción:
Son aquellos datos que se necesitan (y que pueden ser optativos) para que esa serie de acciones (las contenidas en la función/subfunción) puedan procesarse con pleno éxito.

Aproximándonos a un caso real:

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
Public Function InsertarDatos(dato1 As String, dato2 As Long) As String
'con DoCmd y generando un String
Dim MiSQL As String
MiSQL = "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
DoCmd.RunSQL MiSQL
InsertarDatos = "Inserción de datos ejecutada"
End Function
 
 
Public Function InsertarDatos(dato1 As String, dato2 As Long) As String
'con DoCmd y sin perder tiempo con un String
DoCmd.RunSQL "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
InsertarDatos = "Inserción de datos ejecutada"
End Function
 
Public Function InsertarDatos(dato1 As String, dato2 As Long) As String
'con el método Execute y generando un String
Dim MiSQL As String
MiSQL = "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
CurrentDb.Execute MiSQL
InsertarDatos = "Inserción de datos ejecutada"
End Function
 
 
Public Function InsertarDatos(dato1 As String, dato2 As Long) As String
'con el método Execute y sin perder tiempo con un String
CurrentDb.Execute "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
InsertarDatos = "Inserción de datos ejecutada"
End Function
 
'Lo mismo con una SUB-función
 
Public Sub InsertarDatos(dato1 As String, dato2 As Long)
'con DoCmd y generando un String
Dim MiSQL As String
MiSQL = "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
DoCmd.RunSQL MiSQL
End Sub
 
 
Public Sub InsertarDatos(dato1 As String, dato2 As Long)
'con DoCmd y sin perder tiempo con un String
DoCmd.RunSQL "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
End Sub
 
Public Sub InsertarDatos(dato1 As String, dato2 As Long)
'con el método Execute y generando un String
Dim MiSQL As String
MiSQL = "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
CurrentDb.Execute MiSQL
End Sub
 
 
Public Sub InsertarDatos(dato1 As String, dato2 As Long)
'con el método Execute y sin perder tiempo con un String
CurrentDb.Execute "insert into registro (nombres, teléfono) values ('" & dato1 & "'," & dato2 & ")"
End Sub

No creo que sea necesario extenderse en como utilizarlas, solo se ha de tener en cuenta que los parámetros (en las funciones) van entre paréntesis y en las sub-funciones sin ellos

Nota:
¿Tan complejo es/seria crear una UNICA línea con la ejecución de esa SQL alla donde se necesite? … si se tratase de 5, 10, … 100 acciones repetitivas le encontraría sentido practico, para una única línea …… pero eso es un optativo capricho de programador

Si existe alguna duda sobre lo expuesto, seleccionar esa duda y pulsar la tecla F1 acostumbra a llevar a la teoria con el mejor libro escrito sobre Access: la ayuda incorporada (no es lo mismo desconocer la teoría que tener alguna duda sobre su aplicación practica)
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