Ir al contenido


Foto

[TRUCO DELPHI] Determinar el tamaño de un Campo Blob en una Tabla.


  • Por favor identifícate para responder
6 respuestas en este tema

#1 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 29 agosto 2016 - 07:50

[TRUCO DELPHI] Determinar el tamaño de un Campo Blob en una Tabla.


delphi
  1. Function GetBlobSize(Field: TBlobField): Longint;
  2. begin
  3. with TBlobStream.Create(Field, bmRead) do
  4. try
  5. Result := Seek(0, 2);
  6. finally
  7. Free;
  8. end;
  9. end;

Ejemplo de uso:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. Edit1.Text := IntToStr(GetBlobSize(Notes));
  4. end;

Saludos!


  • 2

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 30 agosto 2016 - 05:37

Tengo mi duda... ¿Eso funciona para todo tipo de BLOB e indepentemente del motor de base de datos?

Porque creo que cada motor maneja los BLOB a su manera, como así también dependerá de lo que se pase al BLOB... No es lo mismo que al BLOB se incorpore una imagen, que un archivo de texto.

 

Esto lo pregunto porque se me hace que no necesariamente en los 2 primeros bytes esté almacenado el tamaño del archivo.

 

Saludos,


  • 0

#3 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 30 agosto 2016 - 05:55

Hola, @Delphius

 

Pienso que habra que probar con cada Gestor, en dado caso no funcione como se espera, debera crearse


delphi
  1. Function GetBlobSize2

hasta


delphi
  1. Function GetBlobSizeN

hasta tener la solucion... ;)

 

Saludos


  • 1

#4 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 25 noviembre 2016 - 03:32

Esta es una forma de obtenerla para SDAC


sql
  1. SELECT nombrecampo, datalength(BLOB) AS total_size FROM dbo.tutabla;

Saludos!


  • 2

#5 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 noviembre 2016 - 05:23

No es mas practico usar el metodo TField.DataSize

 

Note: For TBlobField objects, DataSize returns the size of the blob object, if it can be determined.


Editado por Agustin Ortu, 25 noviembre 2016 - 05:24 .

  • 1

#6 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 28 noviembre 2016 - 02:12

Hola, @Agustin Ortu. 

 

Por alguna razon la parte de codigo que has expuesto y la parte de el post al inicio el #01, no tienen ningun efecto...   Siempre retornan el valor de 0 usando SDAC. 


delphi
  1. ShowMessage(IntToStr(MSQuery1.FieldByName('blobfield').DataSize));

Mientras que usando el Post #4, devuelve el tamaño. 

 

Todavia NO he probado con motores de Base de Datos distintos... pero me intrigo a seguir investigando para mostrar conclusiones.

 

Saludos.


  • 1

#7 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 28 noviembre 2016 - 02:41

Habria que ver que metodo se esta ejecutando, ya que se supone que es un metodo virtual de la clase TField. Es posible que no se haya creado una instancia de TBlobField y lo haya detectado de otra manera


Editado por Agustin Ortu, 28 noviembre 2016 - 02:41 .

  • 0