MS Access - текстовое поле возвращает строку запроса вместо значения результата запроса - PullRequest
0 голосов
/ 11 мая 2018

Я перепробовал несколько вариантов, и все, кажется, дают мне один и тот же результат - поэтому я пропускаю что-то довольно простое, я думаю.

У меня есть текстовое поле для номера счета, кнопка поиска и текстовое поле для результата поискового запроса.Тем не менее, когда я нажимаю кнопку поиска - сам запрос добавляется во второе текстовое поле вместо ожидаемого результата 1 или 0.

Это моя последняя попытка, найденная на этом сайте:

Private Sub SearchAcctNumber_Click()


Dim strsearch As String
Dim Task As String

If IsNull(Me.Text0) Or Me.Text0 = "" Then
   MsgBox "Please type in your account number.", vbOKOnly, "Acct Num Needed"
   Me.Text0.SetFocus
Else
    strsearch = Me.Text0.Value
    Task = "SELECT I_Ind FROM dbo_BC WHERE (([ACCOUNT_NUMBER] Like ""*" & Text0 & "*""))"
   Me.Text2 = Task

End If

End Sub

Кто-нибудь может помочь мне увидеть ошибку, которую я делаю?Это сводит меня с ума, что что-то настолько простое не работает, как я думал, что должно.

Редактировать: Хотел добавить, что я тоже пробовал DLookup и получал тот же результат в других итерациях попыток сделать это.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

В этом случае вы можете пересмотреть подход Like. В любом случае, проблема заключается в том, что вы присваиваете текстовую строку (команда SQL), и это то, что вы видите.

Попробуйте вместо этого:


Private Sub SearchAcctNumber_Click()

    If IsNull(Text0.Value) Then
       MsgBox "Please type in your account number.", vbOKOnly, "Acct Num Needed"
       Text0.SetFocus
       Exit Sub
    End If

    Dim strSearch As String
    Dim strCriteria As String

    strSearch = Text0.Value
    strCriteria = "ACCOUNT_NUMBER Like '*" & strSearch & "*'"

    Text2.Value = Nz(DLookup("I_Ind", "dbo_BC", strCriteria), "Not found...")

End Sub

Вы также можете "искать", когда вы печатаете на Text0. Установите минимальное количество символов, прежде чем пытаться найти его.


Private Sub Text0_Change()
    If Len(Text0.Text) > 3 Then
        Text2.Value = Nz(DLookup("I_Ind", "dbo_BC", "ACCOUNT_NUMBER Like '*" & Text0.Text & "*'"), vbNullString)
    End If
End Sub
0 голосов
/ 11 мая 2018

Один из возможных способов - изменить тип Text2 на combo box.Затем вы устанавливаете Text2.recordsource = Task и обновляете отображаемое значение с помощью Me.Text2.requery.

Другой способ - открыть набор записей, прочитать значение и установить значение Text2.

Dim r as dao.recordset, db as dao.database  
set db = currentdb()  
set r=db.openrecordset(Task)  
Me.Text2 = r(0).value
Set r = Nothing
...