Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как заполнить ComboBox результатом выполнения хранимой процедуры. / 14 сообщений из 14, страница 1 из 1
07.02.2013, 14:11
    #38141727
Minch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
На форме есть комбобох и его надо заполнить данными из хранимки SQL.
В аксесе делается все просто Combobox.RecordSource = "EXEC dbo.my_select"
В эксель так просто судя по всему нельзя, пытаюсь вот так.
Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dbo.my_select"
Me.Combobox.RowSource = cmd.Execute()

Но так тоже не хочет.
Могу только запихнуть результат в рекордсет, а потом построчно перебирать его и добавлять значения с помощью .AddItem.
Но это очень долго.
Можно как-то весь рекордсет поместить в combobox?
...
Рейтинг: 0 / 0
07.02.2013, 14:29
    #38141775
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
В комбобокс нельзя, можно в датакомбо, но он в отдельной библиотеке. И не поддерживает стили.

В аттаче обертка для комбобокса, чтобы он вел себя как датакомбо. Дарю.
...
Рейтинг: 0 / 0
07.02.2013, 16:02
    #38141983
Minch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
Antonariy,
а как пользоваться оберткой?
...
Рейтинг: 0 / 0
07.02.2013, 16:38
    #38142068
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
Как юзерконтролами пользоваться знаешь?
...
Рейтинг: 0 / 0
07.02.2013, 16:39
    #38142071
Minch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
да.
...
Рейтинг: 0 / 0
07.02.2013, 16:44
    #38142090
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
Обертка это юзерконтрол на базе комбобокса.
...
Рейтинг: 0 / 0
07.02.2013, 17:07
    #38142161
Minch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
Antonariy,
я не понимаю как его добавить.
обычно подрубаешь библиотеку и он появляется в aditional controls.
а здесь как его искать?
...
Рейтинг: 0 / 0
07.02.2013, 17:11
    #38142172
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
Ты же сказал, что умеешь.

Хочешь, подруби проект, не хочешь, скопируй в свой проект файлы DataCombo.* и добавь лишь ctl.
...
Рейтинг: 0 / 0
07.02.2013, 17:21
    #38142192
Minch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
Antonariy,
Спасибо. Разобрался.
В свой проект кину датакомбо и буду разбираться что он умеет.
...
Рейтинг: 0 / 0
07.02.2013, 18:21
    #38142320
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
В приведенную ниже процедуру передать объекты рекордсета и комбобокса,
и комбобокс заполнится достаточно быстро:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
' Populates MSForm's combobox (CB) by contents of recordset (objRS)
Sub PopulateCombo(objRS As Object, CB As MSForms.ComboBox)
  Dim a(), b()
  Dim c&, cs&, r&, rs&
  objRS.MoveFirst
  a = objRS.GetRows
  cs = UBound(a, 1)
  rs = UBound(a, 2)
  ReDim b(0 To rs, 0 To cs)
  For r = 0 To rs
    For c = 0 To cs
      b(r, c) = a(c, r)
    Next
  Next
  CB.ColumnCount = cs + 1
  CB.List = b
End Sub
...
Рейтинг: 0 / 0
07.02.2013, 18:23
    #38142327
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
ZVIВ приведенную ниже процедуру передать объекты рекордсета и комбобокса,
и комбобокс заполнится достаточно быстро:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
' Populates MSForm's combobox (CB) by contents of recordset (objRS)
Sub PopulateCombo(objRS As Object, CB As MSForms.ComboBox)
  Dim a(), b()
  Dim c&, cs&, r&, rs&
  objRS.MoveFirst
  a = objRS.GetRows
  cs = UBound(a, 1)
  rs = UBound(a, 2)
  ReDim b(0 To rs, 0 To cs)
  For r = 0 To rs
    For c = 0 To cs
      b(r, c) = a(c, r)
    Next
  Next
  CB.ColumnCount = cs + 1
  CB.List = b
End Sub

Это лишь заполнение. Уныло.
...
Рейтинг: 0 / 0
08.02.2013, 05:04
    #38142773
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
AntonariyЭто лишь заполнение. Уныло.
Ну да, то, о чем, собственно, и спрашивалось в теме

MinchНа форме есть комбобох и его надо заполнить данными
...
Добавлять значения с помощью .AddItem ... очень долго
...
Рейтинг: 0 / 0
08.02.2013, 09:53
    #38142888
Minch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
ZVI,
Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Supply.Get_Rows"
Set rs = cmd.Execute()

PopulateCombo(rs, Me.ComboBox)

Ругается на rs
...
Рейтинг: 0 / 0
08.02.2013, 16:59
    #38143793
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заполнить ComboBox результатом выполнения хранимой процедуры.
MinchSet rs = cmd.Execute()

PopulateCombo(rs, Me.ComboBox)

Ругается на rs
1. На какой строке ругается?
2. Как ругается?
3. В первом сообщении Вы упомянули про Excel и что можете "только запихнуть результат в рекордсет, а потом построчно перебирать его и добавлять значения с помощью .AddItem". Может, лучше, опубликуете код для этого варианта, тогда проще и конкретней будет разбираться.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как заполнить ComboBox результатом выполнения хранимой процедуры. / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]