| 1 Elinv, el 17 jun 2009, 05:18:53Hola aquí te dejo un pequeño programa que trabaja ADO sin el CONTROL, puro código.
En -->proyecto -->referencias ... tildas --->Microsoft ActiveX Data Objects 2.0 Library
En -->Proyecto -->Componentes ... tildas ---> Microsoft Common Dialog Control 6.0 (SP3)
En el formulario agregas:...
Tres textbox, un pictureboxd y 8 commandbutton
les pones los siguientes caption:...
------------------------------------------
Command1.caption ="Inicio"
Command2.caption ="Anterior"
Command3.caption ="Siguiente"
Command4.caption ="Final"
Command5.caption ="Nuevo"
Command6.caption ="Borrar"
Command7.caption ="Cargar Imagen"
Command8.caption ="Editar"
------------------------------------------
En la carpeta en la cual pongas el proyecto crea una sub carpeta "imagenes"
------------------------------------------
La base de datos access, deberá tener una tabla denominada "Tabla1" y por lo menos cuatro campos
1 ---> Apellido
2 ---> Nombres
3 ---> Mail
4 ---> Foto
------------------------------------------
Mas abajo te dejo el código del formulario
------------------------------------------------
Pero antes deseo decirte me parece que esta es la mejor manera de manejarse con fotos, es decir, guardando en la base solamente el texto del path con el nombre y la extensión de la imagen, a mas de que las vas nucleando todas en un directorio puntual, y de esta manera la base de datos no se sobredimensiona y funcionará perfectamente con pocos archivos como con una multitud.-
------------------------------------------
Bueno antes de dejarte el código, te manifiesto que no dudes en consultarme cualquier inquietud que tengas.
Gracias un abrazo.
Luis
------------------------------------------
Ahora el código explicado:
------------------------------------------
Option Explicit
' Objeto para acceder directamente a la base usando código
Private cnn As ADODB.Connection
' WithEvents permite tener acceso a los a los mismos eventos que con el ADO DataControl
Private WithEvents rst As ADODB.Recordset
'variable para la función -cargar_Imagen-
Private foto As IPictureDisp
'variable que se utiliza en el evento de crear un nuevo registro
Dim nuevo As Boolean
Private Sub Command1_Click()
On Error Resume Next
rst.MoveFirst
Call cargar_Imagen(Picture1, rst!foto)
End Sub
Private Sub Command2_Click()
On Error Resume Next
rst.MovePrevious
'Si se sobrepasa el inicio de la base, se mueve el puntero al primer registro
If rst.BOF Then
rst.MoveFirst
End If
Call cargar_Imagen(Picture1, rst!foto)
End Sub
Private Sub Command3_Click()
On Error Resume Next
rst.MoveNext
'Si se sobrepasa el final de la base, se mueve el puntero al ultimo registro
If rst.EOF Then
rst.MoveLast
End If
Call cargar_Imagen(Picture1, rst!foto)
End Sub
Private Sub Command4_Click()
On Error Resume Next
rst.MoveLast
Call cargar_Imagen(Picture1, rst!foto)
End Sub
Private Sub Command5_Click()
On Error Resume Next
'Si se presiona este comando se autoriza un nuevo registro
'Se mueve el foco al text 1
'la variable boolean nuevo se pone a True
'Se renombra el caption del comando Nuevo
'Se hace visible el comando -cargar imagen-
If nuevo = False Then
rst.AddNew
Text1.SetFocus
nuevo = True
Command5.Caption = "Grabar nuevo"
Command7.Visible = True
ocultarcontroles False
Else
Command5.Caption = "Nuevo"
Command7.Visible = False
nuevo = False
rst.Update
mostrarcontroles False
End If
End Sub
Private Sub Command6_Click()
On Error Resume Next
' Elimina el registro actual
rst.Delete
On Error Resume Next
' Mueve el puntero al siguiente registro
rst.MoveNext
' Si no puede mover al siguiente, se posiciona en el primer registro.
If rst.EOF Then
rst.MoveFirst
End If
End Sub
Private Sub Command7_Click()
On Error Resume Next
With CommonDialog1
.DialogTitle = " Seleccionar imagen"
.Filter = "BMP|*.bmp|JPEG|*.jpeg|GIF|*.gif|JPG|*.jpg|Todos|*.*"
.ShowOpen
If .FileName = "" Then
Exit Sub
Else
'Carga en nombre el path donde se ejecuta el programa, el directorio especificado
'y el nombre y la extensión de la imagen seleccionada.
Dim nombre As String: nombre = App.Path & "\imagenes\" & .FileTitle
'Copia la imagen seleccionada en el cuadro de dialogo en el lugar que dice la variable -nombre-
Call FileCopy(CommonDialog1.FileName, nombre)
'actualiza el campo -foto- con el valor de la variable -nombre-
rst!foto = nombre
'actualiza el picture1 con la nueva imagen seleccionada.
Call cargar_Imagen(Picture1, nombre)
End If
End With
End Sub
Private Sub Command8_Click()
On Error Resume Next
If Command7.Visible = False Then
Command7.Visible = True
Command8.Caption = "Grabar cambios"
ocultarcontroles True
Else
' Guardar el contenido de las cajas de texto
With rst
.Fields("Apellido") = Text1
.Fields("Nombres") = Text2
.Fields("Mail") = Text3
.Update
End With
Command8.Caption = "Editar"
Command7.Visible = False
mostrarcontroles True
End If
End Sub
Private Sub Form_Load()
On Error Resume Next
' Asignar el nombre de la base de datos
' (si la aplicación se ejecuta en el directorio raiz, quitar el \)
Dim sBase
sBase = App.Path & "\fotos.mdb"
' Crear los objetos
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sBase
rst.Open "SELECT * FROM Tabla1", cnn, adOpenDynamic, adLockOptimistic
' Conectar manualmente los Text1 al recordset
' Asignar el recordset al que estarán los datos conectados
' Esto funciona igual que si se conectaran a un DataControl,
' Por tanto no hay que preocuparse de actualizar el contenido, etc.
Set Text1.DataSource = rst
Set Text2.DataSource = rst
Set Text3.DataSource = rst
' Asiganr los nombres de los campos
Text1.DataField = "Apellido"
Text2.DataField = "Nombres"
Text3.DataField = "Mail"
rst.MoveFirst
Call cargar_Imagen(Picture1, rst!foto)
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Local Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
Sub cargar_Imagen(Objeto As Object, Path_Foto As String)
On Error Resume Next
Dim Pos_x As Single
Dim Pos_y As Single
Dim Anchoimagen As Single
Dim Altoimagen As Single
Dim Anchoobjeto As Single
Dim Altoobjeto As Single
Dim escalaoriginal As Single
Set foto = LoadPicture(Path_Foto)
With Objeto
.AutoRedraw = True
.Cls
escalaoriginal = .ScaleMode
.ScaleMode = vbPixels
Anchoimagen = .ScaleX(foto.Width, vbHimetric, vbPixels)
Altoimagen = .ScaleY(foto.Height, vbHimetric, vbPixels)
Anchoobjeto = .ScaleWidth
Altoobjeto = .ScaleHeight
If Anchoimagen > Anchoobjeto Then
Anchoimagen = Anchoimagen - (Anchoimagen - Anchoobjeto)
Altoimagen = Altoobjeto
End If
If Altoimagen > Altoobjeto Then
Altoimagen = Altoimagen - (Altoimagen - Altoobjeto)
Anchoimagen = Anchoobjeto - (Anchoimagen - Anchoobjeto)
End If
Pos_x = (Anchoobjeto - Anchoimagen) / 2
Pos_y = (Altoobjeto - Altoimagen) / 2
End With
Objeto.PaintPicture foto, Pos_x, Pos_y, Anchoimagen, Altoimagen
Objeto.ScaleMode = escalaoriginal
End Sub
Sub mostrarcontroles(control As Boolean)
Text1.Enabled = False
Text2.Enabled = False
Text3.Enabled = False
Command1.Enabled = True
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = True
If control = True Then
Command5.Enabled = True
Else
Command8.Enabled = True
End If
Command6.Enabled = True
End Sub
Sub ocultarcontroles(control As Boolean)
Text1.Enabled = True
Text2.Enabled = True
Text3.Enabled = True
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = False
If control = True Then
Command5.Enabled = False
Else
Command8.Enabled = False
End If
Command6.Enabled = False
End Sub
--------------------------------------- Responder a Elinv | 2 SID, el 24 jun 2009, 02:22:53Hola Elinv
Primero k nada gracias por el post me ha sido de mucha ayuda.
pero estoy un poco atorado =\
con el codigo k dejaste estoy intentando hacer un catalogo de productos en el cual muestre la foto por cada articulo.
Mi problema es que en el command7 no me guarda la ruta del JPG en el campo FOTO...
y tambien como puedo hacer para k al darle siguiente o anterior se cargue la foto del articulo..
Gracias por tu atencion, que jah te bendiga. Responder a SID |
| 3 SID, el 24 jun 2009, 02:46:01Ha se me paso decir ..
estoy trabajando con VB 6 y Acces 2003 Responder a SID | 4 Elinv, el 24 jun 2009, 04:18:53Igualmente querido amigo que Dios te bendiga.
Si me haces llegar tu mail, te adjuntaré dos archivos comprimidos con proyectos Visual Basic 6.0
En los archivos comprimidos que te adjuntaré, tenes dos tipos casi iguales de modelos que utilice en otros foros de esta misma página, uno de ellos es el que también esta en este foro.
No te enviaré las fotos para no sobrecargar el mensaje, pero una vez que ejecutas el proyecto, te vas a editar, buscar una foto cualquiera y le das guardar. Veras como se van actualizando las fotos en cada registro, y como al avanzar o retroceder o si decides ir al primero o ultimo registro, la foto correspondiente al mismo se visualiza.
Pues lo que hace es leer el directorio donde esta la foto, directorio que se guarda en la base Access como texto solamente y luego muestra la foto.
Lo bueno que tiene este proceso, es que todas las fotos que vos vayas eligiendo, se copian automáticamente al directorio imágenes del path donde se este ejecutando este programa, de manera tal que todas las imágenes te van quedando juntas en un mismo lugar, sin necesidad de que vos tengas que copiarla explorador mediante.
Una vez que recibas los archivos comprimidos mira en los formularios de cada proyecto que está debidamente explicado paso a paso.
No dudes en consultarme cualquier duda que tengas al respecto y ni bien tenga tu mail o alguno alternativo que vos quieras, te envio los archivos comprimidos.
Un abrazo fraterno.
Luis Responder a Elinv | 5 SID, el 24 jun 2009, 18:06:37Hola luis!
mi e-mail es el siguiente: sida20@hotmail.com
muchas gracias por tu apoyo, tu tiempo y la atencion prestada.
Saludos! Responder a SID | 6 Elinv, el 24 jun 2009, 19:12:25Estimado SID:
Te envié por correo los dos proyectos.
Gracias por considerarnos de utilidad.
Cualquier pregunta a tu entera disposición.
Un abrazo.
Luis Responder a Elinv |
| 22 temo, el 2 oct 2009, 00:38:45Que tal Luis, buscando en internet encontré este sitio, te comento brevemente mi problema, estoy rediseñando un sistema de empleados, al cual se le va a agregar el registro de la huella digital, esto con el objetivo de utilizarlo para el registro de asistencia del personal, estoy usando un scanner digitalpersona U are U. Por lo que he investigado este hardware viene ligado con una base de datos en la cual graba la imagen en un campo objeto OLE, mi problema es que no he podido visualizar las huellas, ya estuve batallando, bajando rutinas, ejemplios y nada, siempre me manda un error, de que la imagen no es valida. el caso es que estoy queriendo utilizar otra alternativa. y es la que comentas de generar una carpeta con las huellas escaneadas. Podrías hacerme el grandisimo favor de enviar tu proyecto a mi correo?. O si tienes alguna sugerencia con relación a lo del lector de huellas, de antemano mil gracias.
Atte.
Cuauhtemoc Responder a temo | 23 Elinv, el 2 oct 2009, 05:05:25Estimado temo:
Gracias por considerarnos.
En esta dirección:
http://www.bragadomas.com/forodeprogramacion/viewforum.php?f=5
Este es el foro general...
http://www.bragadomas.com/forodeprogramacion/index.php
Hemos estado subiendo todos los proyectos para que aquellas personas que consideren les pueden servir, puedan bajarlos libremente.
Observa en dicho foro, que existen proyectos para grabar en la base de datos el directorio donde se aloja la imagen, y copiar la imagen a ese directorio puntual, que sino existe lo crea.
También hay otro proyecto utilizado el método Stream para grabar y leer directamente la imagen desde y hacia la base de datos.
No obstante, si a pesar de todo ello, no logras dar con la tecla, puedes analizar la posibilidad de enviarnos a nuestros mails la parte del proyecto donde estas en estos momentos parado y con gusto te lo resolveremos.
Nuestros servicios son al solo efecto de propagar el conocimiento a todos aquellos ansiosos de saber.
Humildemente subimos todo lo que hacemos a nuestros foros para que todos puedan acceder a ese conocimiento.
Por último, mil gracias por considerarnos.
Elinv Responder a Elinv |
|
|
| 16 srepoma, el 14 ago 2009, 19:30:02Hola es interesante la forma como ayudas al resto, te pediria por favor si puedes enviarme a mi correo proyectos en visual Basic 6.0 de Inventarios de bienes, estoy aprendiendoa programar y escojdo hacer un programa de inventarios de bienes patrimoniales.
y si tienes proyectos en visual Basic 2008 tambien te agradeceria mucho que me la envies, otra cosa, como puedo incrustar en un formulario informacion de una tabla de Acces 2003.
gracias.
Srepoma Responder a srepoma |
|
|
| 19 Monyr18, el 3 sep 2009, 20:12:17Necesito el codigo fuente para que de acuerdo a un numero en una caja de texto si es par muestres unas imagenes y si es impar entonces muestre otras como lo puedo hacer??? please!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Responder a Monyr18 |
|