powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (USE) Как закрыть область?
10 сообщений из 10, страница 1 из 1
(USE) Как закрыть область?
    #32924410
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос делетанский но все же(башка не варит, спать пора).
Суть в том, что есть основная таблица T_MAIN.dbf. Есть Text Box в нем по Interactive Change делаю выборку из этой таблицы. Код:
Код: plaintext
1.
clName_cursor="cur"+SYS( 2015 )
SELECT * FROM T_main WHERE t_main.FieldOne LIKE "%"+clFieldOne+"%" ORDER BY &cgOrder INTO CURSOR &clName_cursor &&cursor_find NOFILTER READWRITE
В результате, если в Texy Box внесено значение к примеру 8 символов, то у меня получается в памяти 8 курсоров, а если длительное время поиграть с программой, то дисковое пространство испаряется на глазах :-))).
Так вот...о чём я? В общем решил я эти использованые курсоры Use'ать, для чего перед очередной выборкой пишу:
cgAlias_use=ALIAS() && предполагаю, что это был предыдущий курсор
делаю выборку в курсор
потом идет метод обновления Grid'а
после обновления грида новым курсором пишу
Код: plaintext
1.
2.
3.
IF cgAlias_use#T_main &&ALIAS("T_main")
	SELECT &cgAlias_use
	USE 
ENDIF
выдается ошибка 107, я посмотрел cgAlias_use=ALIAS() не возвращает Character, если верить TYPE(cgAlias_use)="U" (неопределенное).
Вопрос: как мне закрыть предыдущую область и проверить, не является ли она T_main.dbf. Расмотрю другие варианты :-))

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32924428
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Запрос

Код: plaintext
1.
clName_cursor="cur"+SYS( 2015 )
SELECT * FROM T_main WHERE t_main.FieldOne LIKE "%"+clFieldOne+"%" ORDER BY &cgOrder INTO CURSOR &clName_cursor  NOFILTER READWRITE

2. Закрытие

Код: plaintext
1.
2.
3.
IF USED(upper(clName_cursor))
   USE IN &clName_cursor 
ENDIF

А вообще-то если возможно, то лучше сделать в Interactive change передвижение по индексу этой t_main таблицы...
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32924719
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey ChА вообще-то если возможно, то лучше сделать в Interactive change передвижение по индексу этой t_main таблицы...
Это мне слегка не подходит. Потому что у меня что то вроде, скажем телефонного справочника и Text Box'ов у меня гораздо больше 1-го :-)). И InteractiveСhange по индексу слегка не пройдет, объяснять надеюсь не надо почему :-)) А может я чего - то не знаю?
Вчера ещё посидел придумал такую весчь...После выбора в курсор, запоминаю в какой области он открыт и после обновления Grid'а делаю цикл и закрываю все области кроме 1 ("T_main") и последней. Но мне не хочется ориентироваться на № области (сыграет злую шутку *уверен*), хочется на алиас.
Как мне закрыть все области, кроме "T_main" и последней "&clName_cursor", незная педположим их номер?
Мне бы узнать может я неправильно логику строить? *вздых*

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32924732
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Grumax_user Как мне закрыть все области, кроме "T_main" и последней "&clName_cursor", незная педположим их номер?
Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL ARRAY laAliases[ 1 ]
n = AUSED(laAliases)
FOR i =  1  TO n
	IF NOT (laAliases[i,  1 ] == "T_MAIN" OR laAliases[i,  1 ] == UPPER(clName_cursor))
		USE IN (laAliases[i,  1 ])
	ENDIF 
ENDFOR
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32924868
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Sergey Ch:
Закрывать проще так:
USE IN SELECT(lName_cursor)
или
USE IN SELECT("MyCursor")
С уважением, Алексей.
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32924894
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grumax_userМне бы узнать может я неправильно логику строить? *вздых*

Вот именно! Зачем ты каждый раз конструируешь новое имя курсора? Создай один раз одно имя и больше не мучайся!

-) Самый правильный подход - это просто явно прописать имя:

Код: plaintext
SELECT ... INTO CURSOR curSelect NOFILTER

Т.е. явно для себя забить, что имя курсора будет curSelect .

Если он используется в форме с Private DataSession, то конфликтов с другими формами не будет. Даже если они создают курсор с тем же именем. Конфликт возможен только в случае если эта форма открывается в Default DataSession или из нее вызываются формы в Default DataSession.

-) Если все-таки очень хочется помучиться с динамическим именем, то делаешь так:

1) Создаешь пропертю формы, где происходит поиск и в эту пропертю где-то в INIT-формы записываешь имя курсора

Код: plaintext
ThisForm.CursorName = "cur"+SYS( 2015 )

Один раз записываешь одно имя.

2) Когда надо сделать перезапрос, то

Код: plaintext
1.
lcName_cursor = ThisForm.CursorName
SELECT ... INTO CURSOR &lcName_cursor NOFILTER

По хорошему, надо бы проверять на факт существования такого курсора:

Код: plaintext
1.
2.
IF USED(ThisForm.CursorName)
	USE IN (ThisForm.CursorName)
ENDIF

Но для курсоров это особой роли не играет, поскольку даже в случае его существования он будет пересоздан заново молча. Без каких-либо дополнительных системных запросов.
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32925122
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Cyrus Спасибо все отлично работает.
2 ВладимирМ
ВладимирМ-) Самый правильный подход - это просто явно прописать имя:
Да я с самого начала так и сделал! Только у меня баг появился, а где именно я понять не смог :-(( *вздых*
Как дело то происходит...По InteractiveСhange передаю данные с Text Box'ов в свой метод.
Код: plaintext
1.
2.
LOCAL сlValue
сlValue=This.Value 
ThisForm.my_find(ngField_one,cgField_two,сlValue,cgField_four,cgField_five,cgField_six)
В этом методе "My_find()" делаю выборку в курсор в соответствии с переменными...
Код: plaintext
1.
2.
SELECT * FROM ....
THISFORM.My_refreshgrid(clName_cursor)
далее надо обновить Grid, опять свой метод "My_refreshgrid()".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LPARAMETERS clName_Alias

ThisForm.grid1.RecordSource = ""
ThisForm.grid1.RecordSource = clName_Alias
* полей в таблице больше, чем отображается в Grid'e и порядок их отличный
ThisForm.grid1.column1.ControlSource = clName_Alias+".Field_one" 
ThisForm.grid1.column2.ControlSource = clName_Alias+".Field_two" 
ThisForm.grid1.column3.ControlSource = clName_Alias+".Field_three" 
ThisForm.grid1.column4.ControlSource = clName_Alias+".Field_four" 
ThisForm.grid1.column5.ControlSource = clName_Alias+".Field_five" 
ThisForm.grid1.column6.ControlSource = clName_Alias+".Field_six"
И у меня почему-то при одном и том же имени курсора все настройки Grid'a збрасываются на Default(размеры колонок, заголовки и т.д.) и кроме того мелькает молоко, т.е. на Grid'e вообще ничего нет... Плохо осозвать свою беспомощьность :-(((, вот поэтому я и пришел к динамическому имени.
Второе Ваше решение по сути тоже самое прописаное имя .... Спасибо Владимир.
З.Ы. Имена полей изменены для простоты восприятия.

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32925438
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, смотри, что ты делаешь:

-) СНАЧАЛА уничтожаешь источник данных для GRID (команда Select-SQL должна уничтожить одноименный курсор, а потом создать заново с тем же именем), что и приводит к слету всех настроек Grid

-) ПОТОМ настриваешь источник данных для GRID, что уже бесполезно.

Надо так:

В этом методе "My_find()"

Код: plaintext
1.
2.
3.
4.
* Надо сбросить источник данных ДО его модификации
ThisForm.grid1.RecordSource = ""

SELECT * FROM ....
THISFORM.My_refreshgrid(clName_cursor)

Потом можешь запускать свой метод "My_refreshgrid()".
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32925555
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз спасибо ВладимирМ.
Когда читал это, плакал. Пойду застрелюсь понарошку и лишу себя обеда :-)

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(USE) Как закрыть область?
    #32929867
Mikle_Tambov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Макс, это Михон, я в увольнении дорвался до инета, сижу в интернет-центре в Тамбове. Вижу ты потихоньку развиваешься, это радует (ну меня тебе конечно не достать :-))) Так держать !!!

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


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