Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста мальчики ??? / 10 сообщений из 10, страница 1 из 1
25.10.2004, 15:21
    #32753051
Maska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
Всем привет !


Вопрос, сформировала таблицу, теперь хочу проиндексировать ее,

по улице+номеру дома+корпусу+квартире

не могу, т.к. в таблице номер дома это 10, 10a, 10б,1, 5, 4а и.т.д

это поле у меня строковое,

подскажите пожалуйста как так сделать чтобы хитро индекс чтобы нумераия шла 1, 4а, 5, 10, 10а, 10б


Спасибо сладкие
...
Рейтинг: 0 / 0
25.10.2004, 15:25
    #32753071
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
Улица + padl(НомерДома,6)+...
...
Рейтинг: 0 / 0
25.10.2004, 15:36
    #32753104
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
как то так
улица+IIF(isalpha(RIGHT(ALLTRIM(dom),1)),PADL(ALLTRIM(dom),10,'0'),PADL(ALLTRIM(dom),9,'0')+'0')+....
...
Рейтинг: 0 / 0
25.10.2004, 16:15
    #32753225
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
По большому счету, корректной индексации не получится

Однако FoxPro позволяет вставлять в выражение индекса пользовательские функции. Вообще-то, это не есть хорошо, но если очень надо, то попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
select MyTab
INDEX ON MyFunc(Street, House, Korp, Room) TO SortOrd.idx COMPACT

FUNCTION MyFunc
LPARAMETERS tcStreet, tcHouse, tcKorp, tcRoom
LOCAL lcRetVal
lcRetVal = m.tcStreet
IF VAL(m.tcHouse)= 0 
	lcRetVal = m.lcRetVal+Space( 10 )+m.tcHouse
ELSE
	lcRetVal = m.lcRetVal+SelNumber(m.tcHouse)
ENDIF
IF VAL(m.tcKorp)= 0 
	lcRetVal = m.lcRetVal+Space( 10 )+m.tcKorp
ELSE
	lcRetVal = m.lcRetVal+SelNumber(m.tcKorp)
ENDIF
IF VAL(m.tcRoom)= 0 
	lcRetVal = m.lcRetVal+Space( 10 )+m.tcRoom
ELSE
	lcRetVal = m.lcRetVal+SelNumber(m.tcRoom)
ENDIF

RETURN (m.lcRetVal)

FUNCTION SelNumber
LPARAMETERS tcString
LOCAL lnNumber, lcNoNumber
lnNumber = VAL(m.tcString)
lcNoNumber = SubStr(m.tcString,LEN(TransForm(m.lnNumber)))
RETURN (STR(m.lnNumber)+PADR(m.lcNoNumber,LEN(m.tcString)))

Смысл всего этого безобразия в том, что я выделяю из символьной строки ту часть, которая является числом (я предполагаю, что число идет вначале строки).

Т.е. вместо строки "101а" я формирую строку вида:

STR(101)+PADR("a",10)

И вот эту-то строку и использую в выражении индекса.
...
Рейтинг: 0 / 0
25.10.2004, 16:23
    #32753256
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
или просто
index on улица+;
IIF(isalpha(RIGHT(ALLTRIM(dom),1)),PADL(ALLTRIM(dom),10,'0'),PADL(ALLTRIM(dom),9,'0')+'0');
+str(корпус)+str(квартира) to myindex
...
Рейтинг: 0 / 0
26.10.2004, 02:11
    #32753905
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
Hi leaf!

"Просто" НЕ будет никогда - номера домов бывают и 10-1 или 10/1 а если это
вводит человек, то и "10 корп.1" запросто появится... В общем лучше сделать
через функцию - а уж её накручивать по мере возможностей :) Конечно ещё
лучше нормализовать структуру данных - разнеся это по отдельным полям :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
26.10.2004, 08:42
    #32754010
Андрей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
У тебя, конечно, есть таблица улиц, таблица домов, таблица квартир.
В каждой из этих таблиц должно быть уникальное поле ID улицы, дома...

Индекс номера дома надо вынести в отдельное поле...
...
Рейтинг: 0 / 0
26.10.2004, 08:45
    #32754012
Андрей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
У тебя, конечно, есть таблица улиц, таблица домов, таблица квартир.
В каждой из этих таблиц должно быть уникальное поле ID улицы, дома
Таблицу квартир лучше всего показавать как представление из этих таблиц...

Индекс номера дома надо вынести в отдельное поле...
...
Рейтинг: 0 / 0
26.10.2004, 09:31
    #32754054
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
2 korolyov
вполне согласен особенно насчет отдельного поля
но в хорошую программу абы что так просто и не введешь
а дробь бывает когда дом стоит на двух улицах
и корпус есть в отдельном поле
так что у меня бы скорее всего просто прокатило бы
...
Рейтинг: 0 / 0
01.11.2004, 10:38
    #32762642
karly™
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста мальчики ???
На Фоксклубе выложил функцию , которая помогает решить указанную проблему
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста мальчики ??? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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