Incluir un valor calculado por código VBA mediante SQL

Me hallo realizando una base de datos para la gestión de muestras de un laboratorio.

Las muestras, llegadas a cierto punto se almacenan.

Para ello se les asigna un identificador definido por la bandeja donde se archivan y su posición en esta y mediante SQL crea un nuevo registro en la tabla "Archivo_Muestras" donde registra el ID_Archivo, ID_Muestra (que hace referencia a la tabla de registro general) y la hora a la que se ha registrado.

Este proceso se hace desde un botón en un formulario de visualización de la muestra, que es de donde coge el dato ID_Muestra

El identificador, así como el cambio de bandeja cada 18 posiciones (es su capacidad máxima), lo he definido mediante el código al que llamo desde el botón:

Dim ultband As String
Dim newband As String
Dim ultpos As String
Dim ultID As String
Dim ID_Archivo As String
Dim inicio As String 'No consigo que haga lo que quiero como numero, asi que lo incluyo como cadena

inicio = "01"
ultID = DMax("Val(Mid(ID_Archivo, 1, 6))", "Archivo_Muestras")
ultband = DMax("Val(Mid(ID_archivo, 1, 4))", "Archivo_Muestras")
ultpos = Right([ultID], 2)
newband = ultband + 1

If ultpos <> 18 Then
ID_Archivo = ultID + 1
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Archivo_Muestras (ID_Archivo, ID_Muestra, Fecha_Archivo) VALUES (ID_Archivo, form!ID_Muestra, Now())"
DoCmd.SetWarnings True
MsgBox "Por favor guardar la nueva muestra en bandeja Nº " & ultband, vbExclamation, "Bandeja"

Else
ID_Archivo = [newband] & [inicio]
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Archivo_Muestras (ID_Archivo, ID_Muestra, Fecha_Archivo) VALUES (ID_Archivo, form!ID_Muestra, Now())"
DoCmd.SetWarnings True
MsgBox "Se ha agotado la bandeja anterior. Por favor guardar la nueva muestra en bandeja Nº " & newband, vbExclamation, "Nueva Bandeja"
'Docmd.print... (Buscar comando para imprimir etiqueta para la nueva bandeja)
End If

End Sub

Cuando intento usarlo, Access me pide que introduzca el valor del parametro ID_Archivo

Entiendo que la sintaxis SQL no es correcta, ya que por lo que veo, no me está cogiendo el valor ID_Archivo calculado mediante código.

Si lo introduzco manualmente, crea el registro sin problema.

1 Respuesta

Respuesta
2

La SQL tienes que escribirla así:

DoCmd.RunSQL "INSERT INTO Archivo_Muestras (ID_Archivo, ID_Muestra, Fecha_Archivo) VALUES ('" & ID_Archivo & "', form!ID_Muestra, Now())"

Un saludo.


Si ID_Archivo fuera un campo numérico (no me queda claro), sería así:

DoCmd.RunSQL "INSERT INTO Archivo_Muestras (ID_Archivo, ID_Muestra, Fecha_Archivo) VALUES (" & ID_Archivo & ", form!ID_Muestra, Now())"

Muchas gracias Sveinbjorn!!

Sabia que era algún detalle del estilo.

Quería aprovechar para agradecerte toda la ayuda. Y felicitaros a ti y a Neckitto por el curso de vuestra web. Se ha convertido en mi lectura de cabecera estas ultimas semanas!

Gracias por todo!

Me alegra oír que te gustan los cursos de la web, gracias por comentarlo. ¡Un saludo y ánimo que ya te queda poco para teminarlos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas