una tipos sirve que para mascaras mascara entrada ejemplos dbusq crea como clave access-vba

access-vba - sirve - tipos de mascara de entrada



Clave principal para el registro que aparece en el cuadro de texto donde la Fuente de control no es el campo PK (1)

Tu problema está en la siguiente línea:

Response = acDataErrAdded

Esta línea activa el acceso para establecer el campo que tiene el foco igual al valor que acaba de agregar tan pronto como pierde el foco. Debido a que cambias el enfoque a un campo diferente, obtienes este comportamiento extraño.

Response = acDataErrContinue por Response = acDataErrContinue (que básicamente le dice a Access que no le importe lo que ingresó, y le permite manejarlo usted mismo) y su código debe comportarse como se espera.

Tengo un problema con una base de datos de Access 2010 donde la clave principal de un nuevo registro también se agrega a un campo no relacionado cuando me muevo a otro control en el formulario vinculado.

Mi base de datos mínima consiste en una sola tabla llamada Teams . Hay cuatro campos en la tabla:

+-----------------+-----------+-----------+--------------+ | TeamID | TeamName | CostCode | SortOrder | +-----------------+-----------+-----------+--------------+ | AutoNumber (PK) | Text(255) | Text(255) | Long Integer | +-----------------+-----------+-----------+--------------+

Esta tabla está vinculada por el Record Source del Record Source a un formulario llamado Edit_Teams .
Hay tres controles en el formulario:

+-----------------+-------------+-----------+------------------------------------+ | Control: | TextBox | TextBox | ComboBox | +-----------------+-------------+-----------+------------------------------------+ | Name: | txtCostCode | txtTeamID | cmbTeamName | | Control Source: | CostCode | TeamID | - | | Row Source: | - | - | SELECT TeamID, TeamName FROM Teams | +-----------------+-------------+-----------+------------------------------------+

El combobox está vinculado a la columna 1, Limitar a la lista = Sí

El formulario tiene algún código para mantener el cuadro combinado sincronizado con el resto del formulario cuando se mueve entre registros:

Private Sub Form_Current() If Not IsNull(Me.txtTeamID) Then Me.cmbTeamName.Requery Me.cmbTeamName = Me.txtTeamID If Me.cmbTeamName <> 0 Then ''Some other code that adds stuff to a subform. Me.Refresh End If Else Me.cmbTeamName = 0 End If End Sub

El cuadro combinado tiene dos eventos:

Private Sub cmbTeamName_AfterUpdate() If Me.cmbTeamName = "0" Then DoCmd.GoToRecord , , acNewRec Else GoToBookmark Me, "TeamID", cmbTeamName If cmbTeamName <> 0 Then ''Some other code that adds stuff to a subform. Me.Refresh End If End If End Sub

y

Private Sub cmbTeamName_NotInList(NewData As String, Response As Integer) With DoCmd .SetWarnings False If MsgBox("Add ''" & NewData & "'' as a new team?", vbYesNo + vbQuestion) = vbYes Then .RunSQL "INSERT INTO Teams(TeamName, CostCode, SortOrder) " & _ "VALUES (''" & NewData & "'', Null," & DCount("TeamID", "Teams") + 1 & ")" Response = acDataErrAdded Me.cmbTeamName = Me.cmbTeamName.ItemData(0) ''Move to an item that exists so Requery doesn''t fire NotInList. Me.Requery GoToBookmark Me, "TeamName", NewData Me.cmbTeamName.Requery Me.cmbTeamName = DLookup("TeamID", "Teams", "TeamName=''" & TeamName & "''") Me.txtCostCode.SetFocus Else Response = acDataErrContinue Me.cmbTeamName.Undo End If .SetWarnings True End With End Sub

También hay esto que se usa dentro de los procedimientos anteriores:

Public Sub GoToBookmark(frm As Form, FieldName As String, FieldValue As String) Dim rst As DAO.Recordset Dim rst_Type As Long On Error GoTo ERR_HANDLE Set rst = frm.RecordsetClone FieldName = "[" & FieldName & "]" Select Case rst.Fields(FieldName).Type Case 4 ''dbLong rst.FindFirst FieldName & "=" & FieldValue Case 10 ''dbText rst.FindFirst FieldName & "=''" & FieldValue & "''" End Select If Not (rst.BOF And rst.EOF) Then frm.Recordset.Bookmark = rst.Bookmark End If rst.Close EXIT_PROC: Set rst = Nothing On Error GoTo 0 Exit Sub ERR_HANDLE: ''Commented out so I don''t have to post the DisplayError procedures. ''DisplayError Err.Number, Err.Description, "mdl_GoToBookMark.GoToBookmark()" Resume EXIT_PROC End Sub

El problema:
Cuando escribo un nuevo nombre de equipo en el cuadro combinado, me pregunta si deseo agregarlo a la lista del equipo, luego agrega el equipo y me mueve al cuadro de texto Código de costo, donde puedo escribir un código de costo, si está disponible.
Si no hay un código de costo disponible, el control debe permanecer en blanco, pero cuando me muevo a otro control o registro (es decir, el control pierde el foco), la clave principal de ese registro aparece en el cuadro de texto Código de costo y se guarda cuando cambio los registros (Perder el foco solo lo coloca en el cuadro de texto, no aparece en la tabla hasta que se guarda el registro).