Access - ventana "Introduzca el valor del Parámetro"

   
Vista:

ventana "Introduzca el valor del Parámetro"

Publicado por pil (12 intervenciones) el 13/10/2015 05:10:59
Hola, tengo un problema muy básico, que he buscado como solucionar y no lo encuentro. Para graficarlo creé la tabla tb_ejemplo con dos campos (campo1 y campo2), ambos numéricos (entero). Estoy trabajando en access 2013.
Creé una sub muy básica en VBA para insertar valores en esta tabla:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Compare Database
Option Explicit
 
Private Sub inserta()
 
  Dim query As String
  Dim campo As Integer
 
  campo = 12
 
  query = "INSERT INTO tb_ejemplo VALUES (campo,2)"
  DoCmd.RunSQL (query)
 
End Sub

El problema es que al ejecutarla siempre me pide el valor de campo a través de la ventana "Introduzca el valor del Parámetro", siendo que lo tengo definido en 12. Si cambio la variable campo en VALUES por un número, me funciona sin problemas.
No sé si me falta configurar algo o tengo un problema de ambiente de variables u otra cosa. Agradeceré cualquier apoyo. Saludos
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

ventana "Introduzca el valor del Parámetro"

Publicado por Enrique Heliodoro (1663 intervenciones) el 13/10/2015 10:07:56
La SQL es una expresión de texto y Access NO EVALUA los textos, la SQL será evaluada en tiempo de ejecución por el motor de Access y el espera datos congruentes (no variables).

Lo adecuado será enviarle datos fidelignos (evaluar las expresión y tomar los valores de las variables) para que el motor de Access al ejecutar la SQL encuentre lo que necesita, por ejemplo asi:

Original:
query = "INSERT INTO tb_ejemplo VALUES (campo,2)"

Modficado (para tomar datos reales, no empíricos):
query = "INSERT INTO tb_ejemplo VALUES (" & campo & ",2)"

Lo que daría como resultado (en tiempo de ejecución y tras las asignaciones) esto:
query = "INSERT INTO tb_ejemplo VALUES (12 ,2)"

Pero mi recomendación es indicar TAMBIEN el nombre y orden de los campos (para evitar inconsistencias):
query = "INSERT INTO tb_ejemplo (Campo1, Campo2) VALUES (" & campo & ",2)"

De esa forma se podría escribir asi:
query = "INSERT INTO tb_ejemplo (Campo2, Campo1) VALUES (2, " & campo & ")"

Que si bien parece 'una tonteria' puede ser muy útil si se genera la SQL en tiempo de ejecución recorriendo el conjunto de campos (y sus valores asociados) creando dos variables de texto, una para los campos y otra para los valores, un ejemplo:

Dim Temp_Campos as String, Temp_Valores as string

.......
If not isnull(me.campo_nn) Then
If len(Temp_Campos) <> 0 Then Temp_Campos =Temp_Campos & "," : Temp_Valores= Temp_Valores & ","
Temp_Campos = Temp_Campos & "campo_nn"
Temp_Valores = Temp_Valores & me.campo_nn
end If
........
.......

al final en Temp_Valores una lista de valores separada por comas y Temp_Campos una de nombres separada por comas, con lo que se construiría asi:
Query = "Insert Into tb_ejemplo (" & Temp_Campos & ") Values (" & Temp_Valores & ")"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

ventana "Introduzca el valor del Parámetro"

Publicado por pil (12 intervenciones) el 13/10/2015 15:58:36
Muchas gracias Enrique por tus comentarios y sugerencias. Funcionó sin problemas. Saludos.
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