vincular traer subformularios subformulario pasos para otro formularios formulario ejemplos datos crear como ms-access ms-access-2007 access-vba

ms access - traer - Nombres de campo en el subformulario de acceso rellenado con el conjunto de registros vba



pasos para crear un formulario en access (1)

Parece que las cosas más simples suelen ser las más elusivas.

En Access 2007, tengo un subformulario (frmfacilityInventory) dentro de un formulario (frmInventorySheet). Tras algunas selecciones en el formulario principal, el usuario hace clic en un botón y creo un conjunto de registros en blanco en vba y ejecuta algunas consultas en segundo plano y agrega nuevos registros a este conjunto de registros. Al finalizar, el nuevo conjunto de registros se muestra en el subformulario, o al menos así lo deseo.

Mis campos muestran todos #ERROR.

el nuevo conjunto de registros vba tiene datos e incluso muestro un registro completo en cuadros de texto para asegurarme de que todo lo demás está funcionando. La cantidad de registros devueltos en el subformulario es correcta, pero todos muestran #ERROR.

Al mirar mi subformulario, no tiene establecido el "Origen de registro" hasta que el código vba termina de construir el nuevo conjunto de registros y luego establece el origen del subformulario en el nuevo conjunto de registros. El subformulario tiene su primer campo como "Facility". La Fuente de control para este campo (en el nivel de formulario) también se establece en "Facilidad". Mi recordset tiene una columna "Facility". Entonces, ¿por qué veo #ERROR en la columna Facilidad?

''Create blank recordset Dim rsPMList As ADODB.Recordset Set rsPMList = New ADODB.Recordset Dim Facility, SQLstr As String Facility = txtcboecho ''Create fields in blank recordset With rsPMList.Fields .Append "PMID", adNumeric, 4, adFldKeyColumn .Append "Facility", adChar, 7, adFldUpdatable .Append "Device", adChar, 4, adFldUpdatable .Append "BarcodeID", adChar, 7, adFldUpdatable .Append "Name", adVarChar, 50, adFldUpdatable .Append "Address", adChar, 15, adFldUpdatable .Append "Location", adVarChar, 75, adFldUpdatable End With ''Open blank recordset rsPMList.Open ''Create query for "Building Controllers" Dim rsBCList As ADODB.Recordset Set rsBCList = New ADODB.Recordset SQLstr = "SELECT tblFacility.FacCode AS Facility, ''BC'' AS Device, " SQLstr = SQLstr & "tblBC.BCName AS Name, tblBC.IPAddress AS Address, " SQLstr = SQLstr & "FROM tblFacility INNER JOIN tblBC " SQLstr = SQLstr & "ON tblFacility.FacilityID = tblBC.Facility " SQLstr = SQLstr & "WHERE tblFacility.FacCode = ''" & Facility & "'' " SQLstr = SQLstr & "AND tblBC.ParentBC Is Null" rsBCList.Open SQLstr, CurrentProject.Connection, adOpenKeyset, adLockOptimistic ''Move records from query to blank recordset Do While rsBCList.EOF <> True rsPMList.AddNew rsPMList.Fields("Facility") = rsBCList.Fields("Facility") rsPMList.Fields("Device") = rsBCList.Fields("Device") If IsNull(rsBCList.Fields("BarcodeID")) Then rsPMList.Fields("BarcodeID") = "" Else rsPMList.Fields("BarcodeID") = rsBCList.Fields("BarcodeID") End If rsPMList.Fields("Name") = rsBCList.Fields("Name") rsPMList.Fields("Address") = rsBCList.Fields("Address") rsPMList.Fields("Location") = rsBCList.Fields("Location") rsPMList.Update rsBCList.MoveNext Loop ''These lines shows that query data was successfully moved ''to the blank recordset. Two text fields display two fields. rsPMList.MoveFirst txtShow1 = rsPMList.Fields("BarcodeID") rsPMList.MoveNext txtshow2 = rsPMList.Fields("BarcodeID") rsBCList.Close Set rsBCList = Nothing ''Set the record source of the subform to the newly created recordset Set Me.frmFacilityInventory.Form.Recordset = rsPMList rsPMList.Close Set rsPMList = Nothing


Establezca las propiedades CursorLocation y LockType del CursorLocation de registros antes de CursorLocation .

Esta versión simplificada de su conjunto de registros funcionó con mi formulario Access 2007.

With rsPMList .Fields.Append "PMID", adInteger, , adFldKeyColumn '' changed from adNumeric, 4 .Fields.Append "Facility", adChar, 7, adFldUpdatable .Fields.Append "Device", adChar, 4, adFldUpdatable .CursorLocation = adUseClient .LockType = adLockPessimistic .Open End With