Страницы: 1
RSS
Как получить в переменную значение из combobox на форме через ActiveControl?, Как правильно передать значение переменной в запрос
 
Код
Private Sub CommandButton1_Click()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cntrl As String
Dim cl As String

cl = ComboBox2
cntrl = "UserForm." & UserForm.ActiveControl.Name & ".Text"
MsgBox cntrl
MsgBox cl

cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\TMP\Project.mdb; Jet OLEDB:Database;"
cn.Open ConnectionString
'rs.Open "SELECT * FROM Itog WHERE id1='" & cl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
rs.Open "SELECT * FROM Itog WHERE id1 like '" & cntrl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic

ActiveSheet.Range("B8").CopyFromRecordset rs

rs.Close
cn.Close
End Sub
Как правильно передать в запрос значение переменной?
Строка работает
Код
rs.Open "SELECT * FROM Itog WHERE id1='" & cl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
А эта строка не работает
Код
rs.Open "SELECT * FROM Itog WHERE id1 like '" & cntrl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
Видимо, переменная передает в запрос не значение(которое надо сравнить), а просто текст переменной...
Изменено: Alexban65 - 10.09.2018 12:52:29
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Alexban65, У вас вопрос не как передать значение в запрос , а как получить значение из элемента формы.
cntrl = "UserForm." & UserForm.ActiveControl.Name & ".Text" присвоит переменной текстовое значением, например "UserForm.TextBox1.Text" которое конечно не равно ожидаемому вами значению текста в этом элементе.
По вопросам из тем форума, личку не читаю.
 
Я ставлю combobox в запрос - работает.
Combobox на форме содержит значение, которое и сравнивается в WHERE запроса.
Когда я подключаю ActiveControl, который дает ссылку на combobox - оказалось, что конструкция не дает значение указанного combobox, в переменной получается просто текст а не значение combobox.
Отдельно combobox значение дает,  отдельно ActiveControl дает последний использованный combobox

Можно как то исхитриться и получить в переменную "cntrl" значение combobox на форме через ActiveControl???
Или это невозможно, и должны быть какие то обходные пути?
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Alexban65, Только теперь название темы точно не соответствует вопросу. Предложите, модераторы заменят, да и код ваш с запросом совсем лишний.
По самому вопросу, activecontrol в момент нажатия кнопки будет сама кнопка. Правильное название позволит привлеч внимание специалистам не по запросам SQL , а по обработке форм.
Изменено: БМВ - 10.09.2018 09:18:10
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Alexban65 , Только теперь название темы точно не соответствует вопросу. Предложите, модераторы заменят, да и код ваш с запросом совсем лишний.По самому вопросу, activecontrol в момент нажатия кнопки будет сама кнопка. Правильное название позволит привлеч внимание специалистам не по запросам SQL , а по обработке форм.
Спасибо за ответ.
Я новичок на этом форуме, всего несколько дней.
Даже не знаю как написать модератору об изменении темы...((
Думаю что теперь название темы "получить в переменную "cntrl" значение combobox на форме через ActiveControl???" было бы более правильным.
Хотя наверняка можно сформулировать более точно и ясно - но уж как смог.
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Alexban65, замените на

Код
cntrl =  UserForm.controls(UserForm.ActiveControl.Name).text
Также поставте проверку на тип контрола, типа такого
Код
If TypeOf ob Is MSForms.TextBox Then
Изменено: ivanok_v2 - 10.09.2018 10:38:41
 
Alexban65,  ActiveControl -  у вас что? Это, при нажатии на кнопку, сама кнопка.  Что вам нужно в итоге, сколько у Вас комбоксов и как они связаны с этой или многими кнопками?

Устал ждать.

Код
Private cbvalue As String

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    cbvalue = ComboBox1.Value
End Sub
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    cbvalue = ComboBox2.Value
End Sub


cbvalue - будет содержать значение комбобокса, последнего активного, перед жмаканием по кнопке.
Изменено: БМВ - 10.09.2018 11:19:37
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Alexban65 ,  ActiveControl -  у вас что? Это, при нажатии на кнопку, сама кнопка.  Что вам нужно в итоге, сколько у Вас комбоксов и как они связаны с этой или многими кнопками?
в свойствах кнопки установил TakeFocusOnClick=False,
тогда ActiveControl сохранит ссылку на тот контрол, который был активным до нажатия кнопки.
То есть по нажатию кнопки я получаю имя combobox, на котором фокус.
Форма простая - 8 combobox и 2 кнопки(Результат и Выход).
Сделал топором, перебрал все контролы, но работает
Код
Private Sub CommandButton2_Click()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

If ActiveControl.Name = "ComboBox8" Then
MsgBox ActiveControl.Name & "-x8"
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=С:\TMP\Project.mdb; Jet OLEDB:Database;"
cn.Open ConnectionString
rs.Open "SELECT * FROM Itog WHERE FactDateStart ='" & ComboBox8 & "' AND FactDateStart  IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
ActiveSheet.Range("B8").CopyFromRecordset rs 
rs.Close
cn.Close
End If

End Sub
Спасибо вам, БМВ, за беспокойство и поддержку...))
Цитата
ivanok_v2 написал:
Alexban65 , замените наКод ?
1cntrl =  UserForm.controls(UserForm.ActiveControl.Name).text
Также поставте проверку на тип контрола, типа такогоКод ?
1If TypeOf ob Is MSForms.TextBox Then
Интересное решение, спасибо, попробуем
Изменено: Alexban65 - 10.09.2018 11:54:14
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Я уже говорил, что выпендреж вас до добра не доведет.
В первом коде заменить ComboBox2 на ActiveControl, и все.
Если на форме только комбо и кнопки, проверка типа смысла не имеет.
А если тащить значение из ComboBox8, то какая разница, какой комбо активный?
Страницы: 1
Наверх