Tags Palabras claves

imagenes con ado

28/09/2003 - 09:45 por William Maza | Informe spam
hola ayúdenme con esto:
*tengo una base de datos en sql, necesito en varias tablas
tener campos para fotos, eso lo hago con el tipo de dto
image, pero diganme como cargo la foto, desde sql o desde
vb 6.0, un amigo me dijo que se puede hacer desde vb 6.0,
con el appendchunk y el getchunk, pero tambien podria
cargarse desde sql?????
*otro duda que tengo en sql, tengo una tabla la cual
necesito tener el campo dni y que solo me permita
ingresar valores numericos y que el ingreso de los valores
este restringido solo a 8 caracteres, pero no se puede, se
producen errores, mis amigos me dicen que solo le ponga el
tipo de dato char, lo de la restriccion lo puedo manejar
desde vb 6.0
 

Leer las respuestas

#1 Softjaen
28/09/2003 - 13:31 | Informe spam
"William Maza" escribió:

*tengo una base de datos en sql, necesito en varias tablas
tener campos para fotos, eso lo hago con el tipo de dto
image, pero diganme como cargo la foto, desde sql o desde
vb 6.0, ...



Hola, William:

Yo te puedo explicar cómo cargar la foto desde Visual Basic, que es lo que
más o menos conozco. :-)

Introducir los archivos gráficos en la base de datos mediante el tipo de
dato «image», no creo que sea lo más recomendable, ya que el tamaño de la
base de datos puede aumentar de una forma considerable. Lo ideal sería que
guardaras en un campo de texto la ruta del archivo gráfico que deseas
visualizar posteriormente en Visual Basic mediante un control «Image» o
«PictureBox» utilizando para ello la función «LoadPicture»:

' Mostramos la imagen, cuya ruta está guardada en el
' campo «PathImage», en un control «Image»
Image1.Picture = LoadPicture(oRst.Fields!PathImage.Value)

De todas formas, te voy a dejar un ejemplo que utiliza el objeto «Stream» de
la biblioteca de ADO, para guardar la imagen en la base de datos y
posteriormente visualizarla en un control «Image».

Suponiendo que ya tienes abierta una conexión con la base de datos de SQL
Server, donde obviamente ya tienes creada la tabla y el campo para guardar
la imagen, y abierto el objeto Recordset apropiado (oRst), simplemente
tienes que llamar al siguiente procedimiento. Los comentarios están en el
código:

Private Sub SaveImage()

Dim st As Stream

On Error GoTo ErrSaveImage

With oRst
' Mientras no se haya llegado al final del Recordset
If Not .EOF Then
' Creamos un nuevo objeto Stream binario
Set st = New Stream
With st
' abrimos el objeto e insertamos el archivo
' en la tabla de la base de datos
.Type = adTypeBinary
.Open
.LoadFromFile "C:\Mis imágenes\Acantilado y nubes.jpg"

' Coloca el valor del stream en el campo y lo guarda
rst.Fields!Image.Value = .Read
rst.Update

' Mostramos la imagen en el control Image. Para ello,
' primero guardamos en disco el archivo gráfico.
'
.Write rst.Fields!Image.Value
.SaveToFile App.Path & "FileImageTemp.jpg", adSaveCreateOverWrite
Form1.Image1 = LoadPicture(App.Path & "\FileImageTemp.jpg")

' Eliminamos el archivo gráfico temporal creado para ver la
' imagen en el control Image
'
Kill (App.Path & "\FileImageTemp.jpg")

' Cerramos el objeto Stream
.Close
Set st = Nothing
End With
End If
End With

Exit Sub

ErrSaveImage:
MsgBox Err.Description

End Sub

Eso es todo. Adapta el procedimiento a tus necesidades.

*otro duda que tengo en sql, tengo una tabla la cual
necesito tener el campo dni y que solo me permita
ingresar valores numericos y que el ingreso de los valores
este restringido solo a 8 caracteres, pero no se puede, se
producen errores, mis amigos me dicen que solo le ponga el
tipo de dato char, lo de la restriccion lo puedo manejar
desde vb 6.0



Esta pregunta mejor es que la hicieras en el grupo de noticias apropiado:
microsoft.public.es.sqlserver

No obstante, y a fin de equivocarme, ya que de SQL Server no entiendo mucho,
creo que el tipo de dato «int» es más que suficiente para introducir valores
númericos de ocho cifras. Para más información, consulta «Tipos de datos» en
los Libros en pantalla de SQL Server.

Si trabajas con Visual Basic, lo que tienes que hacer es detectar que el DNI
sea un dato de tipo numérico y de ocho cifras, y una vez que sea correcto,
lo guardas en la base de datos.

Como me imagino que tendrás un control «TextBox» para que el usuario
introduzca el DNI, aquí tienes un ejemplo que debes de ejecutarlo en el
evento «KeyPress» del control «TextBox». Quita lo que no necesites:

Private Sub Text1_KeyPress(KeyAscii As Integer)

Select Case KeyAscii
'Permitimos números (0 al 9)
Case 48 To 57

' Si deseamos permitir la tecla
' de retroceso
Case 8
' Lo digo porque como el usuario
' se equivoque de número, no va
' a poder corregirlo.

' Todos los restantes caracteres, se ignoran
Case Else
KeyAscii = 0
End Select

End Sub

Lo único que te queda es detectar que el número sea de ocho dígitos, pero
como dices que ya lo tienes "manejado", pues creo que no hace falta que te
lo indique. :-)

Un saludo.

Enrique Martínez
[MS MVP - VB]

Preguntas similares