Escaner y Objeto OLE
Publicado por César Díaz (1 intervención) el 15/12/2006 00:47:48
En estas fechas que tengan una feliz navidad a todos, veran, me dieron un código en acces, bueno baje una aplicación en access que su función es escanear cualquier imagen en el escaner y guardala en una dirección predeterminada, bueno ya se como hacer la función para que escanee, lo que quiero es que me ayuden a que en ver de guardar dicha imagen mejor que la pase a un objeto ole dentro de una tabla en access, a continuación coloco el código para que lo puedan examinar, esta aplicación consta de dos cuadros de textos y un botón de comando, vuelvo a repetir, lo que quiero es que en ver de guardar la imagen un lugar predeterminado, quiero que pase dicha imagen escaneada a un objeto ole. le he dado vuelta al código y siento que me estoy volviendo loco, espero que me puedana ayudar.
Option Compare Database
Option Explicit
Dim CommonDialog1 As Object
Dim img As Object, Imagen As Object 'As Image
Dim IP, IP1 'As New ImageProcess
Dim PrimeraHoja As Boolean, NumeroHojas As Integer
Dim gl_double As Double, gl_cadena As String, gl_codigo As String
Const wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"
Private Sub Comando23_Click()
Call Proceso_Escaner
End Sub
Private Sub Form_Open(Cancel As Integer)
'* ponemos valores a capón para probar, en un proceso las variables globales gl_cadena y gl_codigo contendrán
'* la ruta donde guardamos los archivos y el nombre del archivo a escanear
gl_cadena = CurrentProject.Path & "\"
gl_codigo = "prueba.tif"
Me.RutaDocumentoEscanear = gl_cadena
Me.NombreDocumentoEscanear = gl_codigo
'Call Proceso_Escaner ----------- esto es para lanzarlo automaticamente desde otros procesos
End Sub
Private Sub Proceso_Escaner()
'* creamos el objeto escaner y la imagen contenedora
Set CommonDialog1 = CreateObject("WIA.CommonDialog")
Set Imagen = CreateObject("WIA.imagefile")
'*
On Error GoTo Err_Escanear_Click
EtiquetaProceso:
'* Lo primero nos aseguramos que no exista la imagen
Call Proceso_Borrar_Fichero
'* capturamos imagen
Set img = CommonDialog1.ShowAcquireImage
'* la convertimos a TIF
If img.FormatID <> wiaFormatTIFF Then
Set IP = CreateObject("Wia.ImageProcess")
IP.Filters.Add IP.FilterInfos("Convert").FilterID
IP.Filters(1).Properties("FormatID").Value = wiaFormatTIFF
Set img = IP.Apply(img)
Set IP = Nothing
End If
'* si es la primera hoja la asignamos a la imagen contenedora
If PrimeraHoja = False Then
PrimeraHoja = True
Set Imagen = img
NumeroHojas = 1 'contador hojas, para el control de tamaño
Else
'* si es a partir de la segunda añadimos la hoja escaneada a la anterior
Set IP1 = CreateObject("Wia.ImageProcess")
IP1.Filters.Add IP1.FilterInfos("Frame").FilterID
Set IP1.Filters(IP1.Filters.Count).Properties("ImageFile") = img
IP1.Filters.Add IP1.FilterInfos("Convert").FilterID
IP1.Filters(IP1.Filters.Count).Properties("FormatID") = wiaFormatTIFF
Set Imagen = IP1.Apply(Imagen)
Set IP1 = Nothing
NumeroHojas = NumeroHojas + 1
End If
'* repetimos ???
If MsgBox("¿ Desea escanear más páginas ?", vbQuestion + vbYesNo + vbDefaultButton2, Me.Caption) = vbYes Then
GoTo EtiquetaProceso
End If
'** Salvamos el fichero
Imagen.SaveFile Me.RutaDocumentoEscanear & Me.NombreDocumentoEscanear
'** Comprobamos el tamaño, para evitar los errores de seleccion. Si es menor de 100 Kb pasa, si es mayor preguntamos
gl_double = TamañoArchivo(Me.RutaDocumentoEscanear & Me.NombreDocumentoEscanear)
If gl_double > NumeroHojas * 100 Then
If MsgBox("El archivo tiene " & gl_double & " Kb" & vbCrLf & vbCrLf & "¿ Volvemos a escanear ?", vbQuestion + vbYesNo + vbDefaultButton1, "El chino dice...") = vbYes Then
GoTo EtiquetaProceso
End If
End If
'* anulamos objetos y salimos
Etiqueta_Salir:
Set Imagen = Nothing
Set CommonDialog1 = Nothing
DoCmd.Close acForm, Me.Name
Exit Sub
Err_Escanear_Click:
If Err.Number = 91 Then 'El usuario cancela la acción
Resume Etiqueta_Salir
Else
MsgBox "Error " & Err.Number & ": " & Err.Description
End If
End Sub
Private Sub Proceso_Borrar_Fichero()
'** borramos el archivo (por siaca)
On Error Resume Next
Kill Me.RutaDocumentoEscanear & Me.NombreDocumentoEscanear
On Error GoTo 0
End Sub
Public Function TamañoArchivo(strRuta As String) As Single
Dim fso As Object, Archivo As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'* comprobamos que el archivo exista, si no existe devolvemos 0
If Len(Dir(strRuta)) > 0 Then
Set Archivo = fso.GetFile(strRuta)
'* devolvemos el tamaño en Kb
TamañoArchivo = Round(Archivo.Size / 1024, "0")
Else
TamañoArchivo = 0
End If
Set Archivo = Nothing
Set fso = Nothing
End Function
estare esperando su ayuda gracias. feliz navidad.
Option Compare Database
Option Explicit
Dim CommonDialog1 As Object
Dim img As Object, Imagen As Object 'As Image
Dim IP, IP1 'As New ImageProcess
Dim PrimeraHoja As Boolean, NumeroHojas As Integer
Dim gl_double As Double, gl_cadena As String, gl_codigo As String
Const wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"
Private Sub Comando23_Click()
Call Proceso_Escaner
End Sub
Private Sub Form_Open(Cancel As Integer)
'* ponemos valores a capón para probar, en un proceso las variables globales gl_cadena y gl_codigo contendrán
'* la ruta donde guardamos los archivos y el nombre del archivo a escanear
gl_cadena = CurrentProject.Path & "\"
gl_codigo = "prueba.tif"
Me.RutaDocumentoEscanear = gl_cadena
Me.NombreDocumentoEscanear = gl_codigo
'Call Proceso_Escaner ----------- esto es para lanzarlo automaticamente desde otros procesos
End Sub
Private Sub Proceso_Escaner()
'* creamos el objeto escaner y la imagen contenedora
Set CommonDialog1 = CreateObject("WIA.CommonDialog")
Set Imagen = CreateObject("WIA.imagefile")
'*
On Error GoTo Err_Escanear_Click
EtiquetaProceso:
'* Lo primero nos aseguramos que no exista la imagen
Call Proceso_Borrar_Fichero
'* capturamos imagen
Set img = CommonDialog1.ShowAcquireImage
'* la convertimos a TIF
If img.FormatID <> wiaFormatTIFF Then
Set IP = CreateObject("Wia.ImageProcess")
IP.Filters.Add IP.FilterInfos("Convert").FilterID
IP.Filters(1).Properties("FormatID").Value = wiaFormatTIFF
Set img = IP.Apply(img)
Set IP = Nothing
End If
'* si es la primera hoja la asignamos a la imagen contenedora
If PrimeraHoja = False Then
PrimeraHoja = True
Set Imagen = img
NumeroHojas = 1 'contador hojas, para el control de tamaño
Else
'* si es a partir de la segunda añadimos la hoja escaneada a la anterior
Set IP1 = CreateObject("Wia.ImageProcess")
IP1.Filters.Add IP1.FilterInfos("Frame").FilterID
Set IP1.Filters(IP1.Filters.Count).Properties("ImageFile") = img
IP1.Filters.Add IP1.FilterInfos("Convert").FilterID
IP1.Filters(IP1.Filters.Count).Properties("FormatID") = wiaFormatTIFF
Set Imagen = IP1.Apply(Imagen)
Set IP1 = Nothing
NumeroHojas = NumeroHojas + 1
End If
'* repetimos ???
If MsgBox("¿ Desea escanear más páginas ?", vbQuestion + vbYesNo + vbDefaultButton2, Me.Caption) = vbYes Then
GoTo EtiquetaProceso
End If
'** Salvamos el fichero
Imagen.SaveFile Me.RutaDocumentoEscanear & Me.NombreDocumentoEscanear
'** Comprobamos el tamaño, para evitar los errores de seleccion. Si es menor de 100 Kb pasa, si es mayor preguntamos
gl_double = TamañoArchivo(Me.RutaDocumentoEscanear & Me.NombreDocumentoEscanear)
If gl_double > NumeroHojas * 100 Then
If MsgBox("El archivo tiene " & gl_double & " Kb" & vbCrLf & vbCrLf & "¿ Volvemos a escanear ?", vbQuestion + vbYesNo + vbDefaultButton1, "El chino dice...") = vbYes Then
GoTo EtiquetaProceso
End If
End If
'* anulamos objetos y salimos
Etiqueta_Salir:
Set Imagen = Nothing
Set CommonDialog1 = Nothing
DoCmd.Close acForm, Me.Name
Exit Sub
Err_Escanear_Click:
If Err.Number = 91 Then 'El usuario cancela la acción
Resume Etiqueta_Salir
Else
MsgBox "Error " & Err.Number & ": " & Err.Description
End If
End Sub
Private Sub Proceso_Borrar_Fichero()
'** borramos el archivo (por siaca)
On Error Resume Next
Kill Me.RutaDocumentoEscanear & Me.NombreDocumentoEscanear
On Error GoTo 0
End Sub
Public Function TamañoArchivo(strRuta As String) As Single
Dim fso As Object, Archivo As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'* comprobamos que el archivo exista, si no existe devolvemos 0
If Len(Dir(strRuta)) > 0 Then
Set Archivo = fso.GetFile(strRuta)
'* devolvemos el tamaño en Kb
TamañoArchivo = Round(Archivo.Size / 1024, "0")
Else
TamañoArchivo = 0
End If
Set Archivo = Nothing
Set fso = Nothing
End Function
estare esperando su ayuda gracias. feliz navidad.
Valora esta pregunta


0