canal visual basic .net

Recursos Visual Basic.NET, VB.NET, Manuales de programación, Tutoriales, Foros de programación, Comunidad de programadores

Usuarios activos:  79

Foros de programación, recursos, tutoriales, sistemas operativos...

Bienvenido a la zona de foros. Participa en alguno de nuestros foros: Foros de visual basic, foros de visual basic.net foros de Crystal reports, programas gratis, foros de C++ - C# , foros de Java, foros de PHP, foros de ASP.net. Seguro que hay un foro que te servirá de gran utilidad y si no lo encuentras avísanos y crearemos uno nuevo.
Resultados 1 al 16 de 16
  1. #1
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado Ayuda para cargar foto y guaradarla en vb.net

    hola estoy untilizando un openfiledialog para carga en un picture vos ok despues al cargarlo quiero guaradarlo en una base de datos de access usando datos de origen ODBC con ado.net pero anticipo que ya logre subir la imagen lo que nose como rayos es ahora guardarla en la base de datos en access y que campo usar en la tabla y aki pongo el codigo para subir la imagen


    ************

    lo escribo en el evento click de

    Dim OpenFileDialog As New OpenFileDialog
    Dim filename As String

    OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocume nts
    OpenFileDialog.Filter = "Archivos de imagen (*.JPEG)|*.jpg|Todos los archivos (*.*)|*.*"
    If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
    FileName = OpenFileDialog.FileName 'aqui guarda la ruta en la variable
    Me.PictureBox1.Image = New Bitmap(filename) 'carga la imagen en el picturebox
    End If


    bueno espero ayuda

  2. #2
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    184

    Predeterminado

    Access es una plataforma un poco limitada en cuanto a la manipulacion de imagenes. Las imagenes en los gestores de base de datos se manipulan por bytes y Access no posee un tipo de dato compatible. Sin embargo puedes utilizar el tipo de dato Objeto OLE.
    Una vez creado el campo en tu BD (que para este ejemplo lo voy a llamar foto) la manera de pasar el contenido de tu PictureBox a dicho campo mediante ODBC seria:
    Código:
    1. Dim cmd as OdbcCommand
    2. cmd = New OdbcCommand("INSERT INTO TuTabla (foto) VALUES (?)", TuConexion)
    3.  
    4. Dim msImagen As New System.IO.MemoryStream
    5. PictureBox.Image.Save(msImagen, System.Drawing.Imaging.ImageFormat.Jpeg)
    6. cmd.Parameters.Add("", OdbcType.VarBinary).Value = msImagen.GetBuffer()
    7. cmd.ExecuteNonQuery()
    De esa forma guardas la imagen de tu picturebox en un stream de memoria temporal, el cual luego es pasado a un command ODBC, se ejecuta el command y de esa forma se libera el stream de memoria y se almacena la imagen en el campo OLE de tu BD. Logicamente tienes que tener una conexion a la base de datos declarada y abierta (supongo que eso ya lo sabes, de no ser asi preguntas y te paso el codigo)
    Suerte

  3. #3
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado

    ok mira he tratado pero me tira un erros que dice: Controlador ODBC Microsoft Access] El índice o la clave principal no puede contener un valor Null.

    mire cargo la imagen sin ningun problema en un picturebox luego en un boton pongo este codigo que tu me diste y la conxion nose si la tengo mal la conexion pero te mando el codigo para ver si esta bien o si no me ayudes ok gracias ahi va el codigo:

    conexion = New OdbcConnection
    conexion.ConnectionString = "dsn=bienesraices"
    conexion.Open()
    Dim cmd As OdbcCommand
    cmd = New OdbcCommand("INSERT INTO alquiler (foto1) VALUES (?)", conexion)
    Dim msImagen As New System.IO.MemoryStream
    PictureBox2.Image.Save(msImagen, System.Drawing.Imaging.ImageFormat.Jpeg)
    cmd.Parameters.Add("", OdbcType.VarBinary).Value = msImagen.GetBuffer()
    cmd.ExecuteNonQuery()
    conexion.Close()

    como te digo la tabla se llama alquiler y tengo los campos de lugar, descipcion, precio, direccion, foto1(que es donde guaradaria el picturebox) y nose mira a ver que es lo que tengo mal

  4. #4
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    184

    Predeterminado

    Hola jonny
    el codigo es correcto asi como lo tienes. el problema es que cuando grabas un nuevo registro en una tabla de tu BD debes especificar todos los campos requeridos. Es decir, si en tu estructura de tabla tienes algun campo definido como no nulo entonces siempre que se intente grabar un registro se debe pasar un dato para esos campos. Especialmente para los campos que son llave en la tabla (las llaves nunca pueden ser nulas).
    Entonces para grabar tu registro ademas de pasar la imagen debes pasar los datos correspondientes a los campos requeridos.
    No puedo darte mayor referencia puesto que no conozco la estructura de tu tabla pero me parece que lo explique bien. En caso contrario lo dices para tratar de guiarte de mejor forma.

  5. #5
    cristiantorres está desconectado Junior Member Iniciad@
    Fecha de ingreso
    07 abr, 12
    Mensajes
    10

    Predeterminado

    Acces es un tipo de bd muy limitada porque mejor no usas sql server aunque sea la version express que es gratuita y muchisimo mejor que acces.

    Este articulo te puede servir Guardar y Mostrar Imagenes de Base de Datos en .Net

  6. #6
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado

    ok roy mira mi tabla la tengo de esta forma:
    lugar=texto(llave principal)
    direccion=texto
    precio=numero
    descripcion=texto
    foto1=obejto ole
    foto2=obejto ole
    foto3=obejto ole

    asi la tengo y he tratado de hacer que en esse mismo codigo insertar los demas datos pero no he podido asi que ayudame por favor

    y cristian lo que pasa que en la clase solo usamos access por medio de origen de datos odbc creo que luego usaremos
    sql server y gracias por el aporte

  7. #7
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    184

    Predeterminado

    En ese caso, cuando creas tu command le pasas el nombre de tus campos:
    Código:
    1. cmd = New OdbcCommand("INSERT INTO alquiler (lugar, direccion, precio, descripcion, foto1, foto2, foto3) VALUES (?, ?, ?, ?, ?, ?, ?)", conexion)
    Considera que en el argumento VALUES debes incluir tantos simbolos de interrogacion ? como cantidad de campos quieras incluir en los parametros. Si alguno de los campos acepta valores nulos entonces puedes eliminarlo de tu sentencia INSERT.
    Finalmente al agregar los parametros pasas los valores en el mismo orden que llevan en la clausula INSERT:
    Código:
    1. cmd.Parameters.Add("", OdbcType.VarChar).Value = tuValorParaLUGAR
    2. cmd.Parameters.Add("", OdbcType.VarChar).Value = tuValorParaDIRECCION
    3. cmd.Parameters.Add("", OdbcType.Int).Value = tuValorParaPrecio
    4. cmd.Parameters.Add("", OdbcType.VarChar).Value = tuValorParaDESCRIPCION
    5. cmd.Parameters.Add("", OdbcType.VarBinary).Value = msImagen1.GetBuffer()
    6. cmd.Parameters.Add("", OdbcType.VarBinary).Value = msImagen2.GetBuffer()
    7. cmd.Parameters.Add("", OdbcType.VarBinary).Value = msImagen3.GetBuffer()
    Si quieres especificar de mejor manera estos parametros para que tu codigo sea mas entendible, el primer argumento que recibe la propiedad Add del objeto Parameters es el nombre del parametro. Entonces ahi puedes pasar el nombre del campo para una mejor identificacion:
    Código:
    1. cmd.Parameters.Add("lugar", OdbcType.VarChar).Value = tuValorParaLUGAR
    2. 'y de igual forma para cada uno de los parametros

  8. #8
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado

    hola de nuevo mira me he quebraso el cerebro porque nose que signos son los que tengo que utilizar para el valor de la imagen te mando el codigo para que lo mires y me digas que tengo de mal y me ayudes con esos signos ok te lo agradecere

    Private Sub guardarfotos()


    Dim msImagen As New System.IO.MemoryStream
    conexion = New OdbcConnection
    conexion.ConnectionString = "dsn=bienesraices"
    conexion.Open()
    Dim cmd As OdbcCommand
    cmd = New OdbcCommand("INSERT INTO alquiler (lugar,foto1)values("& / msImagen / &" )", conexion)
    cmd.Parameters.Add("lugar", OdbcType.VarChar).Value = Me.txtnombre.Text
    PictureBox2.Image.Save(msImagen, System.Drawing.Imaging.ImageFormat.Jpeg)
    cmd.Parameters.Add("foto1", OdbcType.VarBinary).Value = msImagen.GetBuffer()

    cmd.ExecuteNonQuery()
    conexion.Close()
    End Sub

    bueno a ver si me hechas la mano porque ya nose que hacer amigo

  9. #9
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    184

    Predeterminado

    En la sentencia INSERT, en la clausula VALUES no debes pasar ningun valor, solo signos de interrogacion (?), de esta forma:
    Código:
    1. cmd = New OdbcCommand("INSERT INTO alquiler (lugar,foto1) values (?, ?)", conexion)
    Luego cuando utilizas la funcion Add del objeto Parameters es cuando pasas los valores correspondientes a cada signo de interrogacion:
    Código:
    1. 'pasas el valor para el primer signo de interrogacion
    2. cmd.Parameters.Add("lugar", OdbcType.VarChar).Value = Me.txtnombre.Text
    3. PictureBox2.Image.Save(msImagen, System.Drawing.Imaging.ImageFormat.Jpeg)
    4. 'y luego para el segundo signo de interrogacion
    5. cmd.Parameters.Add("foto1", OdbcType.VarBinary).Value = msImagen.GetBuffer()
    Copia esas instrucciones de esa forma y tiene que funcionar

  10. #10
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado

    hola roy que tal y pues tenias razon el codigo funciono a la perfeccion y gracias nuevamente por tu ayuda ya me guarda las imagenes pero ahora no tengo la menor idea como hacer la consulta para llamar por medio de un dato y que carguen todos los datos guardados en la tabla y que vayan incluido las fotos y que se miren en un picturebox porque trate de hacerlo como una consulta normal pero nada y a ver que me aconsejas

  11. #11
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    184

    Predeterminado

    Para recuperar la info de tu tabla claro que lo haces con un query normal pero en el caso de las imagenes debes crear un stream donde almacenas el binary que te devuelve la consulta y luego lo muestras en tu picturebox. Del tema hay mucho material en internet donde puedes encontrar bastantes ejemplos. En este momento estoy algo presionado con mi trabajo por lo que se me complica un poco ser mas especifico. Busca en internet a ver que encuentras y si no nos comentas para ayudarte.
    Suerte

  12. #12
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado

    ok gracias entonces buscare hasta encontrarlo y gracias por la ayuda eres un genio.
    ahi te aviso a ver como voy ok

  13. #13
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado

    hola ahi disculpa que te moleste pero si tienes tiempo mandame un ejemplo porque no he podido encontrar nada ahi disculpa por tanta preguntadera jejejejeje

  14. #14
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    184

    Predeterminado

    Aqui tienes un muy buen ejemplo:
    Cómo mostrar una imagen de una base de datos en un PictureBox de formularios Windows Forms mediante Visual Basic .NET
    Para tu caso seria el punto 7 o el punto 11. En mi criterio personal preferiria utilizar la metodologia descrita en el punto 11.
    Suerte

  15. #15
    jonnybush está desconectado Junior Member Iniciad@
    Fecha de ingreso
    31 may, 12
    Mensajes
    22

    Predeterminado

    hola roy que tal, gracias por el link que me enviastes y mira con la informacion que esta ahi logre armar este codigo para que lo revises ya que no me tira ningun error pero no me carga la imagen el picturebox nose si faltara algo mas pero me guie por el ejemplo 11 tal como m recomendastes y hechale una revisada por favor a ver si me falta algo para que al final me cargue la imagen

    Private Sub cargarfoto()

    Dim conexion As New OdbcConnection()
    conexion.ConnectionString = "dsn=bienesraices"
    Dim cmd As New OdbcCommand("SELECT * FROM alquiler ORDER BY lugar", conexion)
    Dim dr As OdbcDataReader
    conexion.Open()
    dr = cmd.ExecuteReader()
    If dr.Read Then
    Dim leerimagen(dr.GetBytes(1, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
    dr.GetBytes(1, 0, leerimagen, 0, leerimagen.Length)
    Dim msImagen As New System.IO.MemoryStream(leerimagen)
    PictureBox2.Image = Image.FromStream(msImagen)
    End If
    dr.Close()
    End Sub

    nose si es porque no tengo declarado el campo de la foto para igualarlo a la hora de hacer la lectura

  16. #16
    RoyMata está desconectado Senior Member Avanzad@
    Fecha de ingreso
    06 ago, 11
    Ubicación
    Cartago, Costa Rica
    Mensajes
    184

    Predeterminado

    Notaras que en tu command estas trayendo todos los campos de tu tabla, no solamente la foto. Ademas no estas utilizando una clausula WHERE, lo que implica que vas a traer todos los registros de tu tabla. Entonces al cargar tu DataReader este contendrá tantos campos como campos tenga la tabla y tantos datos como registros contenga esta, entonces tu variable leerimagen no sabrá cual dato debe tomar para cargar el stream.
    Para solucionarlo debes redefinir tu consulta SELECT indicando el campo que quieres traer (en tu caso foto) y el registro correspondiente mediante una clausula WHERE (que supongo que seria algo como WHERE lugar = tulugar)

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Visual Studio .VisualBasic.net .ADO.NET .ASP.NET .Framework .Crystal report
[Visual Basic .NET · Información legal · Condiciones de uso · Publicidad · Contacto · RSS novedades Foro · Inicio]
Un sitio web de Internelia (Ontecnia) © Copyright 2013 canalvisualbasic.net. Todos los derechos reservados