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.