Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 23:00   #1
basilio2010
Новичок
Джуниор
 
Регистрация: 05.05.2010
Сообщений: 2
По умолчанию Проблема создания listBox

Доброго времени суток!
Прошу помощи у ЗНАТОКОВ для решения одной задачи:
Необходимо в списке отобразить данные таблицы Ассess по некому условию отбора (причем имя таблицы зависит от выбора пользователя с какими данными работать)
Пробывал в коде VBA:
1.
listBox1.RowSource = "SELECT поле1, поле2, поле3 FROM table WHERE поле1 = <условие>"
Но тут возникает проблема имя таблицы с которым работает VBA код формы может быть разным. Как заменить реальное имя на переменную которая содержит это имя? Все попытки с использованием & или через переменную recordset не увенчались успехом.
2.
Создавал двухмерный массив, который содержит выборку из таблицы, но при попытке присвоить этот массив в listBox1.RowSource возникает сообщение о несоответствии данных (RowSourceType = список данных)
Подскажите, пожалуйста, как выйти из данной ситуации?
Зарание спасибо!
basilio2010 вне форума Ответить с цитированием
Старый 06.05.2010, 02:49   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте basilio2010.
1. ответ на этот вопрос (рекомендацию) я разделю на две части:
а) для обслуживания объектов приложения максимально откажитесь от использования строчных выражений, используйте переменные и константы, это не только уменьшит нагрузку на VB(A) но и облегчит конструирование кода.
Код:
Dim sVar As String, iVar as Integer
Const sTABLE1 = "Table1", sTABLE2 = "Table2"
Const sCONST1 = "SELECT поле1, поле2, поле3 FROM ", sCONST2 = " WHERE поле1 = "
б) собирайте строчную переменную непосредственно перед присвоением, можно предварительно выполнить проверку подключаемой таблицы, примерно так:
Код:
if ... Then 
    sVar = sTABLE1 
ElseIf ... Then
    sVar = sTABLE2
...
Else
    ...
End If
sVar = sCONST1 + sVar + sCONST2 & iVar
listBox1.RowSource = sVar
2. действительно двухмерный массив не может быть подключен к списку с заданным типом источника строк - Таблица или запрос, установите тип - Список значений и задавайте не свойство ..RowSource =.., а ..List = <массив>, думаю у Вас всё получится.

Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 06.05.2010, 17:22   #3
basilio2010
Новичок
Джуниор
 
Регистрация: 05.05.2010
Сообщений: 2
По умолчанию Спасибо!

Добрый день, Женя!
Огромное спасибо за Вашу очень содержательную подсказку и советы!
Все работает! Еще раз спасибо! И всяческих профессиональных УСПЕХОВ!!!!
basilio2010 вне форума Ответить с цитированием
Старый 26.05.2010, 15:15   #4
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

Евгений, здравствуйте.

Подскажите пожалуйста.

Есть двухмерный массив, есть листбокс.

Как именно присвоить листбоксу значения из массива?

При попытках применить .List ругается.
Код:
Sub nn()
Dim arr(1 To 3, 1 To 2)
Dim k As Long
Dim i
Dim j
For i = 1 To 3
For j = 1 To 2
k = k + 1
arr(i, j) = k
Next j
Next i
Form_Form.listbox.
End Sub
Dophin вне форума Ответить с цитированием
Старый 26.05.2010, 17:26   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Dophin.
действительно контролы применяемые в А2003 не имеют свойства List, такой способ применим для контролов Microsoft Forms 2.0 который могут использоваться в формах MS Access
Код:
Dim arr(1 To 3, 1 To 2)
Dim k&, i%, j%
Dim s$ 'строчная переменная
With ListBox0 'вариант для контрола А2003
    .RowSourceType = "Value List" 'задается в свойствах контрола
    .ColumnCount = 2 'задается в свойствах контрола
    For i = 1 To 3
        For j = 1 To 2
            k = k + 1
            s = s + ";" & k
            arr(i, j) = k
        Next j
    Next i
    .RowSource = Mid(s, 2)
'Form_Form.listbox.
End With
'вариант для контрола Microsoft Forms 2.0
ListBox2.Object.list = arr
ListBox2.ColumnCount = 2
...
вопрос конечно созвучен заданному, но он Ваш а не basilio2010, а тема не Ваша, предлагаю все же придерживаться правила один вопрос - одна тема
Евгений.

Последний раз редактировалось Teslenko_EA; 26.05.2010 в 17:29.
Teslenko_EA вне форума Ответить с цитированием
Старый 28.05.2010, 10:21   #6
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

спасибо.
Извините - впредь буду создавать новую тему.
Dophin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема VBA:Listbox Warhead Помощь студентам 0 05.04.2010 18:34
Проблема создания темы в разделе Assembler xVxSeRGxVx Обсуждение статей 3 28.02.2010 16:33
проблема с listbox... jumper_ua Общие вопросы Delphi 15 16.02.2010 01:54
Программа для создания аватар, возникла проблема! Obender13 Помощь студентам 4 12.08.2009 20:32
проблема создания массива объектов Meduzza Общие вопросы C/C++ 3 28.05.2009 05:07