Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¿como usar un campo blob para almacenar un archivo en mysql? (https://www.clubdelphi.com/foros/showthread.php?t=67055)

r1d2m3 25-03-2010 20:43:34

¿como usar un campo blob para almacenar un archivo en mysql?
 
Hola colegas, estoy con el siguiente inconveniente, debo grabar en una base de datos MySQL, un documento (tipo rtf), y, hasta donde he podido avanzar, debo hacerlo bajo un campo tipo blob, hasta aquí todo bien, pero al intentar enviarlo a la bd, tengo un problema de definición del parámetro y me tira un error. Les muestro el código que estoy usando y luego les transcribo el error.

Código Delphi [-]
  procedure GrabarTexto(varIDTexto:Integer; varStream:TStream);
    var
      cmdActDatos:TADOQuery;


    begin
      cmdActDatos:=TADOQuery.Create(nil);
      cmdActDatos.Connection:=cnn;
      cmdActDatos.Parameters.CreateParameter('nroRs', ftInteger, pdInput, 10, False);
      cmdActDatos.Parameters.CreateParameter('descripBreve', ftString, pdInput, 30, False);
      cmdActDatos.Parameters.CreateParameter('pltTexto', ftBlob, pdInput, 10000 , false); //en este línea es donde salta el siguiente error: la aplicación utiliza un valor de tipo no válido para la operación actual.
      cmdActDatos.SQL.Add('insert into tabmaetextos (nroRs, descripBreve, pltTexto) Values (:nroRs, :descripBreve, :pltTexto)');
      cmdActDatos.Parameters.ParamByName('nroRs').Value := varIDTexto;
      cmdActDatos.Parameters.ParamByName('descripBreve').Value := 'Probando textos';
      cmdActDatos.Parameters.ParamByName('pltTexto').LoadFromStream(varStream, ftBlob);
      cmdActDatos.ExecSQL;

    end;

pido disculpas por lo rudimentario del código, pero se trata de un prototipo que después será emprolijado a los efectos de protegerlo contra fallos, también vi por otros hilos que no se recomienda guardar documentos en las bd, comparto la opinión pero en este caso, los documentos siempre serán de muy bajo peso, razón por la cual la bd no crecerá fuera de control.

Gracias y quedo a la espera de vuestros comentarios.

r1d2m3 26-03-2010 17:18:04

Hola colegas, he visto varias lecturas de este hilo pero aún no tengo alguna respuesta, por las dudas esté mal ubicado en este foro, pido a algún moderador que lo pase a OOP, tal vez allí alguien se haya topado con este problema, lo haya resuelto, y me pueda tirar un cable. No quiero copiarlo y pegarlo en otro foro ya que no se si esto es correcto, por otro lado, si este procedimiento es correcto, avisenme y lo hago así.

Gracias y saludos.

manuc 22-04-2010 13:42:42

Hola r1d2m3,

No se si habrás encontrado ya una solución, pero te comento.

lo que podrías hacer es iniciar el query con una consulta select y posteriormente insertar el registro.

Código Delphi [-]
cmdActDatos.close;
cmdActDatos.commandText = 'SELECT * tabmaetextos WHERE ...';
cmdActDatos.open;
cmdActDatos.insert;
cmdActDatos.fieldbyname('nroRs').asInteger := xx;
cmdActDatos.fieldbyname('descripBreve').asString := 'xx';
cmdActDatos.fieldbyname('ltTexto').LoadFromStream(varStream, ftBlob);
cmdActDatos.post;

Ya me cuentas si te vale.

Un saludo.


La franja horaria es GMT +2. Ahora son las 01:07:38.

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