Помогите победить комбобокс или посоветуйте как поступить

spair2k
Дата: 09.09.2005 12:44:42
Есть комбобокс на форме Акцесс 2000 под Вин2000 используя проект Акцесс для MSSql2000. Этот самый компбо надо заполнить пользовательской функцией из массива строк. В хелпе сказано, что так можно и описана методика, список параметров и набор констант для обработки поведения комбобокса. ОДнако когда записываю в RowSourceType имя функции GetTownList (как положено без ведущего "=" и завершающих "()") ругается отчаянно и говорит - не можешь ты это написать , нельзя тебе, а можно только то, что в списке RowSourceType, а мол если не согласен читай хелп. Читаю хелп - можно... В чем грабли?
Владимир Саныч
Дата: 09.09.2005 12:48:39
Это бывает, когда в функции ошибка. При этом найти ошибку действительно бывает трудно, потому что компиляция проходит правильно.
Тяп-ляп
Дата: 09.09.2005 12:53:12
Я так понял, что твоя функция есть "функция с обратным вызовом".
Если это так, что тебя заставляет использовать этот вариант - ведь другие гораздо проще
spair2k
Дата: 09.09.2005 14:14:41
Во первых:
нужно, чтобы контол ничего не знал о базе данных и взаимодействовал с сервером посредством специальных функций находящихся в отдельном модуле. Я хочу сделать проще клиента. Контрол всего навсего должен получить набор значений и по выбору ползователя вернуть ключ процедам взаимодействущим с SQL Server. Непосредственное использование объектов SQL сервера как то, таблицы, хранимые процедуры, вьюшки в свойстве RowSourceType контрола не желательно, так задумано. Дело в том, что на форме будет несколько контролов получающих условие отбора дург от друга, а логика должна находится на сервере. По сему контролы на форме Акцесс должны выполнять чисто интрефейсные функции, т.е. визализация данных.
Владимир Саныч
Дата: 09.09.2005 14:44:36
Самое простое - поступить так:
1. Скопировать функцию из хелпа и убедиться, что оно работает.
2. Постепенно начать превращать эту функцию в свою и засечь, на каком этапе оно перестает работать.
Latuk
Дата: 09.09.2005 16:10:37
>Дело в том, что на форме будет несколько контролов
>получающих условие отбора дург от друга, а логика должна находится на сервере
Обычная каскадная фильтрация
Дык зачем тогда извращатся
почему нельзя сделать источниками ХП-ки
а значения параметров брать из контролов ?
GeenS
Дата: 10.09.2005 16:14:49
А как передать значение параметра из контрола хп-ке которая является источником другого контрола? прямо в RowSource и указывать? если есть такая возможность это ведь ОГО!
Latuk
Дата: 10.09.2005 17:40:41
Способ 1
Делаешь на форме рядом с контролом в ХП источник которого надо передать параметр
контрол(ы) с именем таким же как имя параметра(ров) только без @
его значение будет передаватся в ХП источник в качестве одноименного параметра
если надо передать значение из контрола на другой форме
или название у контрола источника значения для параметра менять не хочется
то надо сделать еще один невидимый контрол в данных которого указать =[ссылка на исходный контрол]

Способ 2
динамически формировать RowSource
строкой типа exec dbo.МояХП 43,'блабла',977

первый способ предпочтительней
второй может потребоватся если несколько контролов на одной форме
используют одну и туже ХП но с разными параметрами
Latuk
Дата: 10.09.2005 17:42:56
Не забудь после изменения значений параметров на форме
перечитать источники сделав Requery контролов
spair2k
Дата: 13.09.2005 14:34:54
Действительно замечательно получилось - поставил контрол, назвал его как параметр ХП и все заработало.

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

Кажется, что нет ничего проще. Находим циклом в первом комбобоксе соответсвующее значение ItemData и позиционируемся с помощью ListIndex. ОК, все работает.

Проделываем то же самое во втором комбоксе (это тот самый, зависимый от первого - улицы, с параметром) фиг вам - говорит неправильное использование ListIndex. И ничего не присваивает. Комбоксы совершенно одинаковые - 2 столбца из таблиц, вытягиваются с помощью ХП, BoundColumn=1 и в том и в другом, единственное различие в том самом контроле - параметре.

В чем тут дело?