Usando Escaner

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

USANDO EL ESCNER1

A qu a nadie se le ocurre de qu va a ir este ejemplo...?


Je, je...
Sin embargo, este es un ejemplo un poco especial, dado
que todo el funcionamiento va a estar basado sobre un
sistema denominado WIA (Windows Image Acquisition).
Es este un modelo de controlador e interfaz de
programacin de aplicaciones (es decir, una API) que
permite la comunicacin con hardware de captura de
imgenes. De todas maneras, si alguien tiene curiosidad
por profundizar en el concepto de WIA aqu tiene una
explicacin bien completa.
Sin embargo, hay que advertir, antes de lanzarnos al ejemplo, que por la propia sistemtica
que os comentaba hace algunos momentos nuestro invento funcionar siempre y cuando
nuestro escner sea compatible con WIA. Si no lo es... pues no podremos utilizarlo.
Por eso, antes de entrar en materia, voy a explicaros qu comprobaciones vamos a realizar
previamente a la creacin de lo que es en s la aplicacin.

LA LIBRERA QUE SE NECESITA


Para nuestro ejemplo vamos a necesitar una librera, que es la llamada Microsoft Windows
Image Acquisition Library 2.0, que es la librera dinmica wiaaut.dll. As pues lo primero que
haremos ser confirmar que la tenemos en nuestro ordenador. Lo comprobaremos a travs del
VBE, por lo que mataremos dos pjaros de un tiro: comprobaremos si la tenemos y, en caso
afirmativo, ya la registraremos.
Para ello abrimos nuestra base de datos y, una vez que est abierta, pulsamos la combinacin
de teclas ALT+F11. Eso nos abrir el VBE.
En el VBE nos vamos a Men Herramientas Referencias..., y navegamos por las libreras
disponibles. Si la encontramos (ojo, debemos encontrar la versin 2.0 de esa librera)
marcamos su check y aceptamos. Eso significa que s la tenemos y que ya la tenemos
registrada.

Qu pasa si no la tenemos?
En la BD que acompaa a este ejemplo tenis tambin el archivo wiaaut.dll. Si no tenis esa
referencia hay que incorporarla a nuestro sistema. Lo que tenemos que hacer es lo siguiente:
Copiamos esa dll en nuestro PC, en la ruta donde tengamos el directorio de Windows, dentro
de
la
carpeta
System32.
Nos
tiene
que
quedar
algo
as
como
C:\Windows\System32\wiaaut.dll.
Nos vamos al botn de inicio de nuestro PC y ejecutamos una ventana de MS-DOS
(ejecutamos un cmd, vamos). Nos situamos en la ruta del System32 y escribimos esta lnea de
comandos:
regsrv32 wiaaut.dll
1

La BD de ejemplo os la podis bajar aqu

Vistame en http://neckkito.siliconproject.com.ar

Es decir, una cosa as:

Y una vez ejecutado nos debe aparecer un mensaje as:

Una vez hecho esto volvemos a realizar el proceso desde el principio de este apartado para
buscar esa referencia en el VBE y registrarla.

QU PASA SI MI ESCNER NO ES COMPATIBLE CON WIA?


Pues si nuestro escner no es compatible con WIA, sencillamente, el cdigo no podr detectar
el escner, con lo que nos dir que no hay dispositivos que acepten esta sistemtica de
funcionamiento.
En ese caso este ejemplo no os servir
El error que recibirais en este supuesto es el siguiente:

Y YA AL EJEMPLO... DE QU VA LA COSA?
El ejemplo es un ejemplo simplificado, en el sentido de que lo que interesa es ver cmo
manejar el cdigo para obtener respuesta del escner. Si tenemos las bases claras,
tericamente, no deberamos tener ninguna complicacin a la hora de adaptarlo a otras
situaciones, siempre y cuando tengamos unos conocimientos mnimos de Access y VBA.
La idea es tener una tabla que nos recoja simplemente el nombre del archivo de imagen.
Adems, vamos a suponer que, en la carpeta donde tenemos la base de datos, hay tambin
una carpeta llamada ImgScan donde van a parar todas las imgenes que vayamos a
escanear.
Aadir tambin que vamos a considerar que todas las imgenes tienen, por defecto, la
extensin jpg.

Vistame en http://neckkito.siliconproject.com.ar

NUESTRA TABLA Y NUESTRO FORMULARIO


Vamos a crearnos una tabla con los siguientes campos
mnimos, tabla que llamaremos TDatos.

Como utilizo un Access 2013, tened en cuenta que el campo texto corto es un campo texto
en versiones anteriores, y que texto largo es un campo memo en versiones anteriores.
Sobre esta tabla nos creamos un formulario que llamaremos FDatos.
Junto al campo [Documento] nos creamos dos botones de comando que llamaremos
cmdAbreEscaner y cmdAbreDocumento, respectivamente 2.
En el evento Al hacer clic del primer botn vamos a generar el siguiente cdigo 3:

Private Sub cmdAbreEscaner_Click()


On Error GoTo sol_err
'Declaramos las variables
Dim elDoc As String
Dim laRuta As String
Dim elEscaner As WIA.CommonDialog
Dim laImagen As WIA.ImageFile
'Miramos si se ha escrito nombre para el documento. Si no avisamos y salimos
elDoc = Nz(Me.Documento.Value, "")
If elDoc = "" Then
MsgBox "Debe indicar un nombre de documento", vbExclamation, "AVISO"
Exit Sub
End If
'Llamamos a la construccin de la ruta
laRuta = creoRuta(elDoc)
'Creamos el objeto escner (el control del escner)
Set elEscaner = New WIA.CommonDialog
'Creamos el objeto imagen (escaneada)
Set laImagen = elEscaner.ShowAcquireImage
'Guardamos la imagen en nuestra ruta
laImagen.SaveFile (laRuta)
'Eliminamos las instancias de los objetos
Set laImagen = Nothing
Set elEscaner = Nothing
MsgBox "Documento escaneado correctamente", vbInformation, "OK"
Salida:
Exit Sub
sol_err:
If Err.Number = 91 Then 'Se cancela el escaneo
MsgBox "Se ha cancelado el escaneo", vbInformation, "CANCELADO"
Else
MsgBox "Se ha producido el error " & Err.Number & " - " & Err.Description, _
vbCritical, "ERROR DE ESCNER"
End If
Resume Salida
End Sub
2
3

Para asignar un nombre a un control lo que debemos hacer es sacar las propiedades de ese control e irnos a la Pestaa Otras
Nombre. Ah escribimos el nombre que queramos.
Para generar cdigo debemos sacar las propiedades del control Pestaa Eventos, y nos situamos en la parte blanca a la
derecha del evento que queremos programar. Veremos un pequeo botn de puntos suspensivos. Si hacemos clic sobre l nos
aparecer una ventana que nos pedir qu operacin deseamos realizar. Le indicamos que queremos generar cdigo.

Vistame en http://neckkito.siliconproject.com.ar


Si os fijis el cdigo hace una llamada a una funcin, que es
creoRuta(). En el mdulo asociado a nuestro formulario,
bajo la/s lnea/s Option, vamos a definir esa funcin,
escribiendo lo siguiente (en teora, si no tenemos nada
ms, ese cdigo nos quedar sobre el bloque de cdigo que
acabamos de escribir para cmdAbreEscaner.

Private Function creoRuta(nomDoc As String) As String


creoRuta = Application.CurrentProject.Path & "\ImgScan\" & nomDoc & ".jpg"
End Function

Ahora slo queda la programacin del botn para abrir la imagen que ya tengamos escaneada,
cdigo bastante simple. As, en el evento Al hacer clic de nuestro segundo botn de comando
generamos el siguiente cdigo:

Private Sub cmdAbreDocumento_Click()


On Error GoTo sol_err
Dim elDoc As String
'Cogemos el nombre del documento
elDoc = Nz(Me.Documento.Value, "")
'Si no hay valor avisamos y salimos
If elDoc = "" Then
MsgBox "No hay documento que abrir", vbExclamation, "AVISO"
Exit Sub
End If
'Abrimos la imagen
Application.FollowHyperlink creoRuta(elDoc)
Salida:
Exit Sub
sol_err:
If Err.Number = 490 Then 'No existe el archivo en ImgScan
MsgBox "El archivo que intenta abrir no existe", vbCritical, "ERROR"
Else
MsgBox "Se ha producido el error " & Err.Number & " - " & Err.Description, _
vbCritical, "ERROR"
End If
Resume Salida
End Sub

Creo que, dado que todos los cdigos estn comentados, no hay mucho ms que aadir.
Simplemente remarcaros, por si no os habis dado cuenta, que dado que tanto el cdigo de un
botn como del otro requieren la construccin de la ruta (el primero para guardarlo, el
segundo para abrirlo), en lugar de repetir cdigo creando la ruta he separado esa parte en una
funcin a la cual ambos procedimientos hacen la llamada.
En este caso la creacin de la ruta no lleva aparejada mayor dificultad, pero imaginaos que,
hipotticamente, la creacin de la ruta requiriera muchas lneas de cdigo. Si no lo
separramos tendramos que escribir lo mismo dos veces, con el aumento de dificultad de
lectura de cada uno de los cdigos, mientras que si cogemos la costumbre de sacar fuera los
elementos que son reciclables el cdigo nos quedar mucho ms limpio y entendible (y, con
toda probabilidad, ms fcil de depurar).

Vistame en http://neckkito.siliconproject.com.ar

PARA FINALIZAR EL EJEMPLO


Espero que todo lo explicado aqu os sea de utilidad. Poco
ms que aadir.
Un saludo, y...
suerte!

Vistame en http://neckkito.siliconproject.com.ar

También podría gustarte