Uso cámara Web para tomar fotos en Access

Comunidad nuevamente... Sigo aquí recurriendo a su ayuda y conocimientos como tantos otros internautas buscan para aprender algo mas... Bueno mi consulta es que estoy agregando un tips a mi base de dato access, en la cual me permita agregar una foto directamente desde la cámara web, usando un pequeño programa llamado "CommandCam", el cual lo ubique navegando y se utilizo en un proyecto Excel y funciona perfecto, trato de replicarlo en Access, obviamente modificando ciertos comando vba, pero me presenta error "No se a definido la variable", la defino con un Dim String, pero no me resulta.

Este es mi código:

Option Compare Database
Option Explicit
Private Sub Camara_Click()
Dim ArchivoIMG As String
Dim picPath As String
Dim RetVal As String
Dim base As String
Dim picName As String
Dim picNumber As Variant
picNumber = Foto & "-" & Me.FichaPaciente
picName = picNumber & ".jpg"
base = CurrentProject.Path & "\Tools\Imagenes\FotosPacientes\"
picPath = base & picName
RetVal = Shell(base & "CommandCam.exe/filename""" & picPatch & """", vbHide)
ArchivoIMG = picPath
Imagen.Picture = LoadPicture(ArchivoIMG)
Me.Txt_Imagen = (ArchivoIMG)
Me.Foto = picName
End Sub

El comando realiza el llamado de la aplicación se ejecute y que guarde la imagen con un nombre asignado

No se si podrán orientarme en que esto ejecutando mal..

1 respuesta

Respuesta
4

RetVal defínelo como Variant, no como String u otro tipo. (Dim RetVal  o Dim Retval As Variant)

También me parece que te falta una espacio entre el CommandCam.exe /filename y las 3 comillas que le siguen. ("CommandCam.exe /filename """")

Hola Sveinbjorn El Rojo, gracias por responder... realice el cambio, pero me arroja error ahora en la función picPacht. Le cambie la definición a Variant, pero aun así me da error.

Para explicarme mejor es que picPacth, hace que ejecute el comando en la ruta donde lo tengo guardado y le asigne el nombre del textbox.

Private Sub Camara_Click()
Dim ArchivoIMG As String
Dim picPath As Variant
Dim RetVal As Variant
Dim base As String
Dim picName As String
picName = Me.FichaPaciente & ".jpg" 'Asigna nombre a la imagen
base = CurrentProject.Path & "\Tools\Imagenes\FotosPacientes\" 'Ruta del programa
picPath = base & picName 'Aqui le digo que ejecute el programa y le asigne el nombre que yo quiero
RetVal = Shell(base & "CommandCam.exe /filename """ & picPatch & """", vbHide)
ArchivoIMG = picPath
Imagen.Picture = LoadPicture(ArchivoIMG)
Me.Txt_Imagen = (ArchivoIMG)
Me.Foto = picName 'Aqui me registra el nombre asignada a la foto
End Sub

Espero allá sido claro en lo que quiero realizar... Muchas gracias...

Fíjate bien en los nombres, porque cuando defines la variable y le das valor la llamas picPath y cuando se la pasas a la aplicación pones picPatch, con una "c" que no pinta nada...

Amigo tenia razón, error mio de escritura... ¿pero ahora me arroja otro error que no puede abrir el archivo?

Yo no quiero que me habrá archivo, quiero que tome la foto, quede alojada en el cuadro Imagen del formulario y me deje el nombre asignado al textbox que le digo, y después presionar el botón guardar

Estuve navegando un poco más en esto por internet y llegue a la página donde explica el uso pero en Excel, no entendí nada para ser sincero (https://batchloaf.wordpress.com/2013/01/07/running-commandcam-from-excel-using-vba/)

Pero quiero rendirme, quiero ver que funcione... Gracias...

Hola... estuve probando unos comando y me toma la foto y la deja donde quiero y con el nombre que quiero, pero no la muestra en el cuadro Imagen, además intento colocar un comando que retarde el proceso y muestre un cronometro en un label pero no hace nada

No dices en qué línea te salta ese error, pero lo único que veo "raro" es cóm cargas la foto en el control imagen (usando LoadPicture)

Yo en Access cuando quiero poner una foto en un control imagen hago simplemente:

Me.ControlImagen.Picture=RutaFoto

Es decir, que yo cambiaría esto:

ArchivoIMG = picPath
Imagen.Picture = LoadPicture(ArchivoIMG)
Me.Txt_Imagen = (ArchivoIMG)

por esto otro:

Imagen.Picture = picPath
Me.Txt_Imagen = picPath

y además, eliminaría la variable ArchivoIMG, que no se usa para nada.

Muchas gracias Sveinbjorn El Rojo, me sirvió a la perfección el cambio indicado, pero me surgió otro problema... es que si quiero repetir el proceso con otro registro me genera error que no el registro de la imagen asociada al nombre que quiero darle, sin yo haber ejecutado el botón de tomar foto, al mensaje le digo finalizar y vuelvo al formulario, ejecuto el botón tomar foto y funciona bien. ¿Qué podría ser? ¿Debo limpiar algún temporal al salir o guardar el registro? ¿O cómo colocar un timer para retener el programa y darle tiempo que genere la imagen? En Excel tenia ese comando VBA para detener el proceso y entregue un mensaje que esta procesado y entrega la imagen sin problema.

*** Este es comando VBA que viene despues de ejecutar el programa
    For i = 0 To 5
        Aviso "Espere por favor..." & i
        Application.Wait (Now + TimeValue("00:00:01"))
    Next
Aviso "Listo!!!"
**** y este es el modulo asociado
Sub Aviso(msg As String)
    Form_Modifica_Registro_Paciente.Wait.Caption = msg
End Sub

Gracias por tu ayuda... y tus conocimientos...

No entiendo la mitad de lo que dices en tu mensaje, pero si lo que quieres es que no te salga ese error, puedes añadir un control de errores a tu procedimiento, haciendo que se ignore ese error o actuando sobre él como consideres oportuno. Hay mucha literatura sobre el tema del control de errores, por ejemplo, en la web de Neckkito, en el apartado manuales, puedes verlo en el curso VBA de Neckkito (capítulo 13) o en mi curso completo de Access (capítulo 7).

En cuanto a coger un código de Excel y aplicarlo tal cual a Access, es probable que no funcione, porque aunque son muy parecidos no son iguales y hay cosas que no funcionan en los dos programas.

Un código para crear un "retardo" en la ejecución de un código en Access (ejemplo de Neckkito), sería este:

Public Sub subPausa(tiempo As Byte) 'tiempo en segundos
Dim ahora As Date
Dim ahoraTiempo As Date
ahora = Time
ahoraTiempo = DateAdd("s", tiempo, ahora)
Do Until ahora >= ahoraTiempo
ahora = Time
Loop
End Sub

¡Gracias! por la ayuda  Sveinbjorn El Rojo... agregue un control de error y solo debo presionar 2 veces el botón tomar foto y me toma la imagen sin problemas en cada registro que necesito hacerlo. Muy agradecido por sus consejos y ayuda...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas