On-line:гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N:5407
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:10.06.17 14:59.Заголовок:Непонятки при отборе из базы ?


Что то при отборе из базы двояться записи ....
База проиндексирована по полю INET.
Делаю так:
nInet := 0 
aRec := {}
.....
SELECT ZMAIN
DbSetOrder(3)
GOTO TOP
dbSeek(nInet, .T. ) // Set softseek on
DO WHILE !EOF()
IF ZMAIN->INET < 5 .AND. ZMAIN->DATE2 >= CtoD("01.01.17")
AADD( aRec, { ZMAIN->ID, ZMAIN->NNZ, RECNO() } )
ENDIF
dbSkip(1)
ENDDO
MsgDebug("массив = ", aRec)

Правлю базу, т.е. для ТРЕХ записей делаю ZMAIN->INET := 0
Вызываю эту функцию и она возвращает массив из 6 элементов !!! Почему ?
1 {56614, "622/03", 56614}
2 {56615, "623/03", 56615}
3 {56616, "624/03", 56616}
4 {56614, "622/03", 56614}
5 {56615, "623/03", 56615}
6 {56616, "624/03", 56616}

Что не так делаю ?

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


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




Пост N:6449
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:10.06.17 16:55.Заголовок:Andrey пишет: AADD(..


Andrey пишет:

 цитата:
AADD( aRec, { ZMAIN->ID, ; ZMAIN->NNZ, RECNO() } )



Для начала
 
AADD( aRec, { ZMAIN->ID, ; ZMAIN->NNZ, ZMAIN->(RECNO()) } )


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




Пост N:6450
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:10.06.17 17:22.Заголовок:Ходишь по базе ZAIVK..


Ходишь по базе ZAIVKA2MAIN в цикле а массив заполняешь с одной и той же записи ZMAIN ,
так как не видать ни каких телодвижений с ней.
С будуна код писал ?

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




Пост N:5408
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:11.06.17 14:28.Заголовок:Dima пишет: Ходишь ..


Dima пишет:

 цитата:
Ходишь по базе ZAIVKA2MAIN в цикле а массив заполняешь с одной и той же записи ZMAIN ,


Да нет, ошибся при переносе в форум.

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



Пост N:1515
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:11.06.17 16:11.Заголовок:Andery пишет Да нет,..


Andery пишет
 цитата:
Да нет, ошибся при переносе в форум.


Что даст в файл комада
COPY all FOR ZMAIN->INET < 5 .AND. ZMAIN->DATE2 >= CtoD("01.01.17")

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



Пост N:1516
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:11.06.17 16:14.Заголовок:PS. COPY all TO _a_..


PS.
COPY all TO _a_ FOR ZMAIN->INET < 5 .AND. ZMAIN->DATE2 >= CtoD("01.01.17")

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




Пост N:5410
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:11.06.17 18:14.Заголовок:SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что даст в файл комада
COPY all TO _a_ FOR ZMAIN->INET < 5 .AND. ZMAIN->DATE2 >= CtoD("01.01.17")



Получается база из 3-х записей....
Всё правильно !

А в моём алгоритме 6 элементов.
Так как база проиндексирована по полю INET, сделал доп.условие - получается тоже 3 элемента:
DbSetOrder(3)  
GOTO TOP
dbSeek(nInet, .T. ) // Set softseek on
DO WHILE !EOF()
IF ZMAIN->INET < 5 .AND. ZMAIN->DATE2 >= CtoD("01.01.17")
AADD( aRec, { ZMAIN->ID, ZMAIN->NNZ, RECNO() } )
ENDIF
dbSkip(1)
IF ZMAIN->INET == 5
EXIT
ENDIF
ENDDO


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



Пост N:1518
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:11.06.17 19:24.Заголовок:Andrey пишет Получае..


Andrey пишет
 цитата:
Получается база из 3-х записей....


Надеюсь ты делал тут COPY ... ?
DbSetOrder(3)
COPY all ...
GOTO TOP
dbSeek(nInet, .T. ) // Set softseek on
...


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




Пост N:5411
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:11.06.17 21:21.Заголовок:SergKis пишет: Наде..


SergKis пишет:

 цитата:
Надеюсь ты делал тут COPY ... ?


Нет конечно...

Сделал где посоветовал, образуется база с 3-мя записями. Всё верно !
А в моём алгоритме 6 элементов... Непонятка какая-то...


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



Пост N:1519
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:11.06.17 22:23.Заголовок:Andrey где copy по..


Andrey
где copy поставь _logfile(.T., hb_valtoexp(aRec)) и после enddo

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


Пост N:1104
Зарегистрирован:20.02.11
ссылка на сообщение  Отправлено:12.06.17 00:55.Заголовок:Andrey пишет: ZMAIN..


Andrey пишет:

 цитата:
ZMAIN->INET == 5


Точно больше ошибок при переносе в форум не добавилось?

Что у тебя в полях по которым идёт отбор никому не показал, а ответ просишь.,
. Пиши подробнее.
Да и незачем было делать while! Eof если по ключу отбираешь, достаточно
While ZMAIN->INET <5
Aadd
Skip
End

По коду который в форуме дублироваться записи в массиве не должны,
Выкладывай код из программы без изменений. Мож там что есть. Всю функцию целиком!

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




Пост N:5412
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:12.06.17 14:57.Заголовок:SergKis пишет: где ..


SergKis пишет:

 цитата:
где copy поставь _logfile(.T., hb_valtoexp(aRec)) и после enddo



Дибилизм ! Сегодня попробовал, ВСЁ работает, костыль убрал и теперь выбирается 3 элемента.
Может индекс был сбойным, а сегодня сделал индексацию и всё заработало ...


Haz пишет:

 цитата:
Да и незачем было делать while! Eof если по ключу отбираешь, достаточно
While ZMAIN->INET <5


А если конец базы ?
С таким уже сталкивался.

Ну как не задашь вопрос на форуме - ВСЁ начинает сразу работать !!!
Всё таки не зря говорят: задай вопрос и сам поймешь на него ответ...

Спасибо всем за поддержку !
Алгоритм был правильным !

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




Пост N:6451
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:12.06.17 15:18.Заголовок:Andrey пишет: While..


Andrey пишет:

 цитата:
While ZMAIN->INET <5


Andrey пишет:

 цитата:
А если конец базы ?



While ZMAIN->INET <5 .and. !ZMAIN->(eof())

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




Пост N:3564
Зарегистрирован:23.05.05
ссылка на сообщение  Отправлено:12.06.17 18:24.Заголовок:У меня после первого..


У меня после первого зацикливания лет дцать назад выработался безусловный рефлекс: любой while со skip делать обязятельно с eof(), т.е:

go top / seek
while ! eof() .and. ...
...
skip
enddo

ставлю так не думая, на автомате.

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




Пост N:5414
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:12.06.17 19:54.Заголовок:Dima пишет: While Z..


Dima пишет:

 цитата:
While ZMAIN->INET <5 .and. !eof()


Так раньше делал и перестал.
На таком варианте, программа подвешивается...
Не знаю, может из-за сбойного индекса.

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




Пост N:6452
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:12.06.17 19:56.Заголовок:Andrey пишет: На та..


Andrey пишет:

 цитата:
На таком варианте, программа подвешивается...


Маловероятно.
У меня не вешается и у Паши не вешается.
Повесить её можно только если Dbskip() не в том месте сделать.

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


Пост N:1105
Зарегистрирован:20.02.11
ссылка на сообщение  Отправлено:12.06.17 20:27.Заголовок:Там какая то мутная ..


Там какая то мутная история с индексом))
Дублирование в массиве могло косвенно указывать что что по ключу 5 сбит в индексе адрес записи
И скип опять бросало на три позиции вверх, но тогда почему не циклило и всего один повтор.
Андрей, в следующий раз весь секретный код своей секретной функции выкладывай, а то народ на фантизии изойдет искать
тараканов там где их нет

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


Пост N:1518
Зарегистрирован:09.10.06
ссылка на сообщение  Отправлено:12.06.17 20:48.Заголовок:Haz пишет: Там кака..


Haz пишет:

 цитата:
Там какая то мутная история с индексом))


К примеру аддитивный индекс.
Haz пишет:

 цитата:
Андрей, в следующий раз весь секретный код своей секретной функции выкладывай


А вот провоцировать не надо



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




Пост N:5415
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:14.06.17 09:31.Заголовок:Haz пишет: Андрей, ..


Haz пишет:

 цитата:
Андрей, в следующий раз весь секретный код своей секретной функции выкладывай


Хорошо !
Только я всю функцию выложил почти целиком.
Там у меня один IF был, но я думаю что его и не нужно было выкладывать.

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




Пост N:3565
Зарегистрирован:23.05.05
ссылка на сообщение  Отправлено:14.06.17 11:14.Заголовок:Andrey пишет: ..


Andrey пишет:

 цитата:

SELECT ZMAIN
DbSetOrder(3)
GOTO TOP
dbSeek(nInet, .T. )
// Set softseek on
DO WHILE !EOF()
IF ZMAIN->INET < 5 .AND. ZMAIN->DATE2 >= CtoD("01.01.17")
AADD( aRec, { ZMAIN->ID, ZMAIN->NNZ, RECNO() } )
ENDIF
dbSkip(1)
ENDDO



Не забываем про оптимизацию. Оператор go top лишний - его можно выбросить.
Поскольку индекс по полю INET - грех его не использовать в условии цикла, чтобы не обрабатывать всю таблицу.
В итоге получаем:

SELECT ZMAIN
DbSetOrder(3)
dbSeek(nInet, .T. )
DO WHILE !EOF() .and. ZMAIN->INET < 5
IF ZMAIN->DATE2 >= CtoD("01.01.17")
AADD( aRec, { ZMAIN->ID, ZMAIN->NNZ, RECNO() } )
ENDIF
dbSkip(1)
ENDDO



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




Пост N:5416
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:14.06.17 15:05.Заголовок:Спасибо Pasha ! :sm..


Спасибо Pasha !

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

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