RE:acces, ¿ guardar archivos Cad ?
Hola!
Mira quizas esa no sea la mejor solución. Yo en mi caso guardaria todos los archivos CAD en una carpeta y desde el programa lo ubicaria por su ruta y lo mostraria.
Pero si quieres guardarlas en la BD, quizas esto es lo que buscas.
Public Sub GuardarFotoBD(rCedula$, Imagen As Object)
Dim SQL$, ADO As ADODB.Recordset
Dim DataFile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, I As Integer
Const ChunkSize As Integer = 16384
Set ADO = New ADODB.Recordset
SQL$ = "SELECT * FROM"
SQL$ = SQL$ & " Estudiante"
SQL$ = SQL$ & " WHERE CedEst = '" & rCedula$ & "'"
ADO.Open SQL$, cPagos, adOpenKeyset, adLockPessimistic
If Not ADO.EOF Then
ADO.Update
DataFile = 1
Open Imagen.Tag For Binary Access Read As DataFile 'ABRE LA RUTA DE LA FOTO PARA ACCEO BINARIO
Fl = LOF(DataFile) 'Devuelve un tipoLong que indica el tamaño, en bytes, de un archivo abierto mediante la instrucción Open.
If Fl = 0 Then Close DataFile: Exit Sub
Chunks = Fl \ ChunkSize 'LE AGISNA ALA VARIABLE Chunks, EL VALOR DE LA DIVISION DEL TAMAÑO DEL ARCHIVO ENTRE EL VALOR DE LA CONSTANTE CHUNKSIZE
Fragment = Fl Mod ChunkSize 'DIVIDE EL TAMAÑO DEL ARCHIVO, POR LA CONSTANTE ChunkSize Y DEVUELVE EL RESTO A LA VARIABLE Fragment
ADO!Foto.AppendChunk Null 'LE AGREGA AL CAMPO FOTO, EL VALOR CHUNK COMO NULO
ReDim Chunk(Fragment) 'REDIMENSIONA CHUNK, CON EL VALOR DE LA VARIABLE Fragment
Get DataFile, , Chunk() 'Lee datos de un archivo de disco abierto (DATAFILE) y coloca la información en una variable (CHUNK())
ADO!Foto.AppendChunk Chunk() 'LE AGREGA AL CAMPO FOTO, EL VALOR DE CHUNK
ReDim Chunk(ChunkSize) 'REDIMENSIONA CHUNK, CON EL VALOR DE LA CONSTANTE ChunkSize
For I = 1 To Chunks
Get DataFile, , Chunk() 'Lee datos de un archivo de disco abierto (DATAFILE) y coloca la información en una variable o arreglo (CHUNK())
ADO!Foto.AppendChunk Chunk() 'LE VA A SIGNANDO AL COMPO FOTO EL VALOR HEXADECIMAL DE LA FOTO
Next I
Close DataFile 'CIERRA EL ARCHIVO ABIERTO
ADO.Update
End If
ADO.Close
Exit Sub
End Sub
Y PARA CARGARLA DE LA BD A UN OBJETO IMAGE ES:
Public Sub CargarFotoBD(rCedula$, Imagen As Object)
Dim SQL$, ADO As ADODB.Recordset
Dim DataFile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, I As Integer, Foto&
Const ChunkSize As Integer = 16384
On Error GoTo ErrorCargarFotoBD
Set ADO = New ADODB.Recordset
SQL$ = "SELECT Foto FROM "
SQL$ = SQL$ & " Estudiante"
SQL$ = SQL$ & " WHERE CedEst = '" & rCedula$ & "'"
ADO.Open SQL$, cPagos, adOpenKeyset, adLockPessimistic
If Not ADO.EOF Then
If Not IsNull(ADO("Foto")) Then
DataFile = 1
Open "pictemp" For Binary Access Write As DataFile
Foto& = 0 'es es numero del fields(campo Photo) que contiene la foto
Fl = ADO.Fields.Item(Foto).ActualSize 'SE LE ASIGNA A F1, EL VALOR DEL TAMAÑO ACTUAL DE LA FOTO
Chunks = Fl \ ChunkSize 'LE AGISNA A LA VARIABLE Chunks, EL VALOR DE LA DIVISION DEL TAMAÑO DEL ARCHIVO ENTRE EL VALOR DE LA CONSTANTE CHUNKSIZE
Fragment = Fl Mod ChunkSize 'DIVIDE EL TAMAÑO DEL ARCHIVO, POR LA CONSTANTE ChunkSize Y DEVUELVE EL RESTO A LA VARIABLE Fragment
ReDim Chunk(Fragment) 'REDIMENSIONA CHUNK, CON EL VALOR DE LA VARIABLE Fragment
Chunk() = ADO!Foto.GetChunk(Fragment)
Put DataFile, , Chunk() 'Escribe en un archivo de disco(DataFile) los datos contenidos en una variable o arreglo (Chunk()).
For I = 1 To Chunks
ReDim Buffer(ChunkSize) 'El argumento buffer señala a un búfer asignado el valor sizeofbuffer que indica el número de caracteres que se pueden escribir en el búfer
Chunk() = ADO!Foto.GetChunk(ChunkSize) 'el metodo GetChunk, Devuelve todo el contenido, o una parte, de un objeto Field de datos de gran tamaño o binarios
Put DataFile, , Chunk() 'Escribe en un archivo de disco(DataFile) los datos contenidos en una variable o arreglo (Chunk()).
Next I
Close DataFile 'cierra el archivo DataFile
Imagen.Tag = "pictemp" 'carga la foto del valor pictemp
Imagen.Picture = LoadPicture("pictemp")
End If
END IF
ADO.Close
Exit Sub
End Sub
P.D: Cualquier duda escribeme a mi correo.
Saludos!!