Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Hola hluis, primero que todo, cuando utilizas los componentes de conección a DB de la VCL de delphi, en estos casos no tienes que preocuparte del tipo de base de datos o servidor que utilizes.
Bien, como a forma de consejo, primero ubieses hecho una búsqueda, en este hilo se habla como agregar imágenes, pero el código que postie en esa ocación, perfectamente te puede servir para guardar cualquier tipo de datos en el campo blob.

Por otro lado, tienes además la inquietud de poder recuperar el archivo, y abrirlo nuevamente, por ejemplo en word. Bien, intenta invertir la el procedimiento posteado en el hilo ya mencionado.

saludos.

PD.: Te recomiendo que hagas una búsqueda de un truco o hilo "Detectar cuando se cierra un archivo" verás que seguramente lo vas a necesitar. Estoy seguro que por ahí anda en el club.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web

Última edición por Chris fecha: 16-01-2008 a las 16:18:27.
Responder Con Cita
  #2  
Antiguo 16-01-2008
hluis hluis is offline
Registrado
 
Registrado: ene 2008
Posts: 7
Poder: 0
hluis Va por buen camino
Hola por la respuesta, me mara un error "INVALID CLASS TYPECAST", no se como solucionarlo, en el sql el campo es varbinary, gracias



FileStore.open;
FileStore.Insert;
FileStore.FieldByName('ObjectTypeId').Value := 1;
FileStore.FieldByName('ObjectId').Value := IWDBLookupComboBox4.KeyValue;
FileStore.FieldByName('DocumentoTpId').Value := IWDBLookupComboBox5.KeyValue;
FileStore.FieldByName('Descripcion').Value := IWEdit1.Text;
FileStore.FieldByName('Nombre').Value := ExtractFileName(IWFile1.FileName);

{ACA MARCA EL ERROR INVALID CLASS TYPECAST}
try
blob := FileStore.CreateBlobStream(FileStore.FieldByName('ArchivoBin'),
bmWrite);
blob.Seek(0, soFromBeginning);
fs := TFileStream.Create(IWFile1.FileName, fmOpenRead or fmShareDenyWrite);
try
blob.CopyFrom(fs, fs.Size)
finally
fs.Free
end;
finally
blob.Free
end;
FileStore.Post;
Responder Con Cita
  #3  
Antiguo 16-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
No me queda claro en cual linea te manda el error, si es en:
Código Delphi [-]
FileStore.FieldByName('Nombre').Value := ExtractFileName(IWFile1.FileName);

o antes de iniciar el Try, ya que donde comentastes, es una línea en blanco.
Mi experiencia en SQL Server es nula, por lo tanto en ese aspecto no te podría ayudar. Espero no mal interpretar el mensaje de error, pero a mi parecer, es que el campo no acepta archivos binarios. ¿Estás seguro de que el tipo de dato "varbinary" es un campo BLOB -por decirlo así-.

Por otro lado, por el momento intenta depurar el código, comenta el código que agrega la imágen -desde donde inicia el primer try-, también puedes modificar la asignación del campo "NOMBRE" veo que en este momento la tienes así:
Código Delphi [-]
 FileStore.FieldByName('Nombre').Value := ExtractFileName(IWFile1.FileName);
intentala cambiar por:
Código Delphi [-]
 FileStore.FieldByName('Nombre').AsString := ExtractFileName(IWFile1.FileName);

Si aún, tu problema no se resuelve con esto, ve comentado cada asignación, una por una, hasta que encuentres donde está el pegón, a mi parecer es el tipo de dato, ya que según veo, el código está sin problemas.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 17-01-2008
hluis hluis is offline
Registrado
 
Registrado: ene 2008
Posts: 7
Poder: 0
hluis Va por buen camino
Hola gracias por la respuesta, el error lo marca en l aste linea al hacer el trace:
blob := FileStore.CreateBlobStream(FileStore.FieldByName('ArchivoBin'),
bmWrite);

error "INVALID CLASS TYPECAST",

Muchas Gracias, espero rta.
slds
Luis

FileStore.open;
FileStore.Insert;
FileStore.FieldByName('ObjectTypeId').Value := 1;
FileStore.FieldByName('ObjectId').Value := IWDBLookupComboBox4.KeyValue;
FileStore.FieldByName('DocumentoTpId').Value := IWDBLookupComboBox5.KeyValue;
FileStore.FieldByName('Descripcion').Value := IWEdit1.Text;
FileStore.FieldByName('Nombre').Value := ExtractFileName(IWFile1.FileName);

try
{ACA MARCA EL ERROR INVALID CLASS TYPECAST}
blob := FileStore.CreateBlobStream(FileStore.FieldByName('ArchivoBin'),
bmWrite);

blob.Seek(0, soFromBeginning);
fs := TFileStream.Create(IWFile1.FileName, fmOpenRead or fmShareDenyWrite);
try
blob.CopyFrom(fs, fs.Size)
finally
fs.Free
end;
finally
blob.Free
end;
FileStore.Post;
Responder Con Cita
  #5  
Antiguo 17-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Este problema, a mi parecer, se debe al tipo de datos de la base de datos. Ya que no sé adsolutamente nada sobre MS SQL Server, no puedo ayudarte en ese aspecto. Intenta abrir otro hilo en la sección pertinente (SQL Server) para obtener ayuda más calificada de la que yo puedo proporcionarte.

Sin envargo, estuve biendo el tipo de error "INVALID TYPECAST" en msdn2 y encontré esto , tal parece que cuando el valor del campo es nulo, SQL server devuelve un valor especial DBNULL que pueda ser que delphi no lo sepa manejar. Te doy estas observaciones, porque si vas a hacer una pregunta, tengas la mayor cantidad de inforación posible que puedas obtener.

Como última sugencia, intenta cambiar el segundo parámentro del Create BlobStream con el que creas la variable blob (en la línea donde te da el error), cambialo de bmWrite a bmReadWrite

Saludos.

PD.: Para escribir código de delphi, utiza las etiquetas correspondientes, es más comodo leer el código con ellas.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
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
Mostrar imagen de un campo binario kiketijuana SQL 0 28-06-2006 01:20:33
Archivos de Texto y binario (manejar) h2o_mx OOP 2 20-04-2006 08:28:55
Gráficos en un campo binario mlara Conexión con bases de datos 6 08-12-2005 01:03:08
Convertir Archivos DFM de binario a Texto (Text DFM) DiDi Varios 4 21-04-2005 19:39:43
Como grabar archivos WAV JDNA Varios 1 16-04-2004 03:50:29


La franja horaria es GMT +2. Ahora son las 13:09:17.


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