5
USANDO EL ESCÁNER 1 ¿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 programación de aplicaciones (es decir, una API) que permite la comunicación con hardware de captura de imágenes. De todas maneras, si alguien tiene curiosidad por profundizar en el concepto de WIA aquí tiene una explicación bien completa. Sin embargo, hay que advertir, antes de lanzarnos al ejemplo, que por la propia sistemática que os comentaba hace algunos momentos nuestro “invento” funcionará siempre y cuando nuestro escáner 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 creación de lo que es en sí la aplicación. LA LIBRERÍA QUE SE NECESITA Para nuestro ejemplo vamos a necesitar una librería, que es la llamada “Microsoft Windows Image Acquisition Library 2.0”, que es la librería dinámica wiaaut.dll. Así pues lo primero que haremos será confirmar que la tenemos en nuestro ordenador. Lo comprobaremos a través del VBE, por lo que “mataremos dos pájaros 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 combinación de teclas ALT+F11. Eso nos abrirá el VBE. En el VBE nos vamos a Menú Herramientas Referencias..., y navegamos por las librerías disponibles. Si la encontramos (ojo, debemos encontrar la versión 2.0 de esa librería) 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 acompaña a este ejemplo tenéis también el archivo wiaaut.dll. Si no tenéis 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 botón 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 línea de comandos: regsrv32 wiaaut.dll 1 La BD de ejemplo os la podéis bajar aquí 1 Visítame en http://neckkito.siliconproject.com.ar

Usando Escaner

  • Upload
    vilken

  • View
    11

  • Download
    5

Embed Size (px)

DESCRIPTION

Usar escaner desde access

Citation preview

  • 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, dadoque todo el funcionamiento va a estar basado sobre unsistema denominado WIA (Windows Image Acquisition).Es este un modelo de controlador e interfaz deprogramacin de aplicaciones (es decir, una API) quepermite la comunicacin con hardware de captura deimgenes. De todas maneras, si alguien tiene curiosidadpor profundizar en el concepto de WIA aqu tiene unaexplicacin bien completa.

    Sin embargo, hay que advertir, antes de lanzarnos al ejemplo, que por la propia sistemticaque os comentaba hace algunos momentos nuestro invento funcionar siempre y cuandonuestro 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 realizarpreviamente a la creacin de lo que es en s la aplicacin.

    LA LIBRERA QUE SE NECESITAPara nuestro ejemplo vamos a necesitar una librera, que es la llamada Microsoft WindowsImage Acquisition Library 2.0, que es la librera dinmica wiaaut.dll. As pues lo primero queharemos ser confirmar que la tenemos en nuestro ordenador. Lo comprobaremos a travs delVBE, por lo que mataremos dos pjaros de un tiro: comprobaremos si la tenemos y, en casoafirmativo, ya la registraremos.

    Para ello abrimos nuestra base de datos y, una vez que est abierta, pulsamos la combinacinde teclas ALT+F11. Eso nos abrir el VBE.

    En el VBE nos vamos a Men Herramientas Referencias..., y navegamos por las librerasdisponibles. 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 tenemosregistrada.

    Qu pasa si no la tenemos?En la BD que acompaa a este ejemplo tenis tambin el archivo wiaaut.dll. Si no tenis esareferencia 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, dentrode la carpeta System32. Nos tiene que quedar algo as comoC:\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 decomandos:

    regsrv32 wiaaut.dll

    1 La BD de ejemplo os la podis bajar aqu

    1Vistame 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 parabuscar 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 detectarel escner, con lo que nos dir que no hay dispositivos que acepten esta sistemtica defuncionamiento.

    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 cmomanejar el cdigo para obtener respuesta del escner. Si tenemos las bases claras,tericamente, no deberamos tener ninguna complicacin a la hora de adaptarlo a otrassituaciones, 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 tambinuna carpeta llamada ImgScan donde van a parar todas las imgenes que vayamos aescanear.

    Aadir tambin que vamos a considerar que todas las imgenes tienen, por defecto, laextensin jpg.

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

  • NUESTRA TABLA Y NUESTRO FORMULARIOVamos a crearnos una tabla con los siguientes camposmnimos, tabla que llamaremos TDatos.

    Como utilizo un Access 2013, tened en cuenta que el campo texto corto es un campo textoen 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 llamaremoscmdAbreEscaner y cmdAbreDocumento, respectivamente2.

    En el evento Al hacer clic del primer botn vamos a generar el siguiente cdigo3:

    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 Subsol_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 SalidaEnd Sub

    2 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.

    3 Para generar cdigo debemos sacar las propiedades del control Pestaa Eventos, y nos situamos en la parte blanca a laderecha del evento que queremos programar. Veremos un pequeo botn de puntos suspensivos. Si hacemos clic sobre l nosaparecer una ventana que nos pedir qu operacin deseamos realizar. Le indicamos que queremos generar cdigo.

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

  • Si os fijis el cdigo hace una llamada a una funcin, que escreoRuta(). 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 nadams, ese cdigo nos quedar sobre el bloque de cdigo queacabamos 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 comandogeneramos 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 Subsol_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 SalidaEnd 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 unbotn como del otro requieren la construccin de la ruta (el primero para guardarlo, elsegundo para abrirlo), en lugar de repetir cdigo creando la ruta he separado esa parte en unafuncin 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 loseparramos tendramos que escribir lo mismo dos veces, con el aumento de dificultad delectura de cada uno de los cdigos, mientras que si cogemos la costumbre de sacar fuera loselementos que son reciclables el cdigo nos quedar mucho ms limpio y entendible (y, contoda probabilidad, ms fcil de depurar).

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

  • PARA FINALIZAR EL EJEMPLOEspero que todo lo explicado aqu os sea de utilidad. Pocoms que aadir.

    Un saludo, y...

    suerte!

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

    LA LIBRERA QUE SE NECESITAQu pasa si no la tenemos?QU PASA SI MI ESCNER NO ES COMPATIBLE CON WIA?

    Y YA AL EJEMPLO... DE QU VA LA COSA?NUESTRA TABLA Y NUESTRO FORMULARIOPARA FINALIZAR EL EJEMPLO