On-line: i3t4j6, PSP, гостей 0. Всего: 2 [подробнее..]
АвторСообщение



Не зарегистрирован
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 30.05.11 00:54. Заголовок: фильтрование базы с большим количеством записей


clipper 5.01
есть база следующей структуры:
id n 7
name character 42
В этой базе более миллиона записей, name не повторяется.
В get поле вводится несколько символов, потом после нажатия какой то комбинации клавиш выводится только та часть записей базы, в которых первые символы поля name совпадают с введенными в поле get. Так вот если применить set filter to. то фильтрация продолжается очень продолжительное время и поэтому для базы с большим количеством записей не подходит. Даже если дождаться и начать двигаться по записям, то переход от записи к записи не замедляется, так как база отсортирована по name. но когда с первой отображенной записи шагнуть выше или после последней отображенной шагнуть вниз - снова большая задержка. Причина задержек мне понятна. Вопрос: чем заменить set filter to? Переписывать нужные записи в массив тоже не подойдет, так как при небольшом количестве введенных символов в get поле количество записей, подходящих под критерий выборки может превысить максимальный размер массива.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 53 , стр: 1 2 3 All [только новые]


Администратор




Пост N: 1950
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.05.11 08:48. Заголовок: Вместо set filter t..


Вместо

set filter to Name=cName

надо использовать scope:

команду

set scope to cName

или функцию

OrdScope(0, cName)
OrdScope(1, cName)

Если используется clipper 5.2, то эти средства есть в rdd comix
Если clipper 5.3 - то они есть и в обычных rdd dbfcdx/dbfntx

Вместо scope можно просто использовать выборку:

dbSeek(cName)
while ! eof() .and. Name = cName
...
skip
enddo


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 46
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.05.11 21:16. Заголовок: условная индексация



Вместо фильтра в данном случае можно использовать условную индексацию, тормоза при перемещении по записям точно не будет

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 31.05.11 00:49. Заголовок: Pasha пишет: Вместо..


Pasha пишет:

 цитата:
Вместо set filter to Name=cName
надо использовать scope:
команду set scope to cName
или функцию
OrdScope(0, cName)
OrdScope(1, cName)


У меня Clipper 5.01 В NG не нашел ни SET SCOPE ни OrdScope
Программу хотя и объемную надо написать, но одну, не хотелось бы разбираться с новыми версиями клиппера


 цитата:

Если используется clipper 5.2, то эти средства есть в rdd comix
Если clipper 5.3 - то они есть и в обычных rdd dbfcdx/dbfntx

Вместо scope можно просто использовать выборку:
dbSeek(cName)
while ! eof() .and. Name = cName
...
skip
enddo


А что внутри цикла? Создать временную базу? Неподходящие под фильтр записи должны быть скрытыми


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 31.05.11 00:51. Заголовок: Haz пишет: Вместо ф..


Haz пишет:

 цитата:
Вместо фильтра в данном случае можно использовать условную индексацию, тормоза при перемещении по записям точно не будет


А можно поподробнее и с примером. И если возможно, то для клиппер 5.01


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 47
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.05.11 08:53. Заголовок: поподробнее ....



Озадачил

поподробнее это наверное так:

вместо SET FILTER TO (cExp) используй INDEX ON Name FOR (cExp) , где cExp - условие фильтра.
Синтаксис команды INDEX есть в той же NG.
Индекс по базе c двумя полями построиться достаточно быстренько, в него попадут только записи удовлетволяющие условию. Кстати что значит "так как база отсортирована по name" ? командой SORT ? Если так то это лишний тормоз, т.к. индекс уже выстроит тебе порядок записей


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1953
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 31.05.11 09:11. Заголовок: Haz пишет: Индекс п..


Haz пишет:

 цитата:
Индекс по базе c двумя полями построиться достаточно быстренько



эээ.. по миллиону записей ? Да и сколько же таких индексов понадобится, для каждой комбинации ввода в Get ?
При каждом нажатии клавиши молотить миллион записей для создания индекса по условию, который не нужен, ведь индекс по name и так есть
Это не наш метод (c)

Если scope не поддерживаются в 5.01, тогда уже лучше определить навигационные блоки кода для tbrowse. Их есть у меня, только надо адаптитовать компиляцию под 5.01, давно я с ним дело не имел

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 525
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 31.05.11 09:26. Заголовок: Проще Клиппер 5.2 ск..


Проще Клиппер 5.3 скопировать.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 42
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 31.05.11 09:35. Заголовок: Сделать свой Browse ..


Сделать свой Browse либо создать TBrowse-объект с блоками для навигации:
bRange := {|| cFind == имя_поля } // это пример (укажите Ваше условие)
bGoTop := {|| dbseek( cFind ) }
bGoBottom := {|| FindBottom( cFind , bRange)}

// поиск последней записи по условию при наличии индекса по символьному полю
func FindBottom(Key,bRange)
local nR := recno(), xKey := substr(Key,1,len(Key)-1)+chr(asc(substr(Key,-1))+1)
dbseek(xKey)
if !eof() ; dbskip(-1) ; endif
if eof() .or. ! eval(bRange) // не попали !
dbgoto(nR)
do while eval(bRange) // мелкими прыжками
dbskip()
enddo
dbskip(-1)
endif
retu nil

ЗЫ Индекс по симв. полю надо приводить к верхнему/нижнему регистру и, следовательно,
переменную-ключ после Get`a тож надо привести к выбранному регистру при передаче
в коды поиска и сравнения

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1956
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 31.05.11 09:55. Заголовок: СевДон пишет: Сдела..


СевДон пишет:

 цитата:
Сделать свой Browse либо создать TBrowse-объект с блоками для навигации:




Я это и имел в виду, только надо еще определить skipblock
Вот мои процедуры, попробуйте их собрать с 5.01
Параметры:
bIndExp: индексое выражение, либо блок кода, который его вычисляет, либо массив {xTop, xBottom}
bFilter - дополнительный фильтр (необязательно)
nOrder - номер индекса (необязательно)

Пример использования:

oB:GoTopBlock := {|| mGoTop(cName)}
oB:GoBottomBlock := {|| mGoBottom(cName)}
oB:SkipBlock := {|n, x| imSkipper(n, cName)}


#translate ISARRAY( <v1> ) => ( valtype( <v1> ) == "A" )
#translate ISBLOCK( <v1> ) => ( valtype( <v1> ) == "B" )
#translate ISCHARACTER( <v1> ) => ( valtype( <v1> ) == "C" )
#translate ISDATE( <v1> ) => ( valtype( <v1> ) == "D" )
#translate ISLOGICAL( <v1> ) => ( valtype( <v1> ) == "L" )
#translate ISMEMO( <v1> ) => ( valtype( <v1> ) == "M" )
#translate ISNUMBER( <v1> ) => ( valtype( <v1> ) == "N" )

oB:GoTopBlock := {|| mGoTop(bIndExp, bFilter, nOrder)}
oB:GoBottomBlock := {|| mGoBottom(bIndExp, bFilter, nOrder)}
oB:SkipBlock := {|n, x| imSkipper(n, bIndExp, bFilter, nOrder)}

Function mGoTop(bIndExp, bFilter, nOrder)
// -------------------------------------------------------------
// Перемещение на первую запись по фильтру
// -------------------------------------------------------------
Local uIndExp, xIndExp, Released := .f., nOrdSave, lC

if bIndExp == nil
dbGoTop()

else

if nOrder # nil
nOrdSave = IndexOrd()
dbSetOrder(nOrder)
endif

uIndExp = if(IsBlock(bIndExp), EVAL(bIndExp), bIndExp)
if ! IsArray(uIndExp)
xIndExp = uIndExp
if xIndExp # nil
dbSeek(xIndExp)
else
dbGoTop()
endif
else
xIndExp = uIndExp[2]
dbSeek(uIndExp[1], .t.)
lC = .f.
endif

endif

while ! Eof() .and. CheckIndex(xIndExp, lC)
IF bFilter == nil .or. EVAL(bFilter)
Released = .t.
EXIT
ENDIF
dbSkip()
enddo
if ! Released
dbGoto(0)
endif
if nOrdSave # nil
dbSetOrder(nOrdSave)
endif
Return nil


Function mGoBottom(bIndExp, bFilter, nOrder)
// -------------------------------------------------------------
// Перемещение на последнюю запись по фильтру
// -------------------------------------------------------------
Local uIndExp, xIndExp, Released := .f., nOrdSave, lC

if bIndExp == nil
dbGoBottom()

else

if nOrder # nil
nOrdSave = IndexOrd()
dbSetOrder(nOrder)
endif

uIndExp = if(IsBlock(bIndExp), EVAL(bIndExp), bIndExp)
if ! IsArray(uIndExp)
xIndExp = uIndExp
if xIndExp # nil
dbSeekLast(xIndExp)
else
dbGoBottom()
endif
else
xIndExp = uIndExp[1]
dbSeekLast(uIndExp[2], .t.)
lC = .t.
endif
endif

while ! Bof() .and. ! Eof() .and. CheckIndex(xIndExp, lC)
IF bFilter == nil .or. EVAL(bFilter)
Released = .t.
EXIT
ENDIF
dbSkip(-1)
enddo
if ! Released
dbGoto(0)
endif
if nOrdSave # nil
dbSetOrder(nOrdSave)
endif
Return nil


Function mSkipper(n, bIndExp, bFilter, nOrder)
// -------------------------------------------------------------
// Перемещения по файлу на количество записей n
// -------------------------------------------------------------
Local uIndExp, nRet := 0, nRec := RecNo(), xIndExp1, xIndExp2, nOrdSave
Local lC

if bIndExp # nil
if nOrder # nil
nOrdSave = IndexOrd()
dbSetOrder(nOrder)
endif

uIndExp := if(IsBlock(bIndExp), EVAL(bIndExp), bIndExp)
if ! IsArray(uIndExp)
xIndExp1 := xIndExp2 := uIndExp
else
xIndExp1 = uIndExp[1]
xIndExp2 = uIndExp[2]
lC := (n < 0)
endif

endif

if n < 0

while nRet > n
if Eof() .and. LastRec() > 0
mGoBottom(uIndExp, bFilter,,)
else
dbSkip(-1)
endif
if Eof() .or. Bof() .or. ! CheckIndex(xIndExp1, lC)
dbGoto(nRec)
if bFilter # nil
Eval(bFilter)
endif
Exit
endif
if bFilter == nil .or. Eval(bFilter)
nRec = RecNo()
nRet --
endif
enddo

elseif n > 0

while nRet < n
dbSkip()
if Eof() .or. ! CheckIndex(xIndExp2, lC)
dbGoto(nRec)
if bFilter # nil
Eval(bFilter)
endif
Exit
endif
if bFilter == nil .or. Eval(bFilter)
nRec = RecNo()
nRet ++
endif
enddo

elseif bFilter # nil

Eval(bFilter)

endif
if nOrdSave # nil
dbSetOrder(nOrdSave)
endif
Return nRet

Function CheckIndex(xIndExp, lC)
// -------------------------------------------------------------
// Проверка фильтра по индексному выражению
// -------------------------------------------------------------
Local l, xKey
if xIndExp == nil
l = .t.
else
xKey := &(IndexKey())
if lC == nil
if IsDate(xKey) .and. IsCharacter(xIndExp)
l := (DTOS(xKey) = xIndExp)
else
l := (xKey = xIndExp)
endif
else
l := if(lC, (xKey >= xIndExp), (xKey <= xIndExp))
endif
endif
Return l

Function dbSeekLast(xExpr, lC, nOrd)
// -------------------------------------------------------------
// Находит последнюю запись по ключевому выражению xExpr
// Возвращает:
// Логическое значение (найдена или нет).
// -------------------------------------------------------------
Local xSeek, x, cc, nc, nOldOrd
Local cIndex := IndexKey()

if nOrd # nil .and. (nOldOrd:=IndexOrd()) # nOrd
dbSetOrder(nOrd)
endif

if ValType(xExpr) == 'C'
if len(xExpr) == 0
dbGoBottom()
Return ! Eof()
endif
xSeek := incStr(xExpr)
else //IF ValType(xExpr) == 'N'
xSeek := xExpr + 1
endif
dbSeek(xSeek, .t.)
dbSkip(-1)
x := &cIndex

if lC == nil
if ! (if(ValType(x) == 'D' .and. ValType(xExpr) == 'C', DTOS(x), x) = xExpr)
dbGoto(0)
endif
else
if x > xExpr
dbGoto(0)
endif
endif

if nOrd # nil .and. nOrd # nOldOrd
dbSetOrder(nOldOrd)
endif
Return ! Eof()

Function IncStr(cStr)
Local ser, c
for ser := len(cStr) to 1 step -1
c := Chr(Asc(Substr(cStr, ser, 1)) + 1)
cStr := Stuff(cStr, ser, 1, c)
if c # Chr(0)
exit
endif
next
Return cStr


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 48
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.05.11 10:43. Заголовок: Предложил самый простой вариант


Согласен с СевДон и Pasha, для отображения в бровсе предложенный вариант оптимален.

Я же предложил самый простой и возможно - единственно приемлемый для SergeyKorotun исходя из его комментариев к задаче.

Pasha пишет:

 цитата:
эээ.. по миллиону записей ? Да и сколько же таких индексов понадобится, для каждой комбинации ввода в Get ?
При каждом нажатии клавиши молотить миллион записей для создания индекса по условию, который не нужен, ведь индекс по name и так есть
Это не наш метод (c)



Проверил, на миллион записей индекс строится 4 секунды. Приемлемое время для ожидания, да и не на каждое нажатие, а по "какой -то" комбинации, и про индекс по Name не уточнялось ( есть только "отсортировано" ), и как потом выборку эту обрабатывать будут тоже не известно. Индекс потребуется один, после нажатия заветной комбинации , старый индекс рушим, новый строим .
Да и навыки программирования ( в том числе и броуз объектов ) у топикстартера - неизвестны. В любом случае, решение предложенное СевДон и Pasha многим на форуме будет полезно.

PS. Только прошу "меня за советскую власть не агитировать" , на клиппере подобные проблемы когда-то решал через Sx_WildSeek() - SIXRDD , на харбуре - через SQL запросы.






Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1957
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 31.05.11 10:57. Заголовок: Haz пишет: Проверил..


Haz пишет:

 цитата:
Проверил, на миллион записей индекс строится 4 секунды



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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1958
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 31.05.11 11:20. Заголовок: К тому же 5.01 не по..


К тому же 5.01 не поддерживает условную индексацию, так что это в любом случае не вариант

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 49
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.05.11 11:37. Заголовок: ...


Pasha пишет:

 цитата:
К тому же 5.01 не поддерживает условную индексацию, так что это в любом случае не вариант



а вот это аргумент, однако

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 216
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 31.05.11 13:21. Заголовок: Есть у меня библиот..


Есть у меня библиотека SIXrdd к Clipper 5.01.

 цитата:

Программу хотя и объемную надо написать, но одну, не хотелось бы разбираться с новыми версиями клиппера



Но если уж переделывать программу , то лучше сразу на Харбор.Много другого хорошего получишь.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 43
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 31.05.11 13:57. Заголовок: Судя по условиям осм..


Судя по условиям осмелюсь предположить что эта база содержит список, например, матценностей с
идентификаторами и задача состоит в отсеве похожих записей по условию для последующей
ВИЗУАЛЬНОЙ выборки оператором (с пометкой) и передаче этих записей в др.документ.
Если это так предлагаю не фильтровать базу а делать контекстный поиск первой записи по условию
и дальше пусть оператор выполняет свою работу.
1. на нижней части рамки броуза сделать строку ввода и по нажатию любой цифро-буквенной
клавишы формировать строку поиска и делать seek, и сразу обновлять брауз
2. если искомая комбинация не найдена можно бибикнуть
т.е. если надо найти "Пиво светлое Опупенное" то оператор уже после ввода 4 букв попадет в
раздел ПИВО и, например, светлого почемуто нет то можно переходить к поиску следующей позиции накладной,
т.е. вводить новую строку поиска, а если есть то оператор будет шагать вниз пока не найдет шо надо или пока ПИВО не закончится.
Таким образом не тратиться время на выборку, переход на первую запись произойдет АРХИБЫСТРО,
а выход за пределы "фильтра" оператор и сам увидит
ЗЫ чёто пример с ПИВОМ не совсем удачен -- организм стал быстро пересыхать

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 31.05.11 19:28. Заголовок: СевДон пишет: Судя ..


СевДон пишет:

 цитата:
Судя по условиям осмелюсь предположить что эта база содержит список, например, матценностей с
идентификаторами и задача состоит в отсеве похожих записей по условию для последующей
ВИЗУАЛЬНОЙ выборки оператором (с пометкой) и передаче этих записей в др.документ.



Матценностей наверно столько не существует. Это база с списком всех фамилий Украины. Передать в get поле надо только одну запись, визуально выбранную оператором из каким-то образом отфильтрованной базы. В базе должны отображаться только те записи, у которых первые символы фамилий совпадают с теми, что введены в get поле. Фамилии, не удовлетворяющие условиям фильтрации, не должны быть видимыми.

INDEX ON есть в NG для клиппер 5.01, а INDEX ON ... FOR нет

Я не переделываю программу, а пишу новую. Существует официальная программа на Фокспро, но очень неудобная в использовании. Хотя отфильтрованный справочник фамилий высвечивается практически мгновенно.

Справочники обновляются централизовано. Но я могу делать с ними что угодно, так как работаю с их копиями. То есть после копирования могу например отсортировать.

Последней проге, написанной мной на клиппере лет десять. TBrowse тогда не освоил. И сейчас использую dbedit()
Переход на клиппер версии выше 5.01 нежелателен в связи с англоязычным NG. Но если реализовать выборку на 5.01 не удастся, то лучше перейду на 5.х, чем на 5.01 осваивать tbrowse

Индексация базы каждый раз перед вызовом из get поля не подходит, так как продолжительность индексации сделает работу с программой некомфортной.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 526
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 31.05.11 19:38. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Я не переделываю программу, а пишу новую. Существует официальная программа на Фокспро, но очень неудобная в использовании.


Ё-маё! Дык, делайте на Harbour. Там все есть, что вам нужно. Сразу сделаете с OrdScope и всё...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 31.05.11 20:45. Заголовок: PSP пишет: Ё-маё! Д..


PSP пишет:

 цитата:
Ё-маё! Дык, делайте на Harbour. Там все есть, что вам нужно. Сразу сделаете с OrdScope и всё...


процентов 90 уже написано. Если б вы предложили делать, ну например, на оракле, возможно б и начал изучать с нуля. Но заставлять изучать Harbour, это все равно что заставлять фирму по производству телевизоров усовершенствовать черно-белый телевизор.
Или я заблуждаюсь? Тогда дайте ссылку на нормальную доку по Harbour

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 529
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 31.05.11 20:57. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
процентов 90 уже написано.


Ничего переписывать не надо.

 цитата:
Но заставлять изучать Harbour, это все равно что заставлять фирму по производству телевизоров усовершенствовать черно-белый телевизор.


Это - тот же Клиппер. http://harbour-project.org/ В этом форуме: http://clipper.b.qip.ru/?0-4
Все, что есть в Клиппер 5.3 (а уж тем более 5.01), есть в Harbour. И даже больше.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1775
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.11 23:58. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Или я заблуждаюсь? Тогда дайте ссылку на нормальную доку по Harbour



Заблуждаешься... Бери и пользуйся.... http://clipper.b.qip.ru/?1-4-0-00000515-000-0-0-1267900828

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 191
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 01.06.11 00:31. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Это база с списком всех фамилий Украины


Пенсионный фонд, налоговая инспекция?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 217
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 01.06.11 10:08. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:


 цитата:
Существует официальная программа на Фокспро, но очень неудобная в использовании. Хотя отфильтрованный справочник фамилий высвечивается практически мгновенно.


Подозреваю, что Фокспро использует запросы.
Я то же при формировании выборок, отчетов использую запросы, которые можно формировать в ADSRDD. Хотя меня наши"корифеи" освистали, считаю такую возможность очень удобной и достаточно быстрой.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 44
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 01.06.11 11:58. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Индексация базы каждый раз перед вызовом из get поля не подходит


(пере)индексация выполняется в сл.случаях:
1. при отсутствии индекса (первый запуск системы)
2. при обнаружении некорректного завершения предыдущего сеанса задачи
3. из задачи как профилактика (в случае предположения о разрушении индекса, редко но бывает)

моё предложение о замене выборки на быстрый поиск 1й записи основывается на том, что оператор
всё равно будет искать визуально треб. запись и терять время на выборку -- эт лишнее.
например, если надо найти Иванищенко, достаточно ввести Иван (а это и так надо будет делать)
и дальше оператор скролингом вниз будет высматривать нужное фамилиё. и если он увидит на
очередном экране, например, Кабанов он и так поймёт что поиск(выборка) не удался.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 13:47. Заголовок: Andrey пишет:  цит..


Andrey пишет:

 цитата:

 цитата:
Или я заблуждаюсь? Тогда дайте ссылку на нормальную доку по Harbour

Заблуждаешься... Бери и пользуйся.... http://clipper.b.qip.ru/?1-4-0-00000515-000-0-0-1267900828


Не нашел там доку по функциям, командам, ... Harbour

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 531
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 01.06.11 13:56. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Не нашел там доку по функциям, командам, ... Harbour


Все так же, как и в Клиппере. Просто компилируй свои исходники Харбором и получай 32-разрядное Win-приложение.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 7
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 18:46. Заголовок: PSP пишет: Все так ..


PSP пишет:

 цитата:
Все так же, как и в Клиппере. Просто компилируй свои исходники Харбором и получай 32-разрядное Win-приложение.


Проблема в том, что в клиппер 5.01 недостаточно функций для реализации поставленной задачи. А русскоязычного NG для клиппер 5.3 не нашел. Помогите ссылками или бросьте на мой ящик korotun_sn@mail.ru.
А получится дос или вин приложение, не столь важно. А возможно с вин приложением будут проблемы с украинскими буквами. Используется keyrus

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 532
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 01.06.11 19:00. Заголовок: Русских у меня нет. ..


Русских у меня нет. А английская доступна, к примеру, вот так: http://www.ousob.com/ng/53guide/


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 8
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 19:06. Заголовок: СевДон пишет: моё п..


СевДон пишет:

 цитата:
моё предложение о замене выборки на быстрый поиск 1й записи основывается на том, что оператор
всё равно будет искать визуально треб. запись и терять время на выборку -- эт лишнее.
например, если надо найти Иванищенко, достаточно ввести Иван (а это и так надо будет делать)
и дальше оператор скролингом вниз будет высматривать нужное фамилиё. и если он увидит на
очередном экране, например, Кабанов он и так поймёт что поиск(выборка) не удался.


Дело в том что в программе не один справочник с большим количеством записей. И если в справочнике фамилий двух одинаковых нет, то в справочнике населенных пунктов сколько угодно. И прокрутив немного далее записи, можно выбрать искомый населенный пункт, но с другого района. Поэтому неподходящие записи не должны быть видимыми(другой области и другого района).
А справочник с фамилиями был дан для примера. Не один здравомыслящий оператор не будет набирать только часть фамилии, чтобы затем несколько букв выбрать из (1 100 000 записей/30 букв алфавита/4 введенных в вашем примере букв (ИВАНищенко))=около 10 000 записей. Ему проще добрать ИЩЕНКО

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 9
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 19:10. Заголовок: PSP пишет: Русских ..


PSP пишет:

 цитата:
Русских у меня нет. А английская доступна, к примеру, вот так: http://www.ousob.com/ng/53guide/


Английский NG устанавливается при инсталляции клиппер 5.3, подошла б дока в любом виде на русском языке

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 192
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 01.06.11 19:22. Заголовок: PSP пишет: SergeyKo..


PSP пишет:

 цитата:
SergeyKorotun пишет:

цитата:
процентов 90 уже написано.


Ничего переписывать не надо.



Оптимальный вариант - Harbour.

SergeyKorotun пишет:

 цитата:
Но заставлять изучать Harbour, это все равно что заставлять фирму по производству телевизоров усовершенствовать черно-белый телевизор.
Или я заблуждаюсь?


Скорее всего заблуждаетесь.
Вот Ваша цитата:
SergeyKorotun пишет:

 цитата:
Я не переделываю программу, а пишу новую. Существует официальная программа на Фокспро, но очень неудобная в использовании.


Что Вы делаете? Правильно - усовершенствуете. Так что определитесь что Вам надо.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 11
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 20:13. Заголовок: AlexMyr пишет: Что ..


AlexMyr пишет:

 цитата:
Что Вы делаете? Правильно - усовершенствуете. Так что определитесь что Вам надо.


В базе есть вся информация о клиенте. Допустим в клиента изменился почтовый индекс. Очень распространенный случай. Был шестизначный, стал пятизначный. В официальной программе все надо ввести вручную (форма, которую заполняет клиент занимает весь лист формата А4, пол листа - вопросы, на второй половине - ответы). Правда в некоторые поля можно занести значения, выбрав их из справочника. Но далеко не во все поля. И чтобы добраться до справочника, нужно нажать несколько клавиш. В некоторые поля значения проще было бы занести вручную, но в программе реализован только выбор из справочника. Например к полю кем выдан паспорт (70 символов) справочник вообще не подключен. И вот для того чтобы изменить один почтовый индекс, нужно ввести пол листа А4 текста.
Пишу отдельную программу, которая использует копии справочников из официальной программы (обновляются раз в сутки). После обновления копирую необходимые базы в свою программу и в этой программе ввожу заявления клиентов на протяжении дня. Вечером подливаю набранные заявления в базу официальной программы, передаю их в центр, а свою базу от введенных за день заявлений очищаю.
У каждого клиента есть уникальный номер. После его ввода в моей программе все данные клиента заполняются в поля автоматически и оператору остается только для вышеприведенного примера изменить только почтовый индекс.
Еще пол-года назад прога стояла на 133 пентиуме, сейчас на 700 целероне 128 ОЗУ, вин98

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 50
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.06.11 22:32. Заголовок: не тот инстумент


SergeyKorotun пишет:

 цитата:
Пишу отдельную программу, которая использует копии справочников из официальной программы (обновляются раз в сутки)



Задача в целом понятна, но харбур все же попробуйте, функционал с клиппер 5.0 не сравнить просто. Кстати как подливаете ? если оригинал на фоксе, значит своими вливами рушите ему все индексы ...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 13
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 01.06.11 23:03. Заголовок: Haz пишет: Задача в..


Haz пишет:

 цитата:
Задача в целом понятна, но харбур все же попробуйте, функционал с клиппер 5.0 не сравнить просто. Кстати как подливаете ? если оригинал на фоксе, значит своими вливами рушите ему все индексы ...


Добавляться записи будут в две-три базы. В этих базах много записей не бывает (не больше тысячи), так как это база промежуточная и после поступления квитанции из центра записи в основной базе обновляются соответствующими записями из промежуточной, а из промежуточной удаляются. Переиндексация много времени не займет. Так что поначалу придется переиндексировать с офисной программы несколько баз. Там есть такая возможность. Потом или сам разберусь как в фокспро создать индекс или кого-то попрошу написать *.app. В батник включу сначала свою программу, потом *.app и все будет делаться автоматом.
Я не могу перейти на харбур или хотя бы на клиппер 5.3, не имея документации на русском языке.
Выкручусь как то и клиппером 5.01.
Просто, поскольку планирую поделиться программой с коллегами по области, не хотелось чтобы она хотя бы в чем-то уступала официальной.
И не по теме просьба: дайте нормальных настроек функции color("x/x,x/x,x/x,x/x,x/x") для get объектов.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1776
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.11 23:48. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Я не могу перейти на харбур или хотя бы на клиппер 5.3, не имея документации на русском языке.
Выкручусь как то и клиппером 5.01.


Это только кажется что перейти на Харбор сложно.
Инструкцию по переходу мою читали ? Судя по вашим сообщениям нет !!!
Там у меня все по шагам расписано. Мне письма присылают на почту благодарственные за доку по переходу.
На Клипере 5.01 глупо оставаться имея Харбор. Тем более лицензия нужна даже на Клипер 5.01.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 14
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 02.06.11 00:51. Заголовок: Andrey пишет: Это т..


Andrey пишет:

 цитата:
Это только кажется что перейти на Харбор сложно.
Инструкцию по переходу мою читали ? Судя по вашим сообщениям нет !!!
Там у меня все по шагам расписано. Мне письма присылают на почту благодарственные за доку по переходу.
На Клипере 5.01 глупо оставаться имея Харбор. Тем более лицензия нужна даже на Клипер 5.01.


У нас никто лицензий не проверяет. Инструкцию читал, имея такую инструкцию и мавпа откомпилирует. Но что мне даст переход, если я смогу применять только функционал с клиппера 5.01 и не смогу применить ни одной новой функции или команды харбора, так как нет их описания на русском языке. Английского не знаю.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1777
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.06.11 06:30. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Но что мне даст переход, если я смогу применять только функционал с клиппера 5.01 и не смогу применить ни одной новой функции или команды харбора, так как нет их описания на русском языке. Английского не знаю.


Переход даст во первых СКОРОСТЬ ! Харбор быстрей Клипера на порядок, да и Фокс обгонит.
Во вторых все функции Клипера 5.01 должны работать на хХарборе, различия в синтаксисе минимальны. А дока на русском на Клипер 5.01 ЕСТЬ ?
Английского я тоже не знаю. Но посмотреть как функция написана в английской доке - любой школьник сможет. Что не поймешь, здесь можно будет спросить.
Ссылки на NG по клиперу http://files.mail.ru/8Z0JN1
По хХарбору хелпер здесь на форуме поищи.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1961
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.06.11 07:50. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Но что мне даст переход,



Вы хотя бы сможете легко решить эту маленькую проблему с фильтром. Используя dbedit с 5.01, она на решается в принципе.
А с харбором - легко, надо только scope выдать. Конечно, также легко она решается и переходом на 5.2/5.3, но такой переход сейчас бессмыссленный, поскольку уже давно есть харбор.
Используя харбор, вы будете иметь сырцы всеого, сможете посмотреть, как работает та или иная функция. Не будет проблем с использованием dos, а их все больше и больше.
Ну и tbrowse неплохо бы освоить, пора бросать рудименты и атавизмы вроде dbedit

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 51
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.06.11 08:41. Заголовок: Кстати о телевизорах


SergeyKorotun пишет:

 цитата:
Но заставлять изучать Harbour, это все равно что заставлять фирму по производству телевизоров усовершенствовать черно-белый телевизор.



Сергей давайте по порядку разберем что же вы хотите и какие есть варианты.
Итак, чем заменить set filter to, при обязательных условиях:

Дано:
1 "Английского не знаю."
2."TBrowse тогда не освоил." и "лучше перейду на 5.х, чем на 5.01 осваивать tbrowse"
3."А получится дос или вин приложение, не столь важно."
4. "оператор не будет набирать только часть фамилии ИВАНищенко. проще добрать ИЩЕНКО"
5. "133 пентиуме, сейчас на 700 целероне 128 ОЗУ, вин98"
6. "Пишу отдельную программу, которая использует копии справочников" и "после копирования могу например отсортировать."
7. "Так что поначалу придется переиндексировать"
8. Клиппер 5.01

Предложения
1. Разобраться с Tbrowse - по условиям 2 и 4 не подходит
2. Условная индексация - по условию 8 не подходит
3. Перейти на SIXRDD и более быстрые индексы, там есть шаблоны типа ("*ИЩЕНКО")- по условию 1 опять мимо
4. Перейти на Клиппер 5.х - по условию 1 и 4 мимо
5. Перейти на ADSRDD, где есть SQL - по условию 1 мимо
6. Использовать Харбур - - по условию 1 мимо

Вывод - остается сменить тачку ( условие 5 ) на конфигурацию при которой тормоза исчезнут.
Чистый Клиппер 5.0 вообще не годится для решения задачи с условием 4, можете писать на чем угодно, что понимает dbf формат (все равно работа с копией и проблема совместимости с мастер-базой не волнует).

Ну а теперь про "телевизор" или почему харбур.
1. Минимальные переделки - 90% написанного не надо переписывать
2. win32 приложение - используется вся доступная оперативка, а не кусок ~ в 500к для досовского приложения
3. понимает dbf и кучу других форматов, а также много-много других возможностей
4. в отличие от клиппер не вешает проц на 100% ( клиппер использует 21 прерывание для опроса клавы, позднее был патч , который позволял использовать коммуникационное 2F прерывание ), на вынь выше 98 более двух одновременных задач на непатченом клиппере заставляют задуматься о вечном.

SergeyKorotun, как ни крути ... но выбирать между Клиппер и чем-то еще все же придется.

PS. Лично я вашу задачку с примером на данном справочнике решал бы через ADS одной строкой
SELECT * FROM Base WHERE Name Like "%ИЩЕНКО%", с предварительной индексацией по Name


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 52
Зарегистрирован: 13.09.07
ссылка на сообщение  Отправлено: 02.06.11 20:10. Заголовок: В свое время я рабо..


В свое время я работал на Clipper 5.2 и для решения таких задач с успехом использовал библиотеку Six3.

Sx_SetScope( 0, DtOs( m->dDat1 ) )
Sx_SetScope( 1, DtOs( m->dDat2 ) )

...............................................

Sx_ClrScope(0) // Clear SCOPETOP
Sx_ClrScope(1) // Clear SCOPEBOTTOM

и все дела!Andrey пишет:

Andrey


 цитата:
Харбор быстрей Клипера на порядок, да и Фокс обгонит



Ну это вы уже загнули! Удобнее и комфортнее для программиста - согласен,
но на порядок...


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1781
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.06.11 00:51. Заголовок: leo пишет: Ну это в..


leo пишет:

 цитата:
Ну это вы уже загнули!


Я тесты делал в свое время (лет 5 назад) для Клипера 5.3б и хХарбора 0.77 !
По созданию базы, индексации, условной индексации - все быстрей...
Когда переделал ВСЕ свои программу - то пропала необходимость в трудоемком сопровождении на Клипере. Ну не живет Клипер 5.3б нормально в сети !!!
Да и пользователи довольны стали, программы шустрей работают и не сваливаются за день НИ РАЗУ !!!

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 46
Зарегистрирован: 18.02.11
ссылка на сообщение  Отправлено: 03.06.11 14:07. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:

Переход на клиппер версии выше 5.01 нежелателен ...


Попробуйте тогда вариант типа:
INDEX ON PADR(Name, 20) TO TAG_1 UNIQUE
INDEX ON Name TO TAG_2
и фильтруйте по уникалиному с переключением на полный ...
А переходить совершенно не проблема, на днях Summer перегнал (prg 200K), только строчку
Func Main() добавил



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 03.06.11 18:02. Заголовок: SergejKis пишет: По..


SergejKis пишет:

 цитата:
Попробуйте тогда вариант типа:
INDEX ON PADR(Name, 20) TO TAG_1 UNIQUE
INDEX ON Name TO TAG_2
и фильтруйте по уникалиному с переключением на полный ...


UNIQUE ни к чему, так как справочники ведутся не пользователем, а обновляются с центра и повторяющихся Name нет. Но если бы и были, то может это как бы то ускорило время открытия справочника, но никак бы не повлияло на тормоза, возникающие при нажатии клавиши, которая курсор пытается переместить на запись, не удовлетворяющую условию фильтра.

SergejKis пишет:

 цитата:
А переходить совершенно не проблема, на днях Summer перегнал (prg 200K), только строчку
Func Main() добавил


Ну это же не переход. Это перекомпиляция имеющегося prg файла. Я под переходом понимаю использование тех функций(команд, ...) харбора, которых нет в клиппер 5.01. И вот здесь как раз для меня и есть проблема - отсутствие русской документации. Поэтому допишу на клиппер 5.01. Может попробую создавать временную базу, в которой будут только те записи, которые удовлетворяют фильтру, может еще как-то по другому. Да и я уже писал, что справочник фамилий взял только в качестве примера. Никто не будет открывать этот отфильтрованный справочник, поскольку ввести надо до десятка букв, а в справочнике будет сотни фамилий, удовлетворяющих фильтру. И только после того, как программа будет написана и протестирована, только после этого начну переводить на харбор.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1965
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.06.11 19:52. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Ну это же не переход. Это перекомпиляция имеющегося prg файла. Я под переходом понимаю использование тех функций(команд, ...) харбора, которых нет в клиппер 5.01.



Вы можете собрать свою программу харбором, и добавить несколько строк для фильтра по scope, чем и решите свою проблему. Этот и будет использование функций, которых нет в 5.01


 цитата:
И только после того, как программа будет написана и протестирована, только после этого начну переводить на харбор.



Это хорошо, что вы увидели магистральный путь. А незнания английского не бойтесь, это не будет большим препятствием

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 03.06.11 20:44. Заголовок: Pasha пишет: Вы мож..


Pasha пишет:

 цитата:
Вы можете собрать свою программу харбором, и добавить несколько строк для фильтра по scope, чем и решите свою проблему. Этот и будет использование функций, которых нет в 5.01


и добавив пару функций в недописанную программу, закрыть навсегда возврат к клипперу. И даже если программа дописана, завтра в связи с изменением законодательства или по иным причинам, в нее будет необходимо вносить изменения. А я привык писать так: изменил что-то, посмотрел как работает. Есть оболочка, в которой нажав только Ctrl+F9 и автоматически создастся экзешник и запустится. Что то не-так, здесь же и поправил и снова Ctrl+F9

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1966
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.06.11 21:31. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
закрыть навсегда возврат к клипперу



И не надо.
Но возврат возможен
Пишем:

#ifdef __HARBOUR__
// фильтр по scope
#endif

Собираем клиппером - работает мееееедленно
Собираем харбором - работает мгновенно


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 52
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.06.11 22:12. Заголовок: давно пора....


SergeyKorotun пишет::

 цитата:
закрыть навсегда возврат к клипперу.



Сергей, может выложите исходники куда ( можно тестовый пример ) и вам его в конфе соберут харбуром. Оцените живьем работу, может тогда что-то и поменяется ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 198
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.06.11 11:23. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
и добавив пару функций в недописанную программу, закрыть навсегда возврат к клипперу. И даже если программа дописана, завтра в связи с изменением законодательства или по иным причинам, в нее будет необходимо вносить изменения. А я привык писать так: изменил что-то, посмотрел как работает. Есть оболочка, в которой нажав только Ctrl+F9 и автоматически создастся экзешник и запустится. Что то не-так, здесь же и поправил и снова Ctrl+F9


Что-то я вас не пойму , просите о помощи и сами же отказываетесь от нее и от идей данных на форуме. Из последнего поста следует, что только с помощью клиппера легко внести изменения в разных случаях и с помощью какой-то оболочки с Ctrl+F9. Я думаю Вам форум не поможет пока Вы не определитесь сами что Вам нужно. А пока пусть работает оф. прога на фоксе.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 18
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 12:23. Заголовок: AlexMyr пишет: Что-..


AlexMyr пишет:

 цитата:
Что-то я вас не пойму , просите о помощи и сами же отказываетесь от нее и от идей данных на форуме. Из последнего поста следует, что только с помощью клиппера легко внести изменения в разных случаях и с помощью какой-то оболочки с Ctrl+F9. Я думаю Вам форум не поможет пока Вы не определитесь сами что Вам нужно. А пока пусть работает оф. прога на фоксе.


Цель как можно быстрее написать программу. А это можно реализовать только на языке, на котором был опыт (паскаль, клиппер, парадокс), хотя и десятилетней давности. Пусть немного будет медленнее работать, пусть не будет вызываться какой то справочник из полей, где надо ввести небольшое количество символов (но будет контроль на наличие введенного в справочнике), но запустить программу надо как можно скорее. После этого, поверьте, каждый ответ буду пытаться внедрить, усовершенствуя программу.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 199
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.06.11 13:40. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Цель как можно быстрее написать программу.



С того момента как
SergeyKorotun пишет:

 цитата:
Отправлено: 30.05.11 01:54. Заголовок: фильтрование базы с большим количеством записей


уже можно было на харборе написать основу и с помощью форума освоить ordscope, а с другой стороны есть онлайн переводчик или на худой конец англо-русский словарь. А с третей стороны Вы говорите, что
SergeyKorotun пишет:

 цитата:
Если б вы предложили делать, ну например, на оракле, возможно б и начал изучать с нуля


и Вы думаете, что оракл при наличии русской доки освоить легче чем клиппер=харбор?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 21
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 13:58. Заголовок: Переход на клиппер в..


Переход на клиппер выше 5.01 не планировал, так как язык умирающий, а надо написать только несколько программ. Про существования харбор первый раз услышал на этом форуме. Написал первый вопрос даже не надеясь на ответ, думал клипперистов уже не осталось. Оказывается заблуждался.
Принято решение (обжалованию не подлежит):
1. Дописать программу все же на клиппер 5.01
2. Сразу после завершения освоить новые возможности клиппер 5.03 (все же не стоит забрасывать то, на чем можешь что-то сделать)
3. Перейти на Харбор и перевести на него уже написанные программы, усовершенствовав их.
4. Одновременно с пунктами 2 и 3 осваивать оракл. Основные программы у нас написаны на оракле. Но в нашем округе никто даже не может составить простенький запрос к базе данных.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 202
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.06.11 14:18. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
. Дописать программу все же на клиппер 5.01
2. Сразу после завершения освоить новые возможности клиппер 5.03 (все же не стоит забрасывать то, на чем можешь что-то сделать)
3. Перейти на Харбор и перевести на него уже написанные программы, усовершенствовав их.



Еще раз клиппер=харбор, потому еща раз харбор, иначе никакого конструктива.

SergeyKorotun пишет:

 цитата:
4. Одновременно с пунктами 2 и 3 осваивать оракл. Основные программы у нас написаны на оракле. Но в нашем округе никто даже не может составить простенький запрос к базе данных.


Про оракл и запросы на оракле в другом форуме.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 53
Зарегистрирован: 13.09.07
ссылка на сообщение  Отправлено: 04.06.11 18:25. Заголовок: Andrey Я не ..


Andrey

Я не делал замеров, но работая с большими обьемами не заметил особого увеличения в скорости.
Тем более, как вы говорили, на порядок(уж это я точно бы почувствовал!). Ну а c фоксом
( с его технологией рашмор) Harbour вообще сложно тягаться. Но я все равно предпочитаю
Harbour в первую очередь за то, что это открытая и постоянно развивающаяся система.
А Visual Foxpro Microsoft, к сожалению, уже похоронила.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 47
Зарегистрирован: 18.02.11
ссылка на сообщение  Отправлено: 05.06.11 07:23. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет::

 цитата:

UNIQUE ни к чему, так как справочники ведутся не пользователем, а обновляются с центра и повторяющихся Name нет
и
Дописать программу все же на клиппер 5.01


Уникальный индекс я предложил на первые 20 байт от cName.
На S87 и PC 286 (база до 500000 записей) такая задача была решена следующим образом:
создано 3 уникальных индекса (1-по первому слову, 2-по 1+2 слова, 3-по 1+2+3) и по полному полю.
Если первый символ был * , то filter на вхождение иначе подвод по нужному индексу.
Работало все очень приемлемо.




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 53 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 237
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет