insertar un archivo en un campo blob desde delphi
hola amigos yo se que muchos tal ves se molesten y digan que busque en los hilos pero en verdad que estuve buscando y no encontre mucho que me pueda ayudar o mas bien, me falta un poco de conocimiento, asi que recurro a ustedes, lo que quiero hacer es subir un archivo a una base de datos que es postgre(<-no se espanten no es cosa del otro mundo) digamos que en vez de postgre dije mysql el procedimiento es similar(muchos temen al coco postgre), tengo delphi2006, tengo un tdatabase y un tquery se insertar informacion a la base de datos, lo que no me queda claro es como insertar el archivo en el campo tipo blob, cuando digo el archivo puede ser de diferentes tipos, pdf,doc,ppt,xls, etc.
En teoria cuando doy click en el boton ,se abre el opendialog y selecciono el archivo que se pretende subir a la base de datos, la base de datos se llama "basedatosprueba" y la tabla adonde van los archivos se llama "tabla_prueba", esta tiene tres campos que son, llave(integer),nombre(character) y archivoblob(blob) este es parte del codigo que utilizo, lo que no se es como insertar el archivo dentro del campo, puedo insertar en los demas campos informacion pero el archivo en el blob no, seria de mucha ayuda si alguien me explicara un poco como es que se hace,
Les agradezco su atencion y su ayuda, cualquier duda o sugerencia es bienvenida :confused: |
Hola
Ya sabes, no me hagas mucho caso por que no entiendo muy bien tu codigo, pero lo que veo es esto. Bueno, hasta aqui, si ves algo, lo dices. Saludos |
No te dara problema las comillas simple en '1' de values ?
|
ok explico un poco mi codigo hasta donde yo entiendo
la parte de arriba es por que el archivo que voy a subir a la base de datos la mando a un olecontainer para que se muestre
este codigo tal cual lo puse y me manda un error de EDatabaseerrror 'querygestion:field'archivoblob' not found, supongo que no encuentra ese campo aunque si existe en la base de datos, sigo revisando si pueden ayudarme o sugerir algo es bienvenido gracias por su atencion |
Cita:
con eso inserto los datos, pero el archivo que seleccione lo quiero insertar en la misma tabla en un campo que se llama 'archivobob', pero eso es lo que no se, quisiera si se pudiera, hacer algo mas o menos asi para poder insertar el archivo tambien
se me complica lo de subir el archivo, los codigos que hay en los foros, he intentado probarlos y pues no los comprendo bien, pues no obtengo resultados :confused: les agradeceria mucho si me pudieran ayudar |
Hola
Yo de estas cosas no se, pero si el nombre blob es una variable de tipo tstream (blob:TStream; ), no se tendria que concatenar tambien? No se, la verdad es solo un pensamiento.:) Saludos |
Cita:
[Pascal Error] frmenu.pas(198): E2010 Incompatible types: 'string' and 'TStream' alguna sugerencia? |
Hola
Pues parece que el campo blob es string, recuerda, no se de esto.:) Tal vez asi: Saludos |
agradesco tu ayuda en verdad, yo estoy mas perdido, pero algo bueno siempre se aprende, se supone que blob esta declarado como Tstream, aun con el QuotedStr sigue marcando el mismo error, creo que hay algo que se esta pasando o tal ves es la manera incorrecta de hacerlo
no pense que fuera tan complicado subir un archivo a una base de datos :confused: |
lo he tratado de arreglar pero no se ve bien
Si algun moderador lo arregla, por favor Esta en el siguiente post. Gracias |
Hola
Y asi: Código Delphi [-]var blob:TBlobStream; blobf:TBlobField; fs:tstream; begin Este es el ejemplo completo Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject); var Stream1: TBlobStream; Stream2: TStream; begin Stream1 := TBlobStream.Create(Table1Notes, bmRead); try ClientDataSet1.Edit; { here’s a different way to create a blob stream } Stream2 := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName('Remarks'), bmReadWrite); try Stream2.CopyFrom(Stream1, Stream1.Size); ClientDataSet1.Post; finally Stream2.Free; end; finally Stream1.Free; end; end; Insisto, no se, pero esta en el help Saludos |
Hola
Ya consulte a mi Maestro Egostar y en el help sale esto: Ahi lo dice todo. Saludos |
no se si sea mucho abusar pero podrias explicar un poco el codigo ?:confused:
|
La cosa es mas sencilla q esto :
un campo Blob persistente tiene los metodos LoadFromFile y LoadFromStream, o bien haces un cast a la clase TBlobField, si el campo no es persistente, te quedas con el q mas te conviene de los dos.. |
Cita:
|
Bueno mira no se si ayude o complique la cosa a estas alturas pero te recomiendo lo siguiente:
Modifica la sentencia SQL asi: Original:
Modificada:
De esa manera usarás parametros para manipular los datos en SQL (el nombre del campo precedido de dos puntos ":") Luego (creo) que puedes hacer:
Tambien tengo por ahi un codigo para el loadfromfile y loadfromstream pero no en este equipo prueba y si te sirve mañana te puedo poner más información. |
muchas gracias sitrico, pues ahorita no puedo probar el codigo por que estoy en mi casa pero llegando al trabajo lo pruebo y te digo que tal, veo que el archivoblob, esta asignado a un memotext, supongo que eso es para subir un archivo de texto, me parece que si quisiera hacerlo con cualquier tipo de archivo tendria que ser un loadstream, ojala puedas postear el otro codigo, de antemano muchas gracias por la atencion y pues por la ayuda :)
|
No pude enviarlo hoy pero encntré este ejemplo:
El TBlobField es más o menos equivalente al Querygestion.ParamByName(BlobField). |
[quote=sitrico;252575]Bueno mira no se si ayude o complique la cosa a estas alturas pero te recomiendo lo siguiente:
Modifica la sentencia SQL asi: Original: Código Delphi [-]Querygestion.SQL.add('insert into tabla_prueba(llave,nombre,archivoblob) values '+ Edit1.Text+','''+tdEditAsunto.Text+''','+QuotedStr(blob)+')'); Modificada: Código Delphi [-]Querygestion.SQL.add('insert into tabla_prueba(llave,nombre,archivoblob) values '+ '(:llave,:nombre,:archivoblob)'); De esa manera usarás parametros para manipular los datos en SQL (el nombre del campo precedido de dos puntos ":") Luego (creo) que puedes hacer: Código Delphi [-] Querygestion.ParamByName('llave').asinteger := unentero; Querygestion.ParamByName('nombre').AsString := uncharacter Querygestion.ParamByName('archivoblob').AsString := memo.text quote] con ese codigo manda un mensaje de "table is read only" ya verifique en las propiedades del ttable y la propiedad read only esta desactivada, cheque en el tdatabase haber si podria haber alguna propiedad ahi y no encontre algo que pudiera afectar, alguna sugerencia o comentario que me pudieran dar? :confused: gracias |
Cita:
Saludos. |
La franja horaria es GMT +2. Ahora son las 04:47:47. |
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