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
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Problema al extraer datos campo RAW CLOB de Oracle - Delphi
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Problema al extraer datos campo RAW CLOB de Oracle - Delphi

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Problema al extraer datos campo RAW CLOB de Oracle - Delphi Responder citando

En una aplicación hecha en Delphi que accede a bases de datos Oracle mediante ODBC utilizo un procedimiento que extrae los datos de un campo de tipo LONG RAW, en concreto son documentos de Word guardados en la tabla de Oracle.

He detectado que algunos documentos los extrae correctamente y otros no. Tras varias averiguaciones he visto que no extrae documentos de más de 32 KB, todos los que tienen más tamaño los extrae pero son ilegibles y nunca de más de 32 KB.

La estructura de la tabla que utilizo:

Código:

create table facturas
(
  codigo NUMBER(22) PRIMARY KEY NOT NULL,
  fecha DATE,
  cliente VARCHAR2(100) NOT NULL,
  rutafichero VARCHAR2(300),
  datosfichero LONG RAW
)



El procedimiento Delphi que utilizo para extraer el contenido del campo "datosfichero" es:

Código:

  ...

  if tcConsulta.Active then
  begin
    if tcConsulta.FieldByName(txtNombreCampoCLOB.Text).IsBlob then
      TBlobField (tcConsulta.FieldByName(
          txtNombreCampoCLOB.Text)).SaveToFile(
          txtRuta.text + '\' +
          tcConsulta.fieldbyname(txtNombreCampoDocumento.Text).AsString)
    else
      MessageDlg('El campo [' + txtNombreCampoCLOB.Text +
          '] no es de tipo CLOB, RAW.', mtWarning, [mbok], 0);
  end
  else
    MessageDlg('No hay datos para extraer. Ejecute una consulta SQL ' +
        'antes de extraer el documento.', mtInformation, [mbok], 0);
  ...


tcConsulta -> TQuery.

¿es correcta la utilización de "TBlobField"?
MensajePublicado:
Jue Abr 26, 2007 11:39 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: He probado con CLOB y tampoco va bien Responder citando

Mirando por ahí, he visto que Oracle recomienda que no se utilice el tipo de datos LONG RAW, que está en desuso, en su defecto dice que se utilice CLOB, pero lo he probado con este tipo de datos y me ocurre lo mismo, sólo extrae 32 KB de los ficheros que ocupan más, los que ocupan menos los guarda bien.
MensajePublicado:
Jue Abr 26, 2007 11:40 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: He mirado la configuración del Driver ODBC que utilizo Responder citando

También he cambiado todas las opciones (para ir probando una a una) del ODBC que utilizo. Es Oracle 9 y he probado con:

* Enable result sets.
* Enable query timeout.
* Read-Only Connection.
* Enable closing cursors.
* SQLGetData extensions.
* Batch autocommit mode.
* Numeric settings.
* Fetch buffer size.
* Enable LOBs.
* Etc.

No he conseguido que funcione correctamente con ninguna de las opciones.
MensajePublicado:
Jue Abr 26, 2007 11:49 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: He mirado la configuración del Driver ODBC que utilizo Responder citando



Anuncios



varios escribió:
También he cambiado todas las opciones (para ir probando una a una) del ODBC que utilizo. Es Oracle 9 y he probado con:

* Enable result sets.
* Enable query timeout.
* Read-Only Connection.
* Enable closing cursors.
* SQLGetData extensions.
* Batch autocommit mode.
* Numeric settings.
* Fetch buffer size.
* Enable LOBs.
* Etc.

No he conseguido que funcione correctamente con ninguna de las opciones.



Teniendo en cuenta que utilizas ODBC y Delphi, estás utilizando, también, el BDE (Borland Database Engine) que hace de "puente" entre ambos. Puedes ver un manual en este artículo:


Con lo cual la configuración del ODBC afecta, por supuesto, pero no es la única. El problema que te ocurre se soluciona fácilmente, si accedes a la configuración del BDE ("Inicio" - "Configuración" - "Panel de control" - "BDE Administrator"). Dentro del BDE Administrator verás dos pestañas / solapas: "Databases" y "Configuration". Si pulsas en "Databases" mostrará todos los motores de Base de Datos disponibles y, también, los drivers ODBC, entre ellos estará el que tú utilices para tu aplicación. Lo seleccionas y a la derecha te aparecerá una ventana con una serie de parámetros de configuración. El que nos interesa y el que te está limitando el tamaño, cuando intentas sacarlo de la base de datos, del campo de tipo LONG RAW o CLOB (TBlobField) es [BLOB SIZE] que tendrá el valor "32". La descripción de este parámetro (por el BDE Administrator) es: Maximum allowable blob size (in kilobytes) for canned queries.

Cuando cierres el BDE Administrator te preguntará si quieres guardar los cambios, con un mensaje como este:

Save all edits to BDE Administrator C:\Archivos de programa\Common Files\Borland Shared\BDE\IDAPI32.CFG?

Con lo cual, con ampliar el valor de este parámetro será suficiente para que te funcione la aplicación, pues el código que utilizas para sacar el documento con TBlobField es correcto. Deberás ampliarlo al mismo valor o mayor que el documento más grande que tengas en la tabla.
MensajePublicado:
Jue Abr 26, 2007 12:02 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A