Autor Tema: SQL SERVER e Imagenes  (Leído 12776 veces)

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

wolf_kof

  • Visitante
SQL SERVER e Imagenes
« en: Febrero 11, 2010, 12:26:51 am »
Hola a todos, Graxias por sus consejos me han servido mucho, especialmente agradesco a SSCCAANN por su tiempo al darme soluciones.

AHORA tengo un problema que creo que no es tan grandre, pero por ingnorancia tambien se peca, Como guardo una Imagen en SQL Server 2000 con VB 6.0 Utilizando ADODC1

saben que no me gustan las conexiones por codigo prefiero lo grafico

GRACIAS POR LA AYUDA DE ANTEMANO

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:SQL SERVER e Imagenes
« Respuesta #1 en: Febrero 11, 2010, 01:10:35 am »
Te explico, lo mejor que puedes hacer es almacenar la ruta del archivo jpg que es más liviano que bmp en la bd. y mantienes todas las imagenes o fotos en un directorio, identificada por el codigo que tenga el registro en la tabla de tu bd. Cuando llames o busques al registro, pues haces un Load.Picture y ya! espero me hayas comprendido...!
Miguel Núñez.

wolf_kof

  • Visitante
Re:SQL SERVER e Imagenes
« Respuesta #2 en: Febrero 11, 2010, 01:44:31 am »
Ok Comprendido!!!, pero queria guardarlas en la BD  :'(

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:SQL SERVER e Imagenes
« Respuesta #3 en: Febrero 11, 2010, 04:10:35 am »
3 cajas de texto
3 botones
1 Image1
1 Adodc1
1 CommonDialog1

Codigo de sql La Base de datos se llama ejmplo :)
Código: [Seleccionar]
Create database ejmplo
go
use ejmplo
go

Create table usuarios(
cod_usu char(4) primary key,
nom_usu varchar(15),
apel_usu varchar(30),
foto_usu image
)

Insert into usuarios values('Usu1','Jean Carlos','Lizano Arroyo',null)
Insert into usuarios values('Usu2','Carlos','Liza oyo',null)
Insert into usuarios values('Usu3','Pedro','Lizano Arro',null)
Insert into usuarios values('Usu4','Jose','Lizano royo',null)
Insert into usuarios values('Usu5','Luis','Lio Arroyo',null)
Insert into usuarios values('Usu6','Miguel','no Arroyo',null)
select * from usuarios

Luego en Vb6.0 en el form1

claro no en el control adodc1 le tienes q dar en sus propiedades
el Adodc1.ConnectionString pero creo que eso ya sabes si tienes alguna duda avisa ok o si sale algun error

en el diseño en Propiedades de la cajas de texto pones
del text1
DataSource=adodc1
DataField=cod_usu
del text2

DataSource=adodc1
DataField=nom_usu

del text3
DataSource=adodc1
DataField=apel_usu

del Image1
DataSource=adodc1
DataField=foto_usu

Código: [Seleccionar]

Option Explicit

Dim sRutaImg As String
Dim Data() As Byte

Private Sub Command1_Click()
Adodc1.Recordset.MoveLast
Adodc1.Recordset.AddNew
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Image1.Picture = Nothing
End Sub

Private Sub Form_Load()
Image1.Stretch = True
End Sub

Private Sub Command2_Click()
Adodc1.Recordset.Fields(0) = Text1.Text
Adodc1.Recordset.Fields(1) = Text2.Text
Adodc1.Recordset.Fields(2) = Text3.Text
Adodc1.Recordset.Fields(3) = Data
Adodc1.Recordset.Update
Adodc1.Recordset.MoveFirst
End Sub

Private Sub Command3_Click()
Adodc1.Recordset.CancelUpdate
Adodc1.Recordset.MoveFirst
End Sub

Private Sub convertir_imagen(sImg As String)
On Error GoTo error_Sub
    Dim fLen As Long
    Open sImg For Binary Lock Read As 1
    fLen = FileLen(sImg)
    ReDim Data(fLen) As Byte
    Get #1, , Data
    Close
Exit Sub
error_Sub:
MsgBox Err.Description, vbCritical
End Sub

Private Sub Image1_DblClick()
CommonDialog1.DialogTitle = "Seleccione una imagen"
CommonDialog1.Filter = "Imagenes|*.jpg"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
   sRutaImg = CommonDialog1.FileName
   Image1.Picture = LoadPicture(sRutaImg)
   convertir_imagen sRutaImg
End If
End Sub

pero como dicen arriba es mejor ponerlo en una carpeta y de ahi jalarlos para q la bd no se llene rapidamente
suerte

saludos
« última modificación: Febrero 11, 2010, 04:44:38 am por k_arlytos »
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:SQL SERVER e Imagenes
« Respuesta #4 en: Febrero 11, 2010, 09:43:00 am »
Ok Comprendido!!!, pero queria guardarlas en la BD  :'(

No almacenes imagenes en BD, no es recomendable. Pero de igual manera ya es desición tuya. Creeme, tengo muchos años con esto y lo mejor es hacerlo como te dije anteriormente.

Una gran anecdota, me pidieron un software de digitalización de documentos. Donde la empresa requiere escanear documentos fisicos sea pasaporte, carnet o cedula de identidad, partida o acta de nacimiento, documento de vehiculo, etc y asignarlos o referenciarlos al respectivo cliente. Te imaginas si guardo todo eso en una BD donde tengo una cartera de cliente de 20mil registros y donde la lista de documentos por cliente supera los 300? Se vuelve una locura y no creo que llegue al mes la BD. Su tamaño sería monstruoso. Por tal motivo se crearon directorios en un Disco Duro que servía de Exclavo de 1TB y se desarrollo el software donde solo almacenabamos el nombre del archivo, mejor dicho el nombre de las imagenes. La gran respuesta del cliente fue, luego de usar el software:

El sistema es excelente. Su motor de busqueda es rápido. Puedo visualizar toda la información en segundos.

Crees que hubiese sido la misma respuesta de haber almacenado las imagenes en la BD?

Saludos, y sigue adelante aún queda camino por recorrer... Aquí siempre encontrarás apoyo...!
Miguel Núñez.

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:SQL SERVER e Imagenes
« Respuesta #5 en: Febrero 11, 2010, 10:35:33 pm »
bueno creo que el tema ya lo he discutido un par de veces con ssccaann43, no me acuerdo si fue en este foro o en elhacker.net, que parece que somos los unicos que manejamos el tema de base de datos, yo tambien te puedo dar mi opinion.

obviamente en el ejemplo de ssccaann43, seria un kamikaze si se hubiera puesto a guardar esa cantidad de imagenes en la base de datos, entre pasaporte, cedula..etc...y todo eso para cada cliente que eran 20 mil aprox...obviamente en este caso guardarlo en base de datos seria pesimo.

pero que pasa si no es asi y no tenes que poner esa cantidad de imagenes en la base...otra es la historia.

antes decir que todo esto tambien depende de muchos factores, por ejemplo la velociadad de la pc que ejecute el software, no es lo mismo una de una maquina de 1 procesador que una Quad Core.

tambien depende la forma en que lo programas y el motor de bases de datos que uses, yo por comodidad uso SQL Server 2005 que digamos hoy en dia es el "standart". y usaria ADO desde codigo que es lo mejor (ya se ha dicho mil veces en el foro) , antes que usar ADODC.

yo hice un software que cada "cliente" (en realidad no son clientes, pero imaginemos que lo son) puede guardar su foto, y esto lo ha pedido una empresa donde la misma cuenta con expertos, y sin embargo lo pidieron obligadamente, sabiendo las consecuencias que podia traer si es tan malo guardar las imagenes en la base, lo pidieron y se hizo.

uno tambien puede hacer que el usuario seleccione imagenes de determinado tamaño, eso para evitar el crecimeinto de la base, supongamos que tenemos el exagerado (con respecto al que yo estoy comentando ya que esta entre 4000 y 6000 registros) ejemplo de 20 mil registros del sistema de ssccaann43, supongamos que ponemos una foto de 10 kb que es como la foto de un documento de identidad, la base tendria un crecimiento de aprox 200 MB...lo cual si uno se pone a pensar es algo bastante grande, aparte imaginemos que tenemos las fotos de los 20 mil clientes, cosa que no creo, pero con el mio que tiene 4000 eso seria 50 MB, lo cual la verdad no me parece nada alto el tamaño, pensar que existen bases de datos de GB de tamaño.

por eso como veras esto depende de muchas cosas, depende de lo que hace tu sistema...grabar imagenes en al base de datos tiene sus ventajas y desventajas, pero creo que uno puede usarlo tranquilamente si sabe cuando usarlo realmente, ya que creo que por algo lo crearon, sino no existiria.una de las simples ventajas es que uno al hacer backup tiene todas las imagenes dentro...el tema de guardarlas fuera es si alguien modifica o elimina las fotos puede hacer un desastre, en cabmio si uno lo maneja desde el sistema, tiene mas "control" sobre las modificaciones...bueno esas son algunas ventajas, pero como te dije depende de lo que queres, y aun asi el sistema que yo comente funciona perfecto aun guardando imagenes en al base
, y no se percibe diferencia en si tiene imagen o no.pero como te dije todo "depende" , por eso vos vas a saber que hacer.

saludos.

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:SQL SERVER e Imagenes
« Respuesta #6 en: Febrero 12, 2010, 12:14:09 am »
Excelente seba, mejor no puede ser... El tiene ya 2 opiniones de expertos que han trabajado con dicho requerimiento...! Buenisimo...!
Miguel Núñez.

wolf_kof

  • Visitante
Re:SQL SERVER e Imagenes
« Respuesta #7 en: Febrero 12, 2010, 01:43:47 pm »
De verdad muchas gracias  :o

He tenido un poco de inconvenientes en los proyectos por que me los piden con imagenes desde el datareport por que no se por que no puedo utilizar el crystal report, y la base de datos, al principio utilizaba access para crear las bases de datos ahora estoy utilizando sql server 2000 por que no he podido descargar el 2005 pero creo que tendre que hacerlo.

Les cuento estoy teniendo problemas por que estoy generando un sistema para colegios que me pide que lleve el control de los estudiantes por imagenes y me tire a crear una carpeta donde pego la foto por codigo y solo enlaso la dirección para que la base de datos no pese mucho pero no me ha subido de 2 megas la base de datos y pues les cuento cada año un colegio promedio aqui tiene 300 estudiantes por jornada y son 3 jornadas digamos 1000 estudiantes por total, cada año, eso significa que son 5000 en 5 años, y tener todas esas fotografias en una carpeta ami se me vuelve un poco tedioso por aquello de que si borran una foto ya no cargo o algo

si quisiera manejarlo en la base de datos y ahora con la opinion de sebas me parece que lo voy a volver a intentar aver como me va.

Aunque para entregar el proyecto voy a utilizar la alternativa que me dio SSCCAANN por que se escucha rapida, pero lo intentare solo como referencia.

DESDE YA MUCHAS GRACIAS Y SCCAANN Y SEBAS SON UNOS MOUSTRUOS  ;)
« última modificación: Febrero 12, 2010, 02:02:11 pm por wolf_kof »

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:SQL SERVER e Imagenes
« Respuesta #8 en: Febrero 12, 2010, 05:14:56 pm »
Puedes armarte con la alternativa de sebas ya que podrías soportar una cierta cantidad de alumnos y solo almacenarías una foto x alumno... Y en tal caso de que te encuentres con algo inmenso pues realizas el levantamiento de información y allí determinarás que opción usar...
Miguel Núñez.

Nano-rosario

  • Bit
  • Mensajes: 4
  • Reputación: +0/-0
    • Ver Perfil
Re:SQL SERVER e Imagenes
« Respuesta #9 en: Febrero 12, 2010, 07:23:59 pm »
Justo esta es mi duda, estoy portando un sistema erp que hice en vb a Python pero mejorandolo.... tengo clientes con hasta 100.000 articulos y hasta ahora usaba el metodo de scann, pero si tienen mas de una sucursal, hay que instalar servidores de archivos, para poder subir, borrar las fotos, mas code y mas procesos, por eso decidi meter las fotos en la db, y abrir las consultas a la tabla sin el campo foto, y en otro thead abrir las fotos, para no colgar el sistema mientras se baja, la foto, lo voy a probar... y dsp le cuento, lo estoy programando ahora...

saludos
« última modificación: Febrero 12, 2010, 07:26:57 pm por Nano-rosario »

wolf_kof

  • Visitante
Re:SQL SERVER e Imagenes
« Respuesta #10 en: Marzo 09, 2011, 03:06:34 pm »
Mira yo por lo general tambien lo hago con el metodo de SSCCAANN pero tengo un sistema de restaurantes que estoy haciendo y necesite meter las imagenes en la base de datos... investigando un poco logre tener un par de fuentes que me ayudaron a armar este modulo

Código: [Seleccionar]
Option Explicit
Private Pic As IPictureDisp

Public Function ImportImagen(Item As ADODB.Field, Pic As Image)
Dim Stream As ADODB.Stream
Set Stream = New ADODB.Stream
Stream.Type = adTypeBinary
Stream.Open
Stream.Write Item.Value
Stream.SaveToFile App.Path & "\temp", adSaveCreateOverWrite
Pic.Picture = LoadPicture(App.Path & "\temp")
End Function

Public Function ImportImagen2(nombre As String, Item As ADODB.Field, Pic As PictureBox)
Dim Stream As ADODB.Stream
Set Stream = New ADODB.Stream
Stream.Type = adTypeBinary
Stream.Open
Stream.Write Item.Value
Stream.SaveToFile App.Path & "\" & nombre, adSaveCreateOverWrite
Centrar_Imagen Pic, App.Path & "\" & nombre
Kill App.Path & "\" & nombre
End Function


Public Function ImportFileImagen(Item As ADODB.Field, clave As ADODB.Field)
Dim Stream As ADODB.Stream
Set Stream = New ADODB.Stream
Stream.Type = adTypeBinary
Stream.Open
Stream.Write Item.Value
Stream.SaveToFile App.Path & "\" & clave, adSaveCreateOverWrite
End Function

Public Function ImportReportImagen(Item As ADODB.Field)
Dim Stream As ADODB.Stream
Set Stream = New ADODB.Stream
Stream.Type = adTypeBinary
Stream.Open
Stream.Write Item.Value
Stream.SaveToFile App.Path & "\logocolegio", adSaveCreateOverWrite
End Function

Public Function ExportImagen(urlimg As String, Item As ADODB.Field)
On Error GoTo errimg
Dim Stream As ADODB.Stream
Set Stream = New ADODB.Stream
Stream.Type = adTypeBinary
Stream.Open
Stream.LoadFromFile urlimg
Item.Value = Stream.Read
Exit Function
errimg:
End Function

Sub Centrar_Imagen(Objeto As Object, Path_Imagen As String)

On Error GoTo ErrSub

Dim Pos_x As Single 'Posición horizontal de la imagen
Dim Pos_y As Single 'Posición vertical de la imagen
Dim Ancho_IMG As Single 'Ancho de la imagen
Dim Alto_IMG As Single 'Alto de la imagen
Dim Ancho_Obj As Single 'Ancho en Pixeles del objeto contenedor
Dim Alto_Obj As Single 'Alto en Pixeles del objeto contenedor
Dim old_Scale As Single 'Para lamacenar el ScaleMode del objeto

Static old_Path As String
   
    If old_Path <> Path_Imagen Then
       Set Pic = LoadPicture(Path_Imagen)
    End If
   
    With Objeto
   
    .AutoRedraw = True
    .Cls
   
    old_Scale = .ScaleMode
   
    .ScaleMode = vbPixels
   
    'Pasa el ancho y alto de la imagen a Pixeles
    Ancho_IMG = .ScaleX(Pic.Width, vbHimetric, vbPixels)
    Alto_IMG = .ScaleY(Pic.Height, vbHimetric, vbPixels)
   
    Ancho_Obj = .ScaleWidth
    Alto_Obj = .ScaleHeight
   
        If Ancho_IMG > Ancho_Obj Then
            Alto_IMG = Alto_IMG * Ancho_Obj / Ancho_IMG
            Ancho_IMG = Ancho_Obj
        End If
        If Alto_IMG > Alto_Obj Then
            Ancho_IMG = Ancho_IMG * Alto_Obj / Alto_IMG
            Alto_IMG = Alto_Obj
        End If

    ' Posición X e Y donde dibujar con PaintPicture
    Pos_x = (Ancho_Obj - Ancho_IMG) / 2
    Pos_y = (Alto_Obj - Alto_IMG) / 2
   
    End With
   
    'Dibuja la imagen
    Objeto.PaintPicture Pic, Pos_x, Pos_y, Ancho_IMG, Alto_IMG
   
    'Restaura el ScaleMode
    Objeto.ScaleMode = old_Scale
   
    old_Path = Path_Imagen
   
    Exit Sub
   
'Error
ErrSub:
    MsgBox Err.Description, vbCritical
   
End Sub


por el momento a mi me funciona muy bien!!!!!

hackestat

  • Bit
  • Mensajes: 1
  • Reputación: +0/-0
    • Ver Perfil
Re:SQL SERVER e Imagenes
« Respuesta #11 en: Junio 19, 2013, 01:45:39 pm »
Saludos,

Quisiera consultarles algo, tengo una base de datos MSSQL 2012 y quiero guardar las rutas de una imagenes en una tabla, la ruta apunta a una carpeta del  disco duro,como puedo insertar el vinculo y verlo desde php e insertarlo en un archivo de excel con la libreria phpexcel?

les agradezco mucho su ayuda.