Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

Oracle: Insertar y extraer documentos en una tabla Oracle con Visual Basic 6
Visual Studio .NET


En este artículo os explicamos paso a paso, con capturas de pantalla, cómo insertar y extraer documentos de una tabla Oracle (con un campo RAW/BLOB). Para ello utilizaremos Visual Basic 6 y OLEDB.



Insertar y extraer documentos en una tabla Oracle con Visual Basic 6

Insertar y extraer documentos en una tabla Oracle con Visual Basic 6

Oracle incorpora un tipo de datos llamado BLOB que permite almacenar documentos de cualquier tipo (imágenes, excel, word, access, comprimidos, vídeos, música, etc). En principio admite cualquier tipo de documento y de cualquier tamaño. Para más información puedes visitar este artículo: Tipos de datos / Datatypes en Oracle. Aún sigue manteniendo el tipo de datos LONG RAW que está obsoleto, sustituido por BLOB. Las instrucciones que os mostramos a continuación admiten ambos tipos de datos: BLOB y LOB RAW.

Para poder insertar documentos en un campo BLOB de Oracle con Visual Basic necesitaremos una librería (dll) llamada SAFileMgr Module (SAFileMgr.dll), esta librería está disponible de forma gratuita en la web www.softartisans.com. Tras descargar este fichero, deberemos copiarlo a la carpeta del sistema (normalmente C:/Windows/System32) y registrarlo con el comando:

regsvr32 C:/Windows/System32/SAFileMgr.dll

De la siguiente forma: copiaremos el fichero SAFileMgr.dll a la carpeta System32 de Windows. Pulsaremos en el botón "Inicio", luego en "Ejecutar":

Introduciremos el comando:

%systemroot%/system32/SAFileMgr.dll

y pulsaremos "Aceptar":

Si el registro es correcto nos mostrará este mensaje:

Con el texto:

---------------------------
RegSvr32
---------------------------
DllRegisterServer en C:/Windows/System32/SAFileMgr.dll se realizó con éxito.
---------------------------
Aceptar
---------------------------

Tras copiar y registrar el fichero SAFileMgr.dll, también necesitaremos disponer de una base de datos Oracle activa (Instalar Oracle Database 10g en Windows XP), con una base de datos (Cómo crear una base de datos en Oracle 9 utilizando el asistente que incorpora) y una tabla con la siguiente estructura:

   CREATE TABLE documentos (
     titulo VARCHAR2 (100),
     rutadocumento VARCHAR2 (255),
     documento BLOB);

Podremos cambiar el nombre de la tabla y el nombre de los campos, también podremos utilizar una tabla existente. Ejecutando el script SQL anterior en la BD de Oracle creará la tabla "documentos" para realizar las pruebas oportunas. Para ejecutar el script podemos utilizar esta aplicación: AjpdSoft Administración Bases de Datos.

Tras tener la tabla creada con el campo BLOB, procederemos a abrir Visual Basic y a crear un nuevo proyecto para insertar y extraer documentos en Oracle. En la ventana de "Nuevo proyecto" seleccionaremos "EXE estándar" y pulsaremos "Abrir":

Para que la aplicación funcione correctamente deberemos agregar las referencias necesarias. Para ello pulsaremos en el menú "Proyecto " - "Referencias" de Visual Basic:

Seleccionaremos la referencia FileMgr 1.1:

Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero .dll copiado y registrado anteriormente:

C:/Windows/System32/SAFileMgr.dll

Seleccionaremos también Microsoft ActiveX Data Objects 2.6 Library:

Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero ubicado en:

C:/Archivos de programa/Archivos comunes/system/ado/msado26.tlb

A continuación, añadiremos al formulario todos los componentes que estimemos necesarios para realizar la aplicación (TextBox, Frame, Label, CommandButton, etc). En nuestro caso hemos optado por este diseño:

Os mostramos el código de cada uno de los botones del formulario:

  • Para el botón "Insertar documento":
Private Sub btInsertarDocumento_Click()
  Dim Conn As New ADODB.Connection
  Dim Rs As New ADODB.Recordset
  Dim FileMgr As New FileManager
    
  Dim SQL As String
          
  On Error GoTo cError
        
  ' Conxión mediante OLEDB
  Conn.Provider = "OraOLEDB.Oracle"
  Conn.Open txtServicio.Text, _
      txtUsuario.Text, txtContrasena.Text
    
  ' Ejecutamos una consulta SQL sobre la tabla
  ' para activar el recordset
  SQL = "Select * from " + txtTabla.Text + " where 1=2"
  Rs.Open SQL, Conn, 2, 3
    
  ' Añadimos un nuevo registro con los datos indicados
  Rs.AddNew
  Rs(txtCampoTitulo.Text).Value = txtDocumentoTitulo.Text
  Rs(txtCampoRutaDocumento.Text).Value = txtDocumento.Text
  ' Insertarmos el documento en el campo BLOB/RAW
  FileMgr.ExportToBlob txtDocumento.Text, Rs(txtCampoBLOB.Text)
        
  Rs.Update
        
  Rs.Close
  Conn.Close
    
  Set Conn = Nothing
    
  MsgBox "Documento insertado correctamente en " + _
     "la base de datos: " + vbCrLf + vbCrLf + _
      txtDocumento.Text, vbOKOnly + vbInformation
      
cSalir:
  Exit Sub
  
cError:
  MsgBox Err.Description
  GoTo cSalir
End Sub

  • Para el botón "Ejecutar":
Private Sub btEjecutar_Click()
  Dim Conn As New ADODB.Connection
  Dim Rs As New ADODB.Recordset
            
  On Error GoTo cError
  
  ' Conexión a Oracle mediatne OLEDB
  Conn.Provider = "OraOLEDB.Oracle"
  Conn.Open txtServicio.Text, _
      txtUsuario.Text, txtContrasena.Text
  
  ' Ejecutamos consulta SQL introducida por el usuario
  Rs.Open txtSQL.Text, Conn, 0, 1
  
  txtExtraerTitulo.Text = Rs(txtCampoTitulo.Text)
  txtDestino.Text = Rs(txtCampoRutaDocumento.Text)
  
  Rs.Close
  Conn.Close
    
  Set Conn = Nothing
    
  MsgBox "Consulta SQL ejecutada correctamente.", _
      vbOKOnly + vbInformation
      
cSalir:
  Exit Sub
  
cError:
  MsgBox Err.Description
  GoTo cSalir
End Sub

  • Para el botón "Ejecutar":
Private Sub btExtraer_Click()
  Dim Conn As New ADODB.Connection
  Dim Rs As New ADODB.Recordset
  Dim FileMgr As New FileManager
  Dim continuar As Boolean
            
  On Error GoTo cError
  
  ' Conexión a Oracle mediatne OLEDB
  Conn.Provider = "OraOLEDB.Oracle"
  Conn.Open txtServicio.Text, _
      txtUsuario.Text, txtContrasena.Text
  
  ' Ejecutamos consulta SQL introducida por el usuario
  Rs.Open txtSQL.Text, Conn, 0, 1
  
  ' Comprobamos si existe ya un fichero destino
  ' con el mismo nombre
  continuar = False
  If Dir(txtDestino.Text) <> "" Then
    continuar = MsgBox("Ya existe un documento " + _
        "con este nombre ¿desea reemplazarlo?", _
        vbYesNo + vbQuestion) = vbYes
  Else
    continuar = True
  End If
  
  ' Extraemos el documento del primer
  ' registro de la consulta SQL
  ' en el destino especificado por el usuario
  If continuar Then
    FileMgr.ImportFromBlob Rs(txtCampoBLOB.Text), txtDestino.Text
    MsgBox "Fichero extraído correctamente en: " _
        + vbCrLf + vbCrLf + _
        txtDestino.Text, vbOKOnly + vbInformation
  End If
            
  Rs.Close
  Conn.Close
    
  Set Conn = Nothing
      
cSalir:
  Exit Sub
  
cError:
  MsgBox Err.Description
  GoTo cSalir
End Sub

Algunas capturas de pantalla de la aplicación en funcionamiento:

  • Tras añadir los datos de conexión, seleccionar un documento a insertar y pulsar el botón "Insertar documento":

  • Tras añadir la consulta SQL para descargar un documento de la BD y pulsar el botón "Ejecutar":

  • Tras seleccionar el destino, la consulta SQL y pulsar el botón "Extraer documento":

Para realizar este artículo hemos utilizado:


Anuncios


Enviado el Viernes, 31 agosto a las 03:23:38 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A