Ver Mensaje Individual
  #1  
Antiguo 15-03-2011
phirum1984 phirum1984 is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Reputación: 0
phirum1984 Va por buen camino
Exclamation Problema para guardar datos desde campo Blob al disco duro

Hola a todos/as.

Tengo una aplicación de mensajería entre usuarios que he programado y que se conecta a una base de datos MySql Online. Lo que quiero hacer es que cuando la aplicación inicie compruebe si hay una versión más nueva (subida previamente por mí), y si la hay descargar el ejecutable de la versión más nueva y de esa forma digamos que el programa se "autoactualiza".

Bien, el procedimiento para subir el archivo binario (.exe) a un campo de tipo LongBlob en la BD MySql ya está implementado y en principio funciona bien, no obstante pongo lo que sería el código (no explícitamente ya que no es relevante):
Código Delphi [-]
var
  qry: TQuery;
  sql: String;
begin
 ...
  sql:='UPDATE Tabla SET Archivo=:file WHERE Condicion';
  qry.Sql.Add(sql);
  qry.ParamByName('file').LoadFromFile('C:\Archivo.exe', ftBlob);
  qry.ExecSQL;
  qry.Close;
end;
El procedimiento es correcto y en la BD puedo ver que efectivamente el campo LongBlob se ha modificado y supuestamente contiene el archivo ejecutable subido, que ocupa unos 2.2Mb, y así se muestra en la misma BD.


El problema viene cuando intento descargar el archivo de la BD y guardarlo en el disco duro, siempre me descarga mi archivo ejecutable pero de tamaño 32Kb y que lógicamente no funciona. En el caso de que suba un archivo de menos de 32Kb, lo descarga bien y funciona correctamente. Recuerdo que en la propia BD MySql el archivo está supuestamente bien guardado y ocupa 2.2Mb.
El código usado es el siguiente:
Código Delphi [-]
var
  qry: TQuery;
  sql: String;
begin
 ...
  sql:='SELECT Archivo FROM Tabla WHERE Condicion';
  qry.Sql.Add(sql);
  qry.Open;
  TBlobField(qry.FieldByName('Archivo')).SaveToFile(C:\Descarga\Archivo.exe);
  qry.Close;
end;
No hay errores y de hecho me genera la descarga pero como ya he dicho de un máximo de 32Kb, creo que es como si hubiera algún límite o similar, pero la BD no lo impone ya que la propia BD me dice que el campo LongBlob ocupa 2.2Mb.

Por favor, ¿alguna sugerencia, idea o alguna otra forma de hacerlo?.
Si necesitais cualquier información adicional o no entendeis alguna cosa por favor pedidmelo.

De antemano, muchas gracias y un saludo.

Última edición por phirum1984 fecha: 15-03-2011 a las 14:11:55.
Responder Con Cita