Autor Tema: Guardar imagen en mysql  (Leído 2073 veces)

0 Usuarios y 1 Visitante están viendo este tema.

javierjava

  • Kilobyte
  • **
  • Mensajes: 54
  • Reputación: +5/-0
    • Ver Perfil
Guardar imagen en mysql
« en: Septiembre 18, 2011, 06:11:53 pm »
Que tal resulta que tengo que hacer un pequeño ejemplo de como guardar y recuperar una imagen en mysql pues ya logre que guardar la imagen pero no logro que lo recupere no se si alguien me puede ayudar en como recuperarlo aqui esta el ejemplo http://www.4shared.com/get/LhYAmUux/Guardar_imagen_en_mysql.html

Gracias y disculpen las molestias

seba123neo

  • Terabyte
  • *****
  • Mensajes: 744
  • Reputación: +83/-5
    • Ver Perfil
Re:Guardar imagen en mysql
« Respuesta #1 en: Septiembre 18, 2011, 06:30:50 pm »
Hola, vi por arriba el ejemplo y vi que abris la conexion en cada boton, la conexion de la base debe estar abierta siempre y declarada como publica en un modulo y abierta desde ahi, preferiblemente en el Sub_Main del modulo. no tenes que estar abriendo la conexion en cada consulta que haces.

aca tenes como se usa la clase ADODB.Stream que es la que estas usando para guardar las imagenes.

Ado Stream - Almacenar y recuperar imágenes

hasta hace poco yo tenia un sistema que lo hacia con este metodo, pero desde que descubri otro mucho mejor no lo uso mas.

si queres ver el metodo mira este post.

Convertir array de bytes a String y viceversa

saludos.
Quien nunca ha cometido un error nunca ha probado algo nuevo - Albert Einstein

E N T E R

  • Terabyte
  • *****
  • Mensajes: 956
  • Reputación: +54/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Guardar imagen en mysql
« Respuesta #2 en: Septiembre 18, 2011, 08:06:29 pm »
seba123neo Este es la 2da ves que veo diciendo que no hay que abrir y cerrar la conexión que repercusiones puede tener hacer eso. Podrías poner un ejemplo de como vos estas haciendo las cosas.

Por ejemplo consultar 2 tablas o mas y Guardar en mas de 1 tablas, al mismo tiempo sin cerrar ninguna conexión. Por que la verdad yo tambien me manejo mas o menos como esta haciendo el amigo javierjava. Nunca tuve problemas con mi soft trabajando en red.

Saludos !!!
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com

seba123neo

  • Terabyte
  • *****
  • Mensajes: 744
  • Reputación: +83/-5
    • Ver Perfil
Re:Guardar imagen en mysql
« Respuesta #3 en: Septiembre 18, 2011, 08:26:47 pm »
seba123neo Este es la 2da ves que veo diciendo que no hay que abrir y cerrar la conexión que repercusiones puede tener hacer eso. Podrías poner un ejemplo de como vos estas haciendo las cosas.

Por ejemplo consultar 2 tablas o mas y Guardar en mas de 1 tablas, al mismo tiempo sin cerrar ninguna conexión. Por que la verdad yo tambien me manejo mas o menos como esta haciendo el amigo javierjava. Nunca tuve problemas con mi soft trabajando en red.

Saludos !!!

viste poco, porque lo abre dicho 50 veces jaja, y en varios foros.

normalmente los que hacen eso son porque no han leido mucho del tema ADO y solo han copiado "partes de ejemplos" y han tratado de armar el codigo, no los culpo, pero si te fijas en cualquier ejemplo basico de ADO siempre hacen lo que yo digo, en recursosvisualbasic hay 2 o 3 eemplos de ABM con ADO y estan asi, pero no tengo la razon porque haya 2 o 3 ejemplos que lo hagan , sino porque REALMENTE se tiene que hacer asi, ¿aparte es logico no ? abrir y cerrar la conexion para cada consulta que hagamos es un despilfarro de recursos, capas la conexion "no tarda nada" en conectarse, pero si llegas a hacer eso en un sistema de gestion con cientos de pantallas te rajan, aun siendo un sistema con 1 pantalla esta mal hecho.

es simple, creas la variable de conexion en un modulo (BAS), y en el Sub_Main del modulo creas la variable y la abris, y te queda abierta en todo el programa, nunca mas la tenes que abrir.

aca lo he explicado:

textbox y datagrid vb6

saludos.
Quien nunca ha cometido un error nunca ha probado algo nuevo - Albert Einstein

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2366
  • Reputación: +130/-34
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Guardar imagen en mysql
« Respuesta #4 en: Septiembre 18, 2011, 09:01:19 pm »
Recuerdo que también te lo dije por MSN una vez, pense que te habia aclarado el punto, si yo fuera una nena estaría con lo brazos cruzados, mirando a otro lado y azotándote con el látigo de mi desprecio jajajaj.

Doc, el argumento que expone sebas del despilfarro de recursos es suficiente razón para hacerlo como se debe, una sola vez al levantar la aplicación y cerrar cuando muere la aplicación.

Ahora, si quieres nos vamos por la practicidad del asunto, tu abres la conexión 1 sola vez y luego literalmente te olvidas de estarla volviendo abrir por cada consulta que hagas, y no solo eso, otra cosa, suma toda las lineas de código o llamadas que haces a tu conexión y veras que hay un desperdicio de código redundante allí, así sea: AbrirConexion.

Quizá en ciertas aplicaciones pequeñas o medianas trabajando de la forma repetitiva no se "sienta" este despilfarro de code y recursos pero estas adquiriendo una mala practica sobre el tema y ya estas obligado a siempre recordar que tienes que abrir la conexión por cada consulta o transacción.

Deja el lado oscuro de la fuerza, y únetenos. Veras que sera mejor.

Saludos
Me encuentras en YAcosta.com

javierjava

  • Kilobyte
  • **
  • Mensajes: 54
  • Reputación: +5/-0
    • Ver Perfil
Re:Guardar imagen en mysql
« Respuesta #5 en: Septiembre 19, 2011, 09:13:12 pm »
Gracias por la ayuda me sirvió mucho  los ejemplos   ;D

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 76
  • Reputación: +26/-3
    • Ver Perfil
Re:Guardar imagen en mysql
« Respuesta #6 en: Noviembre 01, 2011, 02:51:20 am »
el mio funciona hasi:

estructura de la table:
foto es longblob

Dim XStyle as String
dim dB  as new ADODB.Connection'

buscar la imagen:

Private Sub Form_Load()
XStyle = App.Path & "\"
End Sub

Private Sub BuscarImg(ByVal XTex As String, ByVal XImg As Image)
 Dim RsEmpImg As New ADODB.Recordset
 Dim RsFot As New ADODB.Stream
 RsEmpImg.Open "SELECT codigo, foto FROM mascota WHERE codigo=" & Val(XTex) & "", dB, 1, 1
 
 If RsEmpImg.RecordCount = 0 Then
  XImg.Picture = LoadPicture("")
  Exit Sub
 End If
 RsFot.Type = adTypeBinary
 RsFot.Open
 If IsNull(RsEmpImg.Fields("FOTO")) = False Then
  RsFot.Write RsEmpImg.Fields("FOTO").Value
  RsFot.SaveToFile XStyle & XTex & ".jpg", adSaveCreateOverWrite'guardamos en disco
  XImg.Picture = LoadPicture(XStyle & XTex & ".jpg")'cargamos imagen del disco
  Kill XStyle & XTex & ".jpg"'borramos la foto del disco (se tiene q tener en cuenta el peso de la imagen)
 Else
  XImg.Picture = LoadPicture("")'si no tiene foto'podemos colocar una imagen q no tiene foto
 End If
 RsFot.Close
 Set RsFot = Nothing
 RsEmpImg.Close
 Set RsEmpImg = Nothing
End Sub

para llamarlo seria hasi:
Call BuscarImg(MiGri1.CellText(MiGri1.Row, 0), Me.Image1)'filtramos por codigo

para grabar seria:
 Dim XNuevaRutaImg As String
 XNuevaRutaImg = XStyle & Text2.Text & ".jpg"
  If XNuevaRutaImg  <> "" Then
   Dim RsFotMod As New ADODB.Recordset
   Dim RsFot As New ADODB.Stream
   RsFot.Type = adTypeBinary
   RsFot.Open
   RsFotMod.Open "SELECT codigo, foto FROM mascota WHERE codigo=" & Val(Text1.Text) & "", dB, 1, 1
   If RsFotMod.RecordCount <> 0 Then
    RsFot.LoadFromFile XNuevaRutaImg
    RsFotMod.Fields("foto").Value = RsFot.Read
    RsFotMod.Update
    RsFotMod.Close
    Set RsFotMod = Nothing
    RsFot.Close
    Set RsFot = Nothing
   End If