FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
grabar archivos en campo binario
Hola, soy novato en esto y tengo q , grabar archivos .doc, .xls, .pdf, o jpg, en un campo binario.
tengo Sql Server 2005 id int nombre varchar(50) archivobin varbinary(50) Algo simple, No se como Garabr el archivo en la Bd, y depsues tendria q poder extraerlo y mostrarlo. Me pueden ayudar, o donde puede verlo, gracias Luis |
#2
|
||||
|
||||
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. Última edición por Chris fecha: 16-01-2008 a las 16:18:27. |
#3
|
|||
|
|||
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; |
#4
|
||||
|
||||
No me queda claro en cual linea te manda el error, si es en:
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í: intentala cambiar por:
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. |
#5
|
|||
|
|||
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; |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
Cita:
Ahora, como una sugerencia más, puedes modificar la línea del error por está:
Utilizo TVarBytesField, porque creo que el lo mejor para el tipo de campo VarBinary, también podes probrar con TBlobField. Informate sobre ellos en la ayuda de delphi. Saludos. |
#8
|
|||
|
|||
Hola , muchas gracias, voy hacer lo q decis, no sabie lo del codigo pero lo voy hacer asi, muchas gracias
|
#9
|
||||
|
||||
aparte, es conveniente que pongas el tipo varbinary(MAX) para no preocuparte del tamaño del archivo.
ya no se recomienda por la propia Microsoft usar al tipo de dato Image, en sql server 2005 existe por compatabilidad. saludos.
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás... análisis de información análisis y diseño de sistemas Paoti Rios Reséndiz |
#10
|
|||
|
|||
Hola gracias, por la salvedad, es que cuendo cree la BD, fue sobre el de Pruebas, ahi hay todavia un 2000, Ya en el 2005 lo cambie como decis. slds
|
|
|
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 |
|