|
Oracle: Insertar y extraer documentos en una tabla Oracle con Visual Basic 6
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 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:
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:
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
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
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:
Para realizar este artículo hemos utilizado:
Anuncios
Enviado el Viernes, 31 agosto a las 03:23:38 por ajpdsoft
|
|