За исключением valuetypes, которые используются непосредственно и различными другими во время выполнения в целях PInvoke, необходимо только использовать valuetypes в 2 сценариях.
Я уверен, что это истинный SQL, но вы можете использовать функцию:
= DLookUp ("field_name", "table_name", "any_fieldname = 'value'")
В качестве источника управления вашего поля можно указать имя функции. Эта функция может легко выполнить ваш SQL и / или передать переменную. Вот мой простой шаблон для функции, которая выполняет оператор SQL в набор записей и возвращает первое значение. В моем мире я обычно включаю очень конкретное предложение where, но вы, безусловно, можете сделать любую из этой функции более надежной для своих нужд.
=fnName(sVariable, iVariable)
Public Function fnName( _
sVariable as String, _
iVariable as Integer _
) As String
On Error GoTo Err_fnName
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sSQL As String
sSQL = ""
Set con = Access.CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open sSQL, con, adOpenDynamic, adLockOptimistic
If rst.BOF And rst.EOF Then
'No records found
'Do something!
Else
'Found a value, return it!
fnName = rst(0)
End If
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
Exit_fnName:
Exit Function
Err_fnName:
Select Case Err.Number
Case Else
Call ErrorLog(Err.Number, Err.Description, "fnName", "", Erl)
GoTo Exit_fnName
End Select
End Function
Возможно, проще всего использовать поле со списком и установить источник строки для вашего запроса, в качестве альтернативы, DAO является родным для Access.
Private Sub Form_Current()
''Needs reference to Microsoft DAO 3.x Object Library
Dim db As Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim strResult As String
strSQL = "SELECT ci.IssueDesc FROM tblCaseIssues ci " _
& "INNER JOIN tblCaseNewHS_Issues cni ON ci.ID = cni.IssueID " _
& "WHERE cni.HS_ID = 81"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
If rs.RecordCount > 0 Then
Do While Not rs.EOF
strResult = strResult & ", " & rs!IssueDesc
rs.MoveNext
Loop
strResult = Mid(strResult, 3)
Else
strResult = "Not found"
End If
Me.TextBoxName = strResult
End Sub
Просто возьмите свой sql-запрос и сохраните его как запрос.
Затем в текстовое поле просто поместите:
= (dlookup («IssuesDesc», «имя запроса» ))
Я очень сильно растерялся по поводу всех этих плакатов, предлагающих взломы кода там, где они вообще не нужны. Просто сохраните свой sql как запрос, а затем используйте функцию dlookup () в качестве источника данных текстового поля, и все готово.