Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и DataCombo1 / 15 сообщений из 15, страница 1 из 1
26.01.2005, 11:34:41
    #32884076
Маринка*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Доброго времени суток!
Жизнь свела с VBA и такая беда, что для DataCombo и DBCombo свойство DataSource отсутствует напрочь, а на строку

Set DataCombo1.RowSource = MyRecordSet

выдает следующее:
Compile error:
Wrong number of arguments or invalid property assignment

Подскажите, пожалуйста, что делаю не так. Может, кто сталкивался.
...
Рейтинг: 0 / 0
26.01.2005, 11:46:27
    #32884121
_bob
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
они все равно криво работают, лучше используй обычный ComboBox (он заполняется в цикле через additem)
------------------
Best regards, _bob
...
Рейтинг: 0 / 0
26.01.2005, 14:50:02
    #32884860
Маринка*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
_bob, спасибо за совет!
Только мне нужно хранить в combo 2 колонки: текст и ID (типа DataField и ListField), и, как эту проблему обойти, я не знаю.
...
Рейтинг: 0 / 0
26.01.2005, 15:22:51
    #32884975
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Надо чтобы рекордсет был ADODB.Recordset
Вот пример для случая подключения к mdb Борей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'Привязка источника строк     Поставщики
   If rsПоставщик.State = adStateOpen Then rsПоставщик.Close
   rsПоставщик.Open "SELECT DISTINCT Поставщики.КодПоставщика, Поставщики.Название From Поставщики ORDER BY Поставщики.Название;", M1.Conn1, adOpenStatic, adLockReadOnly, adCmdText
   Set Me.cmbПоставщик.RowSource = rsПоставщик
   Me.cmbПоставщик.ListField = rsПоставщик.Fields( 1 ).Name
   Me.cmbПоставщик.BoundColumn = rsПоставщик.Fields( 0 ).Name
'Код записи читаем как    Me.cmbПоставщик.BoundText

'Привязка источника данных    Поставщики
   Set Me.cmbПоставщик.DataSource = rsТовары
   Me.cmbПоставщик.DataField = "КодПоставщика"
...
Рейтинг: 0 / 0
26.01.2005, 15:38:44
    #32885022
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
+
Последние 2 строчки можно не писать
Если выбранный код записи считываем и устанавливаем в коде
В таком случае надо проверять содержит ли Boundtext число
т.е. if (.Boundtext <> "")
...
Рейтинг: 0 / 0
26.01.2005, 15:46:51
    #32885042
Маринка*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
WorobjoffНадо чтобы рекордсет был ADODB.Recordset
Worobjoff, мой рекордсет и есть ADODB.Recordset.
Но:
1. Для ComboBox, DataCombo, DBCombo отсутствует свойство DataSource.
2. При попытке установить:
1)
Код: plaintext
Set ComboBox1.RowSource = MyRecordset
выдает
Invalid use of property
2)
Код: plaintext
Set DataCombo1.RowSource = MyRecordset
и
Код: plaintext
Set DBCombo1.RowSource = MyRecordset
выдает
Wrong number of arguments or invalid property assignment

Кстати говоря, работаю я в VBA, поставляемый с ICONICS GENESIS-32, быть может, дело в этом?
...
Рейтинг: 0 / 0
26.01.2005, 16:26:56
    #32885189
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Значит, одноименный DataCombo (для DAO)

В VBA можно подключить AciveX?
...
Рейтинг: 0 / 0
26.01.2005, 16:31:17
    #32885204
Маринка*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Worobjoff В VBA можно подключить AciveX?
Да, можно. Спасибо, за подсказку, сейчас попробую.
...
Рейтинг: 0 / 0
26.01.2005, 16:36:20
    #32885220
_bob
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Маринка* _bob, спасибо за совет!
Только мне нужно хранить в combo 2 колонки: текст и ID (типа DataField и ListField), и, как эту проблему обойти, я не знаю.

к итемам комбобокса можно свойства прицепить, но там что-то как-то длинно пишется я сейчас не вспомню, я делал обычно так: для справочников все равно глобальные массивы создавал, в них помещал и названия и ID и т.д., из массивов комбобоксы наполнял, а потом выбрал юзер у тебя 5-й итем в комбобоксе, считываешь ID из 5-го элемента в массиве и вперед (ну или в массиве выбранный текст находишь, не пугайся, это работает очень быстро и гораздо надежнее OLEDB-контролов)

а всякие дата/ДБкомбо как раз в случае показать текст, а запомнить ID работают особенно криво (особенно если набрали текст, а элемента в справочнике такого нет), да и рефрешатся они плохо (нестабильно)
...
Рейтинг: 0 / 0
26.01.2005, 16:52:29
    #32885281
Alviga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim cbo As ComboBox
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With rs
    .ActiveConnection = cn
    .LockType = adLockReadOnly
    .CursorLocation = adUseClient
End With
rs.Open "Select ID, Name from table"
cbo.Clear
Do While Not rs.EOF
    With cbo
         .AddItem rs.Fields("name").Value
         .ItemData(.NewIndex) = rs.Fields("ID").Value
    End With
   rs.MoveNext
Loop
...
Рейтинг: 0 / 0
27.01.2005, 09:58:56
    #32886228
Маринка*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Worobjoff , в Tools -> Referenses подключено Microsoft DAO 3.6 Object Library, но в Additional Controls DataCombo (для DAO) или что-нить подобное я не нашла. Может не правильно поняла или не там искала.

_bob , глобальный массив я попробовала первым делом, но меня обругали с ног до головы:
Constants, fixed-length strings, user-defined types and Declare statements not allowed as Public members of object modules. Так что этот вариант, к сожалению, не подходит.

Alviga , варинт просто замечательный, только в этом кривом VBA свойство ItemData отсутствует (а вообще это то, что нужно).

Одним словом, я сделала 2 ComboBox, один для отображения данных, а другой для хранения ID (невидимый). Это решило мою проблему.

Всем большое спасибо!!!
...
Рейтинг: 0 / 0
27.01.2005, 10:51:33
    #32886364
_bob
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
правильно обругали, надо не в модуле формы а в простом модуле объявлять

------------------
Best regards, _bob
...
Рейтинг: 0 / 0
27.01.2005, 11:47:45
    #32886593
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Полное имя контрола:
Microsoft DataList Controls 6.0(OLEDB)

Имя файла:
MSDATLST.ocx

Это - для ADO
С DAO я никогда не работал
...
Рейтинг: 0 / 0
27.01.2005, 16:41:19
    #32887583
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
Маринка*мне нужно хранить в combo 2 колонки: текст и ID... Аналогичную задачу в VBA я реализовал через ComboBox из Library MSComCtl2
C:\WINNT\System32\MSCOMCT2.OCX
Microsoft Windows Common Controls-2 6.0 (SP6)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Private Sub FindWares()
Dim s As String,t As String
Dim v As Variant, k As Long, M As Long
'......Пром. действия......
s = InputBox("Введите искомую часть наименования" & vbCrLf _
        & "или нажмите Esc для отмены", "Поиск товара...", s)
If Len(s) =  0  Then Exit Sub
cbxFindWare.Clear
With Grid
'.... Определение М убрано из исходника........
    ReDim v( 0  To M,  0  To  1 )
    k =  0 
    For i =  1  To N -  1           'Наполняем массив
        t = .TextMatrix(i,  5 )   'строк и индексов.
        If InStr( 1 , t, s) Then
            v(k,  0 ) = t         'отображаемая строка
            v(k,  1 ) = i         'неотображаемый индекс
            k = k +  1 
        End If
    Next i
    cbxFindWare.List() = v      'Заносим массив в Combo
    Erase v
    cbxFindWare.DropDown        'Раскрываем ComboBox
End With
End Sub

Private Sub cbxFindWare_Click() 'Здесь извлекается индекс,
With cbxFindWare                'адресуемый строкой в списке
    Dim i As Long, k As Long, s As String
    i = .ListIndex
    If i = - 1  Then Exit Sub
    s = .List(i,  0 )             'отображаемая строка
    k = .List(i,  1 )             'неотображаемый индекс
'......Пром. действия........
'
End With
End Sub
На машины юзеров кидаю библиотеку и регистрирую:
Regsvr32 C:\WinNT\system32\mscomct2.ocx
...
Рейтинг: 0 / 0
28.01.2005, 11:36:23
    #32888744
Маринка*
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и DataCombo1
_bob , вы обсалютно правы - объявила массив в простом модуле и все пошло! В VB.NET объявление глобального массива в модуле формы проходит без проблем, поэтому меня это и смутило. Спасибо!

Worobjoff , элемент Microsoft DataList Controls 6.0(OLEDB)
я тоже пробовала, у меня с ним те же проблемы, что и с DataCombo.

Processor , спасибо за примерчик! Примерно так я и сделала.

Всем еще раз большущее спасибо!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и DataCombo1 / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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