ámbito visual usuario usar studio sistema elemento declarado configuración configuracion con archivo app admite actual file ms-access vba access-vba ole

file - visual - cómo crear un objeto viejo a partir de un archivo-Acceso a Ms



no se ha declarado el elemento configuration (1)

Antes de proporcionar mis respuestas, voy a echar un rápido vistazo a la reformulación de su pregunta y sus requisitos. Me parece que quiere poder cargar objetos de archivos binarios, en este caso imágenes, usando VBA, un campo Objeto OLE en su tabla y un Marco de objeto enlazado.

Su mejor opción es dejar de tratar de usar un marco de objeto enlazado porque tiene demasiadas limitaciones.

Básicamente, hay dos métodos recomendados para lo que estás tratando de hacer.

1) Almacene solo un enlace al archivo de imagen y luego use un control de imagen (puede estar vinculado a su campo de imagen) para mostrar la imagen.

2) Almacene la imagen en un campo Objeto OLE utilizando el código para leer la imagen como datos binarios. Cuando necesite mostrar la imagen, tendrá que escribirla en un archivo temporal y luego puede establecer la propiedad de Imagen en un Control de imagen en la ruta completa y el nombre de archivo para el archivo de imagen temporal. Depende de usted administrar el archivo de imagen como un archivo temporal. Puede usar el directorio temporal de Windows o simplemente puede escribir en el mismo nombre de archivo cada vez que necesite mostrar una imagen.

Ninguna de estas técnicas es demasiado difícil. Aquí hay un artículo realmente bueno para ayudarlo a comprender mejor de lo que estoy hablando: http://www.jamiessoftware.tk/articles/handlingimages.html

Aquí hay una función para leer en datos binarios (en este caso su archivo de imagen) y otra función para escribir datos binarios: http://www.ammara.com/access_image_faq/read_write_blob.html Esto funciona bien para escribir su imagen en una archivo "temp" Entonces, todo lo que tiene que hacer es configurar la propiedad Imagen en su control de imagen para que sea la ruta del archivo y el nombre de su archivo temporal.

También puede leer y escribir datos binarios utilizando un objeto ADO Stream, junto con un objeto ADO RecordSet y un objeto ADO Connection. Deberá establecer una referencia en la Biblioteca de Access to Microsoft ActiveX Data Objects 2.8.

Aquí hay un código para agregar imágenes a la base de datos usando ADO:

Private Function LoadPicIntoDatabase(sFilePathAndName As String) As Boolean On Error GoTo ErrHandler ''Test to see if the file exists. Exit if it does not. If Dir(sFilePathAndName) = "" Then Exit Function LoadPicIntoDatabase = True ''Create a connection object Dim cn As ADODB.Connection Set cn = CurrentProject.Connection ''Create our other variables Dim rs As ADODB.Recordset Dim mstream As ADODB.Stream Set rs = New ADODB.Recordset ''Configure our recordset variable and open only 1 record (if one exists) With rs .LockType = adLockOptimistic .CursorLocation = adUseClient .CursorType = adOpenDynamic .Open "SELECT TOP 1 * FROM tblArticles", cn End With ''Open our Binary Stream object and load our file into it Set mstream = New ADODB.Stream mstream.Open mstream.Type = adTypeBinary mstream.LoadFromFile sFilePathAndName ''add a new record and read our binary file into the OLE Field rs.AddNew rs.Fields("olepicturefield") = mstream.Read rs.Update ''Edit: Removed some cleanup code I had inadvertently left here. Cleanup: On Error Resume Next rs.Close mstream.Close Set mstream = Nothing Set rs = Nothing Set cn = Nothing Exit Function ErrHandler: MsgBox "Error: " & Err.Number & " " & Err.Description LoadPicIntoDatabase = False Resume Cleanup End Function Private Sub Command0_Click() If IsNull(Me.txtFilePathAndName) = False Then If Dir(Me.txtFilePathAndName) <> "" Then If LoadPicIntoDatabase(Me.txtFilePathAndName) = True Then MsgBox Me.txtFilePathAndName & " was successfully loaded into the database." End If End If End If End Sub

Edit1:

Según su solicitud, aquí hay un código para buscar / cargar una imagen para un artículo determinado. En aras de la coherencia, también he cambiado los nombres de mi tabla y campo anterior para reflejar mejor su proyecto y para que coincida con el siguiente código. Probé este código y funcionó correctamente para mí.

Private Sub Command1_Click() If IsNull(Me.txtArticleID) = False Then If DCount("articleid", "tblArticles", "articleid = " & Me.txtArticleID) = 1 Then Dim rs As DAO.Recordset, sSQL As String, sTempPicture As String sSQL = "SELECT * FROM tblArticles WHERE ArticleID = " & Me.txtArticleID Set rs = CurrentDb.OpenRecordset(sSQL) If Not (rs.EOF And rs.BOF) Then sTempPicture = "C:/MyTempPicture.jpg" Call BlobToFile(sTempPicture, rs("olepicturefield")) If Dir(sTempPicture) <> "" Then Me.imagecontrol1.Picture = sTempPicture End If End If rs.Close Set rs = Nothing Else MsgBox "Article Not Found" End If Else MsgBox "Please enter an article id" End If End Sub Private Function BlobToFile(strFile As String, ByRef Field As Object) As Long On Error GoTo BlobToFileError Dim nFileNum As Integer Dim abytData() As Byte BlobToFile = 0 nFileNum = FreeFile Open strFile For Binary Access Write As nFileNum abytData = Field Put #nFileNum, , abytData BlobToFile = LOF(nFileNum) BlobToFileExit: If nFileNum > 0 Then Close nFileNum Exit Function BlobToFileError: MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, _ "Error writing file in BlobToFile" BlobToFile = 0 Resume BlobToFileExit End Function

Tengo una tabla con una imagen incrustada (OLE) coulmn.

Quiero poder insertar un nuevo registro a través de un formulario con una opción de exploración.

De todos modos, tengo un nombre de archivo, y necesito convertirlo en un objeto viejo e insertarlo en el formulario. ¿Cómo hago eso en VBA?

Para aclarar: necesito convertir un nombre de archivo en un objeto viejo con ese archivo y luego insertarlo en la tabla.

Gracias, Fingerman.

EDITAR:

Ok, como lo señala @HansUp, necesito explicarlo. En mi forma, tengo un objeto OLE vinculado que no está vinculado a un campo, sino a una función dlookup. Obtengo la identificación correcta en un control a través de una consulta y un cuadro combinado, por lo que el controlador está obligado a:

=DLookUp("picture","articles","id=" & [articles])

tenga en cuenta que los artículos no son un campo sino un controlador, no sé si eso difiere.

Cada vez que se cambia ese controlador, utilizo me.recalc para que el OLE enlazado pueda actualizar su valor.

De todos modos, pensé en hacer esto solo por VBA y un usuario que ingresa una dirección de archivo, sin usar el controlador pero con algún tipo de INSERT o algo, pero otras opciones serían bienvenidas.

Si no estoy seguro, ¡PREGUNTA! Voy a aclararme y arreglarme a mí mismo.

EDICION 2:

Entonces, ¿cómo se adquiere o se obtiene el nombre del archivo? ¿Esperas usar el ArticleID? ¿La imagen está siempre en una ubicación esperada con un nombre de archivo esperado? ¿Qué es exactamente lo que quiere hacer si no usa el botón Examinar? ¿Está buscando algo totalmente automático basado en la carpeta y el nombre del archivo o está buscando algo así como arrastrar y soltar?

el nombre de archivo se adquiere a través de una opción de exploración, lo tengo implementado. por simplicidad, digamos que el usuario debe ingresar el nombre del archivo en un cuadro de texto. ahora, quiero que con un clic de un botón, pueda insertar ese nombre de archivo como un objeto ole incrustado en mi base de datos. No estoy buscando ninguna automatización ni arrastrar y soltar (Pero, si arrastrar y soltar funciona, sería genial). La primera edición es sobre el controlador ole ya que alguien preguntó. pensó que mi pregunta podría resolverse usando ese controlador, así que di detalles sobre cómo estoy desplazando la imagen. No creo que tenga ninguna relevancia, pero si alguien pudiera usar eso, estaría bien para mí. Espero usar un articleID para la actualización, pero una vez más, no veo cómo se relaciona esto con la pregunta.

Estoy empezando a pensar que esto podría no ser posible ... :( Esto no es feliz ya que el problema es bastante directo. Tienes un nombre de archivo, lo necesitas embebido como un objeto OLE en tu base de datos.