powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция определения поля
8 сообщений из 8, страница 1 из 1
Функция определения поля
    #34824471
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В ControlSource грида для алиасов для колонки прописаны <table>.<field>, может, наверное, еще и БД. Есть ли встроенная функция VFP9, которая возвратит только поле без названий таблицы (и БД)?
...
Рейтинг: 0 / 0
Функция определения поля
    #34824537
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно для выделения имени поля нет. Но можно использовать функцию JustExt(), которая, вообще-то, предназначена для выделения расширения файла из пути доступа, но работает чисто формально. Выделяет фрагмент справа до первой точки.

Код: plaintext
1.
2.
?JustExt("MyTable.MyField")
?JustExt("MyBase!MyTable.MyField")

Однако если точки нет, то данная функция ничего не вернет. Поэтому, лучше искусственно подмешивать точку в начало проверяемой строки

Код: plaintext
1.
2.
3.
?JustExt("."+"MyField")
?JustExt("."+"MyTable.MyField")
?JustExt("."+"MyBase!MyTable.MyField")
...
Рейтинг: 0 / 0
Функция определения поля
    #34824590
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только не понятен смысл, зачем возвращать имя поля?
Если есть имя таблицы и алиаса, то можно и имя поля извлеч.
Код: plaintext
1.
2.
lcTable='t_tmp.f_name'
? right(lcTable,len(lcTable)-Rat('.', lcTable))
можно по номеру поля узнать
Код: plaintext
1.
2.
3.
4.
select t_tmp
FOR i= 1  TO FCOUNT('t_tmp')
  ? FIELD(i)
ENDFOR 
...
Рейтинг: 0 / 0
Функция определения поля
    #34824593
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, это в точку, спасибо.
...
Рейтинг: 0 / 0
Функция определения поля
    #34824623
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GoshaS. Просто у меня тэги создаются по необходимости и называются по имени поля, вот для быстрого анализа и буду использовать предложенное ВладимиромМ. То золото, что просто.
...
Рейтинг: 0 / 0
Функция определения поля
    #34824636
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно сделать так,
что при взлете у колонок и текстбоксов в гриде
будут соответствующие св-ва

создается класс колонка
создается класс хедер
создается класс грид
гриду указываются классы колонок и хедеров

и примерно такие методы

метод колонки или текстбокса колонки
ControlSource_assign
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
lparameters tcNewVal
THIS.CONTROLSOURCE = tcNewVal
if !empty(tcNewVal)
	local laAliasFldName( 1 ), lnAtrControlSource
	* раскинем источник на алиаз и имя поля
	lnAtrControlSource = alines(laAliasFldName,this.ControlSource,'.')
	if lnAtrControlSource= 2  and !empty(laAliasFldName( 1 )) and !empty(laAliasFldName( 2 ))
		* запомним имя курсора и поля
		if lower(laAliasFldName( 1 ))<>'thisform' and used(laAliasFldName( 1 )) 
			store alltrim(laAliasFldName( 1 )) to this.cAlias
			store alltrim(laAliasFldName( 2 )) to this.cField
		else 
			store '' to this.cAlias, this.cField
		endif
	else 
		store '' to this.cAlias, this.cField
	endif
else
	if !empty(this.cAlias) or !empty(this.cField)
		store '' to this.cAlias, this.cField
	endif
endif
return .t.

метод инит колонки или тексбокса колонки
init (для явно указанных в дизайнере)
Код: plaintext
1.
2.
3.
if !empty(this.ControlSource)
    this.controlsource_assign(this.ControlSource)
endif

далее Вы можете научить Ваш грид и другим премудростям
...
Рейтинг: 0 / 0
Функция определения поля
    #34824709
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо. Спасибо. С недавних пор стараюсь писать примерно так, как Вы предложили.
...
Рейтинг: 0 / 0
Функция определения поля
    #34824743
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай, если понадобиться еще выделять имя таблицы, можно воспользоваться функциями GetWordNum() и GetWordCount(). Хотя это немного сложнее

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LOCAL lcString, lcDelimiters
lcString = "MyBase!MyTable.MyField"	&& строка, в которой ищем слова
lcDelimiters = ".!"		&& возможные символы-разделители слов в строке

* Количество слов в строке
LOCAL lnCountWord
lnCountWord = GetWordCount(m.lcString,m.lcDelimiters)

* Ищем предпоследнее слово
?GetWordNum(m.lcString, m.lnCountWord- 1 , m.lcDelimiters)

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


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