Как мне присвоить результат запроса (адрес электронной почты) переменной?

#sql #vba #ms-access

#sql #vba #ms-access

Вопрос:

Я пытаюсь присвоить результат запроса (адрес электронной почты) переменной.

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

 Public valid_mail As Variant
    
Public Sub mail_list()
    valid_mail = "SELECT CustomerFACT.îééì FROM CustomerFACT WHERE (((CustomerFACT.[èìôåï ðééã]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*')) Or (((CustomerFACT.[ùí àéù ÷ùø]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*')) Or (((CustomerFACT.[ùí äì÷åç]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*')) Or (((CustomerFACT.[îñôø òåñ÷]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*'));"
End Sub
    
Private Sub mail_70_Click()
    DoCmd.SendObject acSendNoObject, , , valid_mail
End Sub
 

Когда я не использую глобальную переменную valid_mail, но ввожу адрес электронной почты в двойные кавычки, это работает.

Комментарии:

1. Вы заменили оператор запроса. Вам нужно будет присвоить результат запроса.

2. Не совсем понял…

Ответ №1:

Это то, что я тестировал в своем примере. Вам нужно подставить результаты набора записей.

 Public valid_mail As Variant

Sub test()
    Dim DB As Database
    Dim rs As Recordset
    Dim strSQL As String
    
    Set DB = CurrentDb
    
    strSQL = "select email from [table] "
    
    Set rs = DB.OpenRecordset(strSQL)
    
    valid_mail = rs!email
    
    MsgBox valid_mail
End Sub
 

Замена вашего будет выглядеть так:

 Public valid_mail As Variant
Sub  mail_list()
    Dim DB As Database
    Dim rs As Recordset
    Dim strSQL As String
    
    Set DB = CurrentDb
    
    strSQL = "SELECT CustomerFACT.ieei FROM CustomerFACT WHERE (((CustomerFACT.[eioai ðeea]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*')) Or (((CustomerFACT.[ui aeu ÷uø]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*')) Or (((CustomerFACT.[ui ai÷ac]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*')) Or (((CustomerFACT.[inoø oan÷]) Like '*' amp; Forms!CustomerLookUpFORM!searchbox amp; '*'));"
    
    Set rs = DB.OpenRecordset(strSQL)
    
    valid_mail = rs!ieei
    
    ''MsgBox valid_mail
End Sub

Private Sub mail_70_Click()

call mail_list

DoCmd.SendObject acSendNoObject, , , valid_mail
End Sub
 

и ваш оператор sql выражен неправильно. Это должно быть, как показано ниже.

 strSQL = "SELECT CustomerFACT.ieei FROM CustomerFACT WHERE (((CustomerFACT.[eioai ðeea]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*')) Or (((CustomerFACT.[ui aeu ÷uø]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "'*)) Or (((CustomerFACT.[ui ai÷ac]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*')) Or (((CustomerFACT.[inoø oan÷]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*'));"
 

мой ответ также напечатан с ошибкой.

 Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "'*))
 

Для

 Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*'))
 

исправленный sql — это

 strSQL = "SELECT CustomerFACT.ieei FROM CustomerFACT WHERE (((CustomerFACT.[eioai ðeea]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*')) Or (((CustomerFACT.[ui aeu ÷uø]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*')) Or (((CustomerFACT.[ui ai÷ac]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*')) Or (((CustomerFACT.[inoø oan÷]) Like '*" amp; Forms!CustomerLookUpFORM!searchbox amp; "*'));"
 

Комментарии:

1. Привет! большое спасибо! кажется, работает, только когда я его запускаю, он выдает ошибку «ошибка 3061 слишком мало параметров», и когда я отлаживаю, ошибка возникает здесь — Set rs = DB.OpenRecordset(strSQL)

2. @EyalMarom, ваш оператор sql выражен неправильно. добавлено в конце сообщения.

3. Это именно то, что я сделал. При отладке ошибка приводит к функции OpenRecordset, сообщая, что ей требуется больше аргументов (не менее 1), и когда я проверил синтаксис, другие возможные аргументы являются необязательными. Не могу понять.

4. @EyalMarom, в моем ответе также была опечатка.