Jump to content


Photo

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


  • Please log in to reply
6 replies to this topic

#1 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 posts
  • Location127.0.0.1

Posted 29 August 2016 - 07:50 PM

[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
  • 6295 posts
  • LocationArgentina

Posted 30 August 2016 - 05:37 AM

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 posts
  • Location127.0.0.1

Posted 30 August 2016 - 05:55 AM

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 posts
  • Location127.0.0.1

Posted 25 November 2016 - 03:32 PM

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 posts
  • LocationArgentina

Posted 25 November 2016 - 05:23 PM

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.


Edited by Agustin Ortu, 25 November 2016 - 05:24 PM.

  • 1

#6 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 posts
  • Location127.0.0.1

Posted 28 November 2016 - 02:12 PM

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 posts
  • LocationArgentina

Posted 28 November 2016 - 02:41 PM

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


Edited by Agustin Ortu, 28 November 2016 - 02:41 PM.

  • 0




IP.Board spam blocked by CleanTalk.