Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Longitud campo Blob (https://www.clubdelphi.com/foros/showthread.php?t=74809)

amerika111 12-07-2011 20:49:44

Longitud campo Blob
 
Hola que tal mi duda es la siguiente.. que logintud es recomendable para un campo blob en el cual se quiere almacenar archivos pdf..

Casimiro Notevi 12-07-2011 21:11:46

¿Longitud?, no te entiendo, un campo blob no lo declaras con una longitud.

Por ejemplo, esto es parte de la creación de una base de datos
Código SQL [-]
set sql dialect 3; 
 
create database "rankings.fdb" PAGE_SIZE 8192 user "SYSDBA" password "masterkey"; 
 
create domain domCodigoNoNulo integer not null; 
create domain domNombre varchar(64) character set ISO8859_1;  /* fb < 2.1 */ 
/*create domain domNombre varchar(64) character set UTF8 collate ES_ES_CI_AI default '';*/  /* fb >= 2.1 */ 
create domain domImagen blob sub_type 0;

create table 
tbAVATARES 
( 
  ID          domCodigoNoNulo, 
  Imagen      domImagen, 
  primary key (ID) 
);

amerika111 12-07-2011 21:16:43

Cita:

Empezado por Casimiro Notevi (Mensaje 406160)
¿Longitud?, no te entiendo, un campo blob no lo declaras con una longitud.

Por ejemplo, esto es parte de la creación de una base de datos

Código SQL [-]
set sql dialect 3;

create database "rankings.fdb" PAGE_SIZE 8192 user "SYSDBA" password "masterkey";

create domain domCodigoNoNulo integer not null;
create domain domNombre varchar(64) character set ISO8859_1; /* fb < 2.1 */
/*create domain domNombre varchar(64) character set UTF8 collate ES_ES_CI_AI default '';*/ /* fb >= 2.1 */
create domain domImagen blob sub_type 0;

create table
tbAVATARES
(
ID domCodigoNoNulo,
Imagen domImagen,
primary key (ID)
);




O lo que pasa que no lo estoy creando en el codigo si no directo del asistente.... y biene un atributo tipo lenght

Casimiro Notevi 12-07-2011 21:19:48

No pongas nada, déjalo en blanco.

Casimiro Notevi 12-07-2011 21:24:55

Rectifico, supongo que 'length' es 'size', por defecto son 80:


Casimiro Notevi 12-07-2011 21:29:45

Con un tamaño de página de 8 kb, como he declarado en el ejemplo de antes la base de datos, podrás almacenar ficheros hasta 32 Gb:

Cita:

Blobs and Varchars
Varchars are limited to 32k in length whilst a blob is effectively unlimited in size, however
the page size of a database will determine maximum size as determined by the
e.g.
1Kb page size => 64 Mb
2Kb page size => 512 Mb
4Kb page size => 4 Gb
8Kb page size => 32 Gb
16Kb page size => Big enough:*)

Extraído de aquí.

amerika111 12-07-2011 22:04:42

Cita:

Empezado por Casimiro Notevi (Mensaje 406166)
Con un tamaño de página de 8 kb, como he declarado en el ejemplo de antes la base de datos, podrás almacenar ficheros hasta 32 Gb:



Extraído de aquí.

Ok deacuerdo lo dejare en lenght 80 aunque no creo que se ocupe los 32 gb

Casimiro Notevi 12-07-2011 22:16:44

Cita:

Empezado por amerika111 (Mensaje 406172)
Ok deacuerdo lo dejare en lenght 80 aunque no creo que se ocupe los 32 gb

Sí, no bajes de esa cantidad, 8192, es recomendable para el buen rendimiento de la BD.

amerika111 14-07-2011 19:18:47

Cita:

Empezado por Casimiro Notevi (Mensaje 406173)
Sí, no bajes de esa cantidad, 8192, es recomendable para el buen rendimiento de la BD.

lo he dejado en 80 pero no me deja almacenar pdf de mas de 4 mb.....

Casimiro Notevi 14-07-2011 19:28:21

¿Y dónde está el código? ;)

amerika111 14-07-2011 19:39:09

Cita:

Empezado por Casimiro Notevi (Mensaje 406405)
¿Y dónde está el código? ;)

el tamaño lo asigno directamente en la tabla

Casimiro Notevi 14-07-2011 19:44:32

je, je... mi vista no da para leer eso :)

De todas formas te preguntaba por el código que usas para guardar los documentos.

amerika111 14-07-2011 19:46:10

Cita:

Empezado por Casimiro Notevi (Mensaje 406409)
je, je... mi vista no da para leer eso :)

De todas formas te preguntaba por el código que usas para guardar los documentos.

disculpa si sorry esta muy pequeña la imagen... el codigo lo tengo en c#.net

Código:

HttpPostedFile ImgFile = ImagenFile.PostedFile;
            // Almacenamos la imagen en una variable para insertarla en la bbdd.
            Byte[] byteImage = new Byte[ImagenFile.PostedFile.ContentLength];
            ImgFile.InputStream.Read(byteImage, 0, ImagenFile.PostedFile.ContentLength);
            string sql = "insert into A_DOC_EMPLEADOS(NOEMPLEADO,DOCUMENTOS,USUARIOCREADOR)";
            sql += " Values(@NOEMPLEADO,@DOCUMENTOS,@USUARIOCREADOR)";
            string connectionString = @"User=SYSDBA;Password=masterkey;Database=C:\Archivos de programa\Sistema Bioreg\DB\BIOREGF.FDB;DataSource=192.168.1.50; Port=3050;Dialect=3; Charset=NONE;Role=;Connection lifetime=15;Pooling=true; MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;";
            FbConnection SqlConn = new FbConnection(connectionString);
            FbCommand SqlCom = new FbCommand(sql, SqlConn);
            SqlCom.Parameters.Add("NOEMPLEADO", FbDbType.VarChar, 50);
            SqlCom.Parameters["@NOEMPLEADO"].Value = txtTitulo.Text;
            SqlCom.Parameters.Add("USUARIOCREADOR", FbDbType.VarChar, 50);
            SqlCom.Parameters["@USUARIOCREADOR"].Value = lblusuario.Text;
            SqlCom.Parameters.Add("@DOCUMENTOS", FbDbType.Binary);
            SqlCom.Parameters["@DOCUMENTOS"].Value = byteImage;
            SqlConn.Open();
            int foto = SqlCom.ExecuteNonQuery();
            SqlConn.Close();

            if (foto > 0)
            {
                Label1.Text = "Documento Almacenado Correctamente";
                txtTitulo.Text = "";
            }
            else
            {
                Label1.Text = "Documento No Almacenada";
                txtTitulo.Text = "";
            }
        }


Casimiro Notevi 14-07-2011 19:57:21

Pues no sabría qué decirte, parece que es una limitación de esa variable donde lo almacenas.

Casimiro Notevi 14-07-2011 20:08:12

Te pongo un ejemplo simple que carga una imagen en un campo blob.

Código Delphi [-]
procedure TFempresas.bt37Click(Sender: TObject);
begin
  if dlgLoadLogo.Execute then
  begin    
    TBlobField(DSconfig.DataSet.FieldByName('logotipo')).LoadFromFile(dlgLoadLogo.FileName);
    DSconfig.DataSet.Post;
    TpFIBDataSet(DSconfig.DataSet).Transaction.CommitRetaining;    
  end;
end;


La franja horaria es GMT +2. Ahora son las 01:05:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi