Estoy desarrollando una aplicación en vb6 con SGBD oracle10g para ficheros bynarios (blob). Con este código fuente da de alta, consulta y escanea (con EZtwain), pero el problema surge al intentar eliminar los registros pues el ejecutar el código muestra un error. Aquí adjunto el código y los comentarios:
'=====================================================================================
'=====================================================================================
'=====================================================================================
'=====================================================================================
'===============SE EJECUTA ANTES DE QUE EL FORMULARIO SE CARGUE=======================
Private Sub Form_Load()
Dim Conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim FileMgr As New FileManager
Dim doc As Recordset
Dim SQL As String
'Usa el conector OLEDB
Conn.Provider = "OraOLEDB.Oracle"
Conn.Open "fct", "sandra", "oracle"
'Lee todos los datos de la tabla
SQL = "Select * from blobtest"
Rs.Open SQL, Conn, 0, 1
'Vuelca todos los registros en los combos
Rs.MoveFirst
Do While Not Rs.EOF
cbid.AddItem Rs("id_doc")
Rs.MoveNext
Loop
Rs.MoveFirst
Do While Not Rs.EOF
cbfecha.AddItem Rs("fecha")
Rs.MoveNext
Loop
Rs.MoveFirst
Do While Not Rs.EOF
cbtipo.AddItem Rs("t_doc")
Rs.MoveNext
Loop
Rs.MoveFirst
Do While Not Rs.EOF
cbdesc.AddItem Rs("desc_doc")
Rs.MoveNext
Loop
'Cierra la conexión a la base de datos y a la tabla
Rs.Close
Conn.Close
Set Conn = Nothing
End Sub
'=====================================================================================
'=====================================================================================
'=====================================================================================
'=====================================================================================
'Código generado por la aplicación EZtwain, sirve para controlar las acciones de un escaner
'En este caso el escaner es un flatbed, pero este software se usará para un escaner ADF
'En ambos caso se hará para documentación multipágina.
Private Sub Escanear_Click()
Dim nResult As Long, nRes2 As Long
nResult = TWAIN_OpenDefaultSource()
If nResult = 1 Then
'variable nResult almacena el dato de tipo *.pdf
TWAIN_SetMultiTransfer (1)
TWAIN_SetHideUI (1)
TWAIN_SetUnits (TWUN_INCHES)
TWAIN_SetResolution (200)
' el escaner tendrá una resolucioón de 200
TWAIN_SelectFeeder (0)
Call TWAIN_ResetImageLayout
TWAIN_SetMultipageFormat (MULTIPAGE_PDF) ' se indica que el documento es multipágina
nResult = TWAIN_BeginMultipageFile("C:\Documents and Settings\Administrador\Escritorio\ESCANER3\prueba1.pdf")
'ruta en la que se almacena el documento vinculado
If nResult = 0 Then
Do
Dim hdib As Long
hdib = TWAIN_Acquire(Form1.hwnd)
Call TWAIN_DisableSource
If (hdib = 0) Then
Exit Do
End If
nResult = TWAIN_DibWritePage(hdib)
If nResult <> 0 Then
Exit Do
End If
If MsgBox("Scan another page?", vbYesNo + vbQuestion) <> vbYes Then
Exit Do
End If
Loop
nRes2 = TWAIN_EndMultipageFile()
If nResult = 0 Then nResult = nRes2
End If
TWAIN_SetMultiTransfer (0)
TWAIN_SetHideUI (0)
Call TWAIN_CloseSource
If nResult = 0 Then
Call MsgBox("Scan completed and saved to file.", vbOKOnly + vbInformation)
Else
Call MsgBox("Scan failed with result code " + Str(nResult), vbOKOnly + vbExclamation)
End If
End If
End Sub
'=====================================================================================
'=====================================================================================
'=====================================================================================
'=====================================================================================
'===============CONSULTAR Y VOLCAR LOS DATOS DE UN ÚNICO REGISTRO=====================
Private Sub consultar_Click()
Dim Conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim FileMgr As New FileManager
Dim SQL As String
Dim DocTitle As String
Dim DocDesc As String
'Conexión creada con OLEDB
Conn.Provider = "OraOLEDB.Oracle"
Conn.Open "fct", "sandra", "oracle"
'Lectura de todos los datos de la tabla
SQL = "Select * from blobtest"
Rs.Open SQL, Conn, 0, 1
'Se coloca en el primer registro de la BD y los recorre todos para volcar el registro selecionado por el usuario
Rs.MoveFirst
Do While Not Rs.EOF
If cbid.Text = Rs("id_doc") Then
txtfecha.Text = Rs("fecha")
txttipo.Text = Rs("t_doc")
txtdesc.Text = Rs("desc_doc")
txtid.Text = Rs("id_doc")
FileMgr.ImportFromBlob Rs("b_doc"), "C:\Documents and Settings\Administrador\Escritorio\ESCANER3\prueba1.pdf"
End If
Rs.MoveNext
Loop
'Cerrar la conexión a la BD y a la tabla
Rs.Close
Conn.Close
Set Conn = Nothing
MsgBox "Volcado realizado correctamente"
End Sub
'=====================================================================================
'=====================================================================================
'=====================================================================================
'=====================================================================================
'==============================DAR DE ALTA============================================
Private Sub añadir_Click()
Dim Conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim FileMgr As New FileManager
Dim doc As Recordset
Dim SQL As String
'Crear y abrir conexión con OLEDB
Conn.Provider = "OraOLEDB.Oracle"
Conn.Open "fct", "sandra", "oracle"
'Abrir la tabla blobtest
SQL = "Select * from blobtest where 1=2"
Rs.Open SQL, Conn, 2, 3
'Añadir un nuevo registro a la tabla blobtest
Rs.AddNew
Rs("id_doc").Value = "ID_" & (Rs.RecordCount + 1)
Rs("t_doc").Value = "Tipo_" & (Rs.RecordCount + 1)
Rs("desc_doc").Value = "Descripción del documento" & (Rs.RecordCount + 1)
Rs("fecha").Value = Now
'Dar de alta el campo blob en la base de datos
FileMgr.ExportToBlob "C:\Documents and Settings\Administrador\Escritorio\ESCANER3\prueba1.pdf", Rs("b_doc")
Rs.Update
'Cerrar la conexión y la tabla de la base de datos FCT(SID)
Rs.Close
Conn.Close
Set Conn = Nothing
MsgBox "Alta realizada correctamente"
End Sub
'=====================================================================================
'=====================================================================================
'=====================================================================================
'=====================================================================================
'===============Elimina los registros de la base de datos=============================
Private Sub eliminar_Click()
Dim Conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim FileMgr As New FileManager
Dim doc As Recordset
Dim SQL As String
'Conexión creada con OLEDB
Conn.Provider = "OraOLEDB.Oracle"
Conn.Open "orcl", "system", "oracle"
'Lectura de todos los datos de la tabla
SQL = "Select * from blobtest"
Rs.Open SQL, Conn, 0, 1
'Se coloca en el primer registro de la BD y los recorre todos para volcar el registro selecionado por el usuario
Rs.MoveFirst
Do While Not Rs.EOF
If cbid.Text = Rs("id_doc") Then
txtfecha.Text = Rs("fecha")
txttipo.Text = Rs("t_doc")
txtdesc.Text = Rs("desc_doc")
txtid.Text = Rs("id_doc")
FileMgr.ImportFromBlob Rs("b_doc"), "C:\Documents and Settings\Administrador\Escritorio\ESCANER3\prueba1.pdf"
Rs.Delete
Error aquí End If
Rs.MoveNext
Loop
'Cerrar la conexión a la BD y a la tabla
Rs.Close
Conn.Close
Set Conn = Nothing
MsgBox "Se han eliminado correctamente los datos"
End Sub
'=====================================================================================
'=====================================================================================
'=====================================================================================
'=====================================================================================
'==================================Salir del formulario===============================
Private Sub salir_Click()
Unload Me
End Sub
Agradecería cualquier posible solución. Gracias por anticipado.