Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-03-2011
phirum1984 phirum1984 is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 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
  #2  
Antiguo 15-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código Delphi [-]
TBlobField(qry.FieldByName('Archivo')).SaveToFile(C:\Descarga\Archivo.exe);

¿No deberías poner el nombre del fichero entre comillas?

Código Delphi [-]
TBlobField(qry.FieldByName('Archivo')).SaveToFile('C:\Descarga\Archivo.exe');
Responder Con Cita
  #3  
Antiguo 16-03-2011
phirum1984 phirum1984 is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
phirum1984 Va por buen camino
Ups, si, tienes razón, ha sido un error sintáctico, en la aplicación lo tengo bien, pero no es ese el problema, sigue sin funcionarme, alguna ayuda o sugerencia por favor...
Responder Con Cita
  #4  
Antiguo 16-03-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues entonces pega aquí exactamente el código que estás usando.
Responder Con Cita
  #5  
Antiguo 21-03-2011
phirum1984 phirum1984 is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
phirum1984 Va por buen camino
Ok, pongo el código exacto que utilizaba, hay algunas funciones implementadas por mí que sólo sirven para mostrar un cierto mensaje de error en caso de fallo y cosas así, son irrelevantes para el caso que nos ocupa aquí

Código para subir el archivo .exe:
Código Delphi [-]
var
  qry_Version: 
  TQuery;
  sql: String; 
  ...
  sql:='UPDATE Administracion SET Valor=''' + txt_Version.Text + ''', Archivo=:archivo '+ 'WHERE Tipo=''UltimaVersion''';
  try
    qry_Version.Close; 
    qry_Version.SQL.Clear;             
    qry_Version.SQL.Add(sql);             
    qry_Version.ParamByName('archivo').LoadFromFile(txt_Ruta.Text, ftBlob);             
    qry_Version.ExecSQL;             
    ShowMessage('Nueva versión subida correctamente.');            
    Close;          
  except             
    Error(10, mtError);          
  end;          
  qry_Version.Close;

El código usado para descargar el archivo subido previamente es:
Código Delphi [-]
var
  qry_Version: TQuery;   
  sql: String; 
  ...  
  sql:='SELECT Archivo FROM Administracion WHERE Tipo=''UltimaVersion''';       
  try          
    Abrir_qry(qry_Version, sql);          
    if (qry_Version.RowsAffected>0) then begin
      TBlobField(qry_Version.FieldByName('Archivo')).SaveToFile(dlg_Guardar.Filename);             
      ShowMessage('Archivo descargado.' +#10 + dlg_Guardar.FileName);          
    end          
    else Error(53, mtError);       
  except          
    Error(10, mtError);       
  end;
  qry_Version.Close;

Es cuando descargo el archivo que sólo me lo crea de 32Kb.
Gracias de antemano

Última edición por Casimiro Notevi fecha: 21-03-2011 a las 12:14:43. Razón: Poner las etiquetas [delphi] correctamente [/delphi]
Responder Con Cita
  #6  
Antiguo 16-10-2013
iparraguirre89 iparraguirre89 is offline
Registrado
NULL
 
Registrado: oct 2013
Posts: 1
Poder: 0
iparraguirre89 Va por buen camino
Revisa los parametros del my.ini

Revisa el parámetro:
max_allowed_packet, es el que se encarga de limitar el tamaños de los archivos.
Ej.
max_allowed_packet=100mb
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Quitar proteccion para guardar en una particion del disco duro ingabraham Varios 6 01-02-2011 15:56:43
Problema:Carpetas en la particion de mi disco duro jbautista Varios 5 05-11-2010 22:49:08
Problema con Windows Xp o tal vez Disco Duro vick Windows 2 07-12-2006 13:54:02
Problema con EAccessViolation en Disco Duro salvica OOP 6 03-09-2004 22:39:21
datos del disco duro seduerey Varios 2 01-07-2003 22:13:09


La franja horaria es GMT +2. Ahora son las 03:35:54.


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
Copyright 1996-2007 Club Delphi