Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция определения поля / 8 сообщений из 8, страница 1 из 1
25.09.2007, 14:13
    #34824471
AMorkovka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция определения поля
В ControlSource грида для алиасов для колонки прописаны <table>.<field>, может, наверное, еще и БД. Есть ли встроенная функция VFP9, которая возвратит только поле без названий таблицы (и БД)?
...
Рейтинг: 0 / 0
25.09.2007, 14:24
    #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
25.09.2007, 14:32
    #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
25.09.2007, 14:33
    #34824593
AMorkovka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция определения поля
Да, это в точку, спасибо.
...
Рейтинг: 0 / 0
25.09.2007, 14:38
    #34824623
AMorkovka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция определения поля
GoshaS. Просто у меня тэги создаются по необходимости и называются по имени поля, вот для быстрого анализа и буду использовать предложенное ВладимиромМ. То золото, что просто.
...
Рейтинг: 0 / 0
25.09.2007, 14:41
    #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
25.09.2007, 14:55
    #34824709
AMorkovka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция определения поля
прошелмимо. Спасибо. С недавних пор стараюсь писать примерно так, как Вы предложили.
...
Рейтинг: 0 / 0
25.09.2007, 15:00
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция определения поля / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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