Автор | Сообщение |
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 11:33. Заголовок: Индексация Summer87+Harbour
Пытаюсь подключить harbour к программе расчета зарплаты, которая написана давно и нормально работает. Начала с самого главного - открытие таблиц, индексация и проверка корректности индексов. Компиляцию прошла успешно, но программа не работает. Такое впечатление, что не работает set index. Ломается в блоке: select &namebd ind1=path+namebd ind2=path+namebd+'1' set index to &ind1,&ind2 //контроль корректности индексов kolind=2 &&количество инд.файлов //этот блок выполняется только j=1 for j=1 to kolind sind=iif(j=1,namebd,namebd+str(j-1,1) set order to (j) tind=indexkey(j) &&дальше не выполняется для j=2, потому что tind- пусто next Что я делаю не так?
|
|
|
Ответов - 11
[только новые]
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 15:54. Заголовок: Re:
Люди, так что harbour не допускает подключение нескольких индексных файлов в SET INDEX? Может, все-таки кто-нибудь подскажет выход. Или на такие вопросы здесь не отвечают?
|
|
|
|
| модератор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 16:26. Заголовок: Re:
lena пишет: цитата так что harbour не допускает подключение нескольких индексных файлов в SET INDEX?
Лена! По-видимому дело в использовании макросов при подключении индексных файлов Попробуй заменить макро &ind на (ind) - обрати внимание на СКОБКИ Следующий пример работает нормально на Харборе: function main Local i:=0, block Field Last, First Use test Index On Left( Last,8 )+Left( First,8 ) To test1 Index On Left( Last,8 ) To test2 Index On Last To test3 Set Index To test1, test2, test3 set order to 1 ? indexkey() inkey(0) Go Top Do While !Eof() ? ++i, Last, First skip Enddo ? "------------" inkey(0) skip -1 Do While !Bof() ? i--, Last, First skip -1 Enddo i := 0 set order to 2 ? indexkey() inkey(0) Go Top Do While !Eof() ? ++i, Last, First skip Enddo ? "------------" inkey(0) skip -1 Do While !Bof() ? i--, Last, First skip -1 Enddo i := 0 set order to 3 ? indexkey() inkey(0) Go Top Do While !Eof() ? ++i, Last, First skip Enddo ? "------------" inkey(0) skip -1 Do While !Bof() ? i--, Last, First skip -1 Enddo Use return Nil
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 16:50. Заголовок: Re:
Большое спасибо. Дело в том, что я в своем примере написала '&' не потому, что ошиблась, а потому что так в программе, которую написала фирма по заказу предприятия, и которая работает уже не один год. У меня нет оснований не доверять тому, что столько лет работало. Я думала, что harbour поймет. Придется много переделывать, здесь понатыкано этих "&" море.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 16:53. Заголовок: а так?
select ( namebd ) set index to ( ind1 ), ( ind2 )
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 16:56. Заголовок: совет - забыть про Harbour и пользовать xHarbour (-)
|
|
|
|
| Администратор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 17:10. Заголовок: Re:
странно, я прогнал этот кусочек и он отработал может сама проверка дает какое-то последействие ? что в ней ?
|
|
|
|
| Администратор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 17:12. Заголовок: Re:
Харбор понимает амперсанд, проблем быть не должно я правда описал переменные как private
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 17:15. Заголовок: Re:
SergeJa пишет: цитата select ( namebd ) set index to ( ind1 ), ( ind2 )
Да, в таком виде все у меня заработало. А вот в Clippere в таком виде компиляция проходит, но не работает. - обратная ситуация. SergeJa, мы тут еще до конца не определились harbour or xharbour. Я всего неделю назад начала всем этим заниматься. Пока я вижу, что просто перекомпилировать и запустить не получится.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.01.06 17:32. Заголовок: Re:
Pasha пишет: цитата странно, я прогнал этот кусочек и он отработал может сама проверка дает какое-то последействие ? что в ней ?
for jnind=1 to lmind if jnind=1 sind=imabd else sind=imabd+str(jnind-1,1) endif set order to (jnind) go bottom tind=indexkey(jnind) tind2=&tind seek tind2 if .not.found() OTKDBFI() else tind3=&tind if tind2<>tind3 OTKDBFI() endif endif next procedure OTKDBFI private winpodsk if jnind=1 sind=imabd else sind=imabd+str(jnind-1,1) endif winpodsk=savescreen(24,0,24,79) PODSKAZKA('Ждите !^ Индексация '+imabd+' - '+nazbd+';'+sind+'^;') smind=mind[jnind] gind=gdebd+sind CLEARMEM() jimaindf=gind+'.ntx' if file(jimaindf) erase &jimaindf endif index on &smind to &gind restscreen(24,0,24,79,winpodsk) return Вот реальный кусок.
|
|
|
|
| Администратор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 20.01.06 15:20. Заголовок: Re:
У меня и этот пример отработал xHarbour, правда не релиз июня прошлого года, а недавняя сборка Может с harbour проблема ? или с релизом xHarbour ?
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 20.01.06 15:44. Заголовок: Re:
После недели работы сваливать грехи на Harbour не могу.
|
|
|
|