У меня есть «клавиатура», созданная в Access, которая используется для ввода данных в основной форме с помощью Google Remote Desktop с телефона Android (большая часть ввода будет выполняться локально с помощью компьютера и обычной клавиатуры).
Основная форма на основе многотабличного запроса содержит данные. Удаленный пользователь (Android) нажимает на поле формы и появляется всплывающее окно с клавиатурой, где пользователь выбирает буквы указателем мыши и в конечном итоге нажимает кнопку OK, которая перезаписывает данные исходного поля основной формы выбранными буквами.
Пока все хорошо, но при выходе из основной формы появляется MessageBox конфликта конфликтов, и все вновь отредактированные данные с «клавиатуры» исчезают - исходные данные появляются снова, другими словами, ничего не меняется.
Код для кнопки ОК на всплывающей клавиатуре:
Private Sub tOK_Click()
Dim p As String
Dim f As String
Dim c As String
Dim txtResult As String
Dim pFrmName As String
Dim frmName As String
Dim ctrl As String
'On Error GoTo errHandler
pFrmName = Me.pFrmName ' the first three or the lasr three strings can be dropped as they contain the same data
frmName = Me.frmName
ctrl = Me.ctrlName
p = pFrmName
f = frmName
c = ctrl
If p = c Then
Forms(f).SetFocus
Forms(f)(c).Value = Me.txtResult
Else
Forms(f)(p)(c).SetFocus
Forms(f)(p)(c).Value = Me.txtResult
End If
У меня есть функция vkbddata, которую я помещаю в событие OnClick основной формы textBox.
Как мне вводить данные удаленно, избегая конфликта записи?
*********************************************** ********** 08 сентября 2018 года
Функции:
Option Compare Database
Option Explicit
Function vkbdData()
'used to provide data to virtual keyboard so it can assign new data to underlying form
On Error GoTo err_handler
If Forms!f00_logon!vkbd = True Then 'if user checks virtual keyboard
Dim ctrl As Control
Dim ctrlName As String
Dim pFrmName As String ' parent form if one exists
Dim frmName As String
Dim ctrlcaption As String
Dim sValue As String
If IsNull(Screen.ActiveForm.Controls.Parent) Then
frmName = Screen.ActiveForm.ActiveControl.Name
Else
frmName = Screen.ActiveForm.Name
End If
pFrmName = Screen.ActiveForm.ActiveControl.Name
ctrlcaption = ""
ctrlName = Screen.ActiveControl.Name
If IsNull(Screen.ActiveControl.Value) Then
sValue = ""
Else
sValue = Screen.ActiveControl.Value
End If
'Debug.Print ctrlName
vkbdData = keyBoardPopUp(frmName, pFrmName, ctrlName, ctrlcaption, sValue)
End If
Exit_Form:
Exit Function
err_handler:
MsgBox Err.Description
Resume Exit_Form
End Function
Public Function keyBoardPopUp(pFrmName, frmName, ctrlName, ctrlcaption, sValue) As String
Dim frm As Object
Dim ctrl As Control
Dim sParameters As String
'strange deliminators (>,|, ...) to make it easy to tell what each parameter value is
sParameters = pFrmName & ">" & frmName & "|" & ctrlName & "^" & ctrlcaption & "~" & sValue
'Debug.Print "SParameters " & sParameters
DoCmd.OpenForm "frm_keyboard", , , , , , sParameters
End Function