Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2013
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Ayuda con variable tipo File

Amigos tengo una duda, con el manejo de variables tipo File

yo tengo almacenado en mi base de datos una plantilla de tipo blob y quiero asignarla a una variable tipo file esto es posible? o me recomiendan utilizar TMemoryStream o TFileStream
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #2  
Antiguo 18-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JerS.

Habría que ver el caso con detalle para evaluar la conveniencia de usar archivos sin tipo para realizar la lectura/escritura de los campos blob.

Pero dado que la clase TBlobField posee los métodos LoadFromStream y SaveToStream, creo que sería más sencillo usando un descendiente de TStream.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 18-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.267
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Qué es una plantilla de tipo blob? Para tí, me refiero. Se supone que blob es cualquier cosa que sea "binaria".
¿Qué es una variable de tipo File (FileHandle)?

Tal vez si nos explicas qué es el blob y qué quieres hacer con él, nos aclare algo más...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 22-02-2013
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Amigos ncfisa y neftali
Voy a ser un poco mas claro con ustedes, tengo unas SDK de identificación biometrica pero funciona guardando las huellas o templates en archivos, pero me gustaria manejarlo con Base de Datos, por eso creo conveniente cambiar lla variable File por TMemoryStream o cualquiera que ustedes me recomienden. aqui les dejo un Ejm del codigo :

Código Delphi [-]

var
   fPtr:       file;
   lpRec:      LPDBREC;
   dSize:      DWORD;
   rdTotal:    Integer;

begin
   // get record's data length
   AssignFile( fPtr, fName );
   Reset( fPtr, 1 );
   BlockRead( fPtr, dSize, sizeof( DWORD ), rdTotal );
   if rdTotal <> sizeof( DWORD ) then
   begin
      CloseFile( fPtr );
      GetRecord := nil;
      Exit;
   end;

   // allocate memory for record
   lpRec := AllocRecordMem( dSize );

   // read key information
   BlockRead( fPtr, lpRec.key, sizeof( FTR_DATA_KEY ), rdTotal );
   if rdTotal <> sizeof( FTR_DATA_KEY ) then
   begin
      CloseFile( fPtr );
      FreeRecordMem( lpRec );
      GetRecord := nil;
      Exit;
   end;

   // read biometric data
   BlockRead( fPtr, PChar( lpRec.data )^, dSize, rdTotal );
   if DWORD( rdTotal ) <> dSize then
   begin
      CloseFile( fPtr );
      FreeRecordMem( lpRec );
      GetRecord := nil;
      Exit;
   end;

   // success
   CloseFile( fPtr );
   GetRecord := lpRec;
end;
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #5  
Antiguo 25-02-2013
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Por lo que sé, a una variable tipo FILE sólo se le pueden asignar archivos. Estos no tienen por qué ser archivos físicos en disco, ya que también pueden asignársele archivos virtuales como "crt:" o "lpt1:", por poner dos ejemplos. En definitiva, si el sistema operativo permite acceder a "algo" vía archivo, entonces puedes "asignarlo" a una variable tipo FILE. Algunos sistemas operativos permiten acceder a la memoria mediante archivos virtuales, y dado que un "blob" se puede almacenar en memoria, es posible que puedas hacerlo; pero hasta aquí puedo leer ya que no tengo ni idea de cómo se hace. Quizá buscando en la MSDN encuentres algo.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 25-02-2013
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Por lo que sé, a una variable tipo FILE sólo se le pueden asignar archivos. Estos no tienen por qué ser archivos físicos en disco, ya que también pueden asignársele archivos virtuales como "crt:" o "lpt1:", por poner dos ejemplos. En definitiva, si el sistema operativo permite acceder a "algo" vía archivo, entonces puedes "asignarlo" a una variable tipo FILE. Algunos sistemas operativos permiten acceder a la memoria mediante archivos virtuales, y dado que un "blob" se puede almacenar en memoria, es posible que puedas hacerlo; pero hasta aquí puedo leer ya que no tengo ni idea de cómo se hace. Quizá buscando en la MSDN encuentres algo.
Pero si hay forma de sustituir el File por un tipo de dato TMemoryStream asignándole el valor desde un Blob
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #7  
Antiguo 25-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jers.

Ahora estoy un poco confundido sobre que es lo que buscas hacer. Pero fijate si de este hilo podés sacar alguna idea.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 25-02-2013
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola Jers.

Ahora estoy un poco confundido sobre que es lo que buscas hacer. Pero fijate si de este hilo podés sacar alguna idea.

Saludos.
Lo que intento hacer es cambiar el codigo que publique , el cual utiliza una variable tipo file, ya que usa un archivo , por un codigo que en vez de usar un archivo traiga la información de un campo blob y pueda manipularla tal cual manipula el archivo
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #9  
Antiguo 25-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por JerS Ver Mensaje
por un codigo que en vez de usar un archivo traiga la información de un campo blob y pueda manipularla tal cual manipula el archivo
Hola JerS.

La función BlobToRecord del enlace que te pasé, pasa el contenido de un TBlobField a una variable de tipo record (supongo que LPDBREC es un tipo apuntador a record). Claro que tendrás que modificar algunas cosas como el tipo del parámetro, pero si entendí bien tendría que funcionar.

Lo que realmente me confunde es que quieras asignar una variable tipo BLOB a una tipo FILE, ya que aún superando las dificultades que te comenta Ñuño, no veo que funcionalidad podría tener. Es decir ¿ Deseas pasar la variable BLOB como handle de un tipo FILE ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 26-02-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
JerS,

Cita:
Empezado por JerS
...tengo almacenado en mi base de datos una plantilla de tipo blob y quiero asignarla a una variable tipo file esto es posible?...
Entiendo que en tu BD tienes un campo Blob y quieres almacenar en este un archivo binario.

Cita:
Empezado por JerS
...tengo unas SDK de identificación biometrica pero funciona guardando las huellas o templates en archivos, pero me gustaria manejarlo con Base de Datos...
Corolario de lo anterior.

Revisa estos links:
Cita:
Working With BLOBs Using Delphi:
http://www.onlinedelphitraining.com/...ters/blobs.htm

How save a file in BLOB and use later:
http://www.scalabium.com/faq/dct0141.htm
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 26-02-2013 a las 02:11:19.
Responder Con Cita
  #11  
Antiguo 07-03-2013
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Amigos en mi ignorancia a la hora de manejar archivos queria saber que se hace exactamente en esta función:
Código Delphi [-]
 BlockRead( fPtr, PChar( lpRec.data )^, dSize, rdTotal );
   if DWORD( rdTotal ) <> dSize then
   begin
      CloseFile( fPtr );
      FreeRecordMem( lpRec );
      GetRecord := nil;
      Exit;
   end;
para hacer lo mismo pero con mi variable TMemory
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #12  
Antiguo 07-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por JerS Ver Mensaje
Amigos en mi ignorancia a la hora de manejar archivos queria saber que se hace exactamente en esta función:
...
Hola JerS.

Me parece que la explicación es mas clara comentando el código:
Código Delphi [-]
 { BlockRead lee uno o mas registros lógicaos a partir de la
   posición actual del archivo y los almacena en una variable }
   BlockRead(fPtr,               // file
             PChar(lpRec.data)^, // variable
             dSize,              // nro de registros
             rdTotal);           // registros leidos

   { Si el número de registros leidos difiere de los solicitados ...}
   if DWORD(rdTotal) <> dSize then
   begin
      CloseFile(fPtr);           // cerrar file
      FreeRecordMem(lpRec);      // ?? (supongo libera puntero a record)
      GetRecord := nil;          // pone a nulo el puntero GetRecord
      Exit;                      // sale del procedimiento/funcion
   end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Variable de Tipo ruedabeat2003 Varios 2 21-12-2011 02:24:58
No se puede convertir variable de tipo null a tipo integer. JairoC Varios 5 30-11-2011 15:43:11
Tamaño maximo de ficheros tipo file of JF Sebastian OOP 3 05-02-2007 13:27:06
Tipo de Variable gabriel3 Varios 5 13-01-2006 20:46:55
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51


La franja horaria es GMT +2. Ahora son las 21:09:58.


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
Copyright 1996-2007 Club Delphi