Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / очищение комбо / 11 сообщений из 11, страница 1 из 1
21.08.2007, 10:40
    #34740779
Снифф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
Hi всем
Народ! очень простой к вам вопрос
в форме используем комбобоксы у кторых RowSourceType=3 (SQL)
предположим что юзер через эту форму удалил запись
после этого комбо должны стать пустыми. тоесть и Value у них должно = (None)
как это сделать?
спасиба
...
Рейтинг: 0 / 0
21.08.2007, 11:31
    #34740994
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
Combo.Requery()
...
Рейтинг: 0 / 0
22.08.2007, 16:34
    #34745362
Снифф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
AleksMedCombo.Requery()не
чегото мы недопонимаем с этими комбо. вопрос немного изменим
вот у нас четка прописана в комбо с RowSourceType=3 (SQL) выборка
RowSource такой

SELECT cРеактив,nId,nТип,nЧасто FROM реативы WHERE nТип= 0 OR (nТип=1 AND nЧасто=1) OR (nТип=1 AND id=2) INTO CURSOR tmp1 ORDER BY Реактив

как же список в комбо может оказаться пустым (а такое бывает)?
...
Рейтинг: 0 / 0
22.08.2007, 16:37
    #34745370
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
Снифф
SELECT cРеактив,nId,nТип,nЧасто FROM реативы WHERE nТип= 0 OR (nТип=1 AND nЧасто=1) OR (nТип=1 AND id=2) INTO CURSOR tmp1 ORDER BY Реактив

как же список в комбо может оказаться пустым (а такое бывает)?

когда

Код: plaintext
 nТип=  0  OR (nТип= 1  AND nЧасто= 1 ) OR (nТип= 1  AND id= 2 )  == .F.
...
Рейтинг: 0 / 0
23.08.2007, 08:36
    #34746356
Снифф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
PaulWistкогда
Код: plaintext
 nТип=  0  OR (nТип= 1  AND nЧасто= 1 ) OR (nТип= 1  AND id= 2 )  == .F.
да это понятно!
но почему ==.F. ? источником является таблица-справочник. записи которые отвечаеют данным условиям в ней ЕСТЬ ВСЕГДА!!!!!
...
Рейтинг: 0 / 0
23.08.2007, 10:30
    #34746660
Снифф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
Короче разобрались. Действительно в одном-единственном случае выборка оказывается пустая.
Пробовали это обойти.
Получается, что выборка может быть двух типов:
SELECT cРеактив,nId,nТип,nЧасто FROM реативы WHERE nТип= 0 OR (nТип=1 AND nЧасто=1) INTO CURSOR tmp1 ORDER BY Реактив
или
SELECT cРеактив,nId,nТип,nЧасто FROM реативы WHERE nТип= 0 OR (nТип=1 AND nЧасто=1) OR (nТип=1 AND id=2) INTO CURSOR tmp1 ORDER BY Реактив
Пробовали присваивать эти выражения переменной и сделать RowSource=переменная.
Ничего не выходит.
Объясните, пожалуйста, как можно менять в этом случае значение RowSource?

За Сниффа
Снусмумрик
...
Рейтинг: 0 / 0
23.08.2007, 11:18
    #34746906
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
А сделать-то чего хотите? Что должно получится в результате и при каких условиях?
...
Рейтинг: 0 / 0
23.08.2007, 11:53
    #34747101
Снифф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
ВладимирМА сделать-то чего хотите? Что должно получится в результате и при каких условиях?
Задумка была такая.
Таблица Реактивы. В ней:
nId - порядковый номер реактива
nТип - тип реактива (их 8 типов)
cРеактив - название, серия, контроль, срок годности и т.п.
Записей, на наш взгляд, в таблице довольно много, около 500. Согласитесь, что у юзера будет проблема отыскать в похожих строках нужную. И самих комбо размещено на форме с Page десятка полтора (каждый Page для 1-2 типов рекатва). Вот мы и решили со Сниффом поступить так.
Сделали в таблице еще поле
nЧасто - как часто используется данный реактив. =1 - часто, =0 - редко. Юзер открывает форму, где редактируются эти реактивы. Он знает, с какими реактивами будет работать сегодня, делает пометку в чекбоксе. А в комбо уходит только нужные значения.
И получилась у нас такая выборка в комбо(только названия курсоров в них разные):

SELECT cРеактив,nId,nТип,nЧасто FROM реактивы WHERE nТип= 0 OR (nТип=1 AND nЧасто=1) OR (nТип=1 AND nId=2) INTO CURSOR tmp1 ORDER BY Реактив

Оказалось, что все отлично работает, если бы не (nТип=1 AND nId=2). Это частный случай, и он нужен обязательно. Но не всегда.
...
Рейтинг: 0 / 0
23.08.2007, 14:29
    #34747958
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
Ну и?.. Проблема-то в чем? Как сделать динамический запрос?

1. На форме создается свой собственный метод. Например, MakeQuery(), который должен возвращать символьную строку - в виде сформированного предложения Select-SQL. Ну, что-то вроде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
* Метод MakeQuery()
LOCAL lcSQLStatment 

IF (некое условие)
	lcSQLStatment = "SELECT cРеактив,nId,nТип,nЧасто"+;
		" FROM реативы"+;
		" WHERE nТип= 0 "+;
			"OR (nТип=1 AND nЧасто=1)"+;
		" INTO CURSOR tmp1"+;
		" ORDER BY Реактив"
ELSE
	lcSQLStatment = "SELECT cРеактив,nId,nТип,nЧасто"+;
		" FROM реативы"+;
		" WHERE nТип= 0 "+;
			"OR (nТип=1 AND nЧасто=1)"+;
			"OR (nТип=1 AND nЧасто=2)"+;
		" INTO CURSOR tmp1"+;
		" ORDER BY Реактив"
ENDIF

RETURN m.lcSQLStatment 

2. В ComboBox делаются настройки

Код: plaintext
1.
2.
Combo1.RowSource = "" - (None)
Combo1.RowSourceType =  3  - SQL Statment

3. В событии Combo.Init() формируется значение

Код: plaintext
1.
This.RowSource = ThisForm.MakeQuery()

Следует помнить, что Combo.Init() выполняется ДО Form.Init(). Если конкретное значение SQL Statment зависит от параметров, переданных в форму, то в Combo.Init можно вообще ничего не писать, но выполнить ниже описанные команды в Form.Init()

4. Когда возникает необходимость обновить содержимое выпадающего списка просто даются такие команды

Код: plaintext
1.
2.
ThisForm.Combo1.RowSource = ThisForm.MakeQuery()
ThisForm.Combo1.Requery()

К сожалению, напрямую прописать метод ThisForm.MakeQuery() в свойстве Combo1.RowSource в дизайнере формы - не получится. В этом случае вычисление происходит почему-то вне контекста формы и идет ругань на недопустимость использования ThisForm.
...
Рейтинг: 0 / 0
23.08.2007, 16:17
    #34748430
Снифф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
ВладимирМНу и?.. Проблема-то в чем? Как сделать динамический запрос?
...............................
К сожалению, напрямую прописать метод ThisForm.MakeQuery() в свойстве Combo1.RowSource в дизайнере формы - не получится. В этом случае вычисление происходит почему-то вне контекста формы и идет ругань на недопустимость использования ThisForm.спасиба!!!
значит нам есть работа завтро утром
на бумаге дествительно так все просто выходет
а сами бы низа что не догдались бы (((((((((((((((
...
Рейтинг: 0 / 0
24.08.2007, 13:48
    #34750809
Снифф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
очищение комбо
Освоили!
Все у нас получилось. Спасибо за ликбез!

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


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