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