Ничего не понимаю!

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
vic7tar
Старожил
Сообщения: 228
Зарегистрирован: 09 Февраль 2017, 20:12

Ничего не понимаю!

Сообщение vic7tar » 06 Сентябрь 2019, 22:01

Алексей- Софт-Центр писал(а):
04 Сентябрь 2019, 11:56
Read_B_File - процедура, устанавливающая SET-ом В-файл (около 100 000 записей) и Next-ом читающая всегда 4 (Это я знаю) записи.
Типа:
Set(...)
loop
next(b)
if error() then break.
if условие then break.
....
end
. . .
Для меня это откровение, что GET-ы , читающие 4-е последовательные записи работают быстрее, чем последовательное чтение NEXT-ом!
А ещё, уточните, как из представленного кода видно, что next-ом читается 4 записи именно последовательно (намёк на 2-й if)?
Я так думаю, что считать последовательно 4 записи выглядит примерно так:

Код: Выделить всё

Loop 4 Times
     next(b)
end
Или я что-то недопонимаю?
C10, Win10x64

Алексей- Софт-Центр
Ветеран
Сообщения: 387
Зарегистрирован: 26 Август 2009, 11:41
Откуда: Moscow
Контактная информация:

Ничего не понимаю!

Сообщение Алексей- Софт-Центр » 09 Сентябрь 2019, 15:03

Добрый день!
Всем спасибо за участие!
Нашел проблему, хорошо , что так относительно быстро. Мог бы искать значительно дольше...(((
Сразу напишу - мой косяк.
Оба варианта, с next и get работают одинаково!!! (в данном случае)
В чем была проблема:
Процедура "В", работающая с NEXT-ом файла В, имела различную реакцию на проверку отбора записи после next-a: либо Break, либо Cycle,
в зависимости от некоего параметра Х.
Параметр Х задавался в вызывающей процедуре. В моем случае, он, например Х=1, ЯВНО устанавливал break. И я это визуально видел в тексте.
А на самом деле !!!! он неявно "портился" и обнулившись - устанавливал Cycle, что, естественно, пробегало до конца файла, со всеми вытекающими последствиями.
А почему мог искать долго, потому что портился этот параметр (Х) совсем в другом месте, где я использовал IP-функцию чтения файла, указав "буфер" сstring(31), а читал 32 байта. Вот этот лишний байтик и накрывал мою переменную Х.

Алексей

porutchik
Новичок
Сообщения: 21
Зарегистрирован: 01 Февраль 2009, 5:35

Ничего не понимаю!

Сообщение porutchik » 10 Сентябрь 2019, 0:04

как и в вопросе так и в последнем посте мало, что можно разобрать - "смешались в кучу кони, люди". Потом удивляемся: почему не работает?

kreator
✯ Ветеран ✯
Сообщения: 3356
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Ничего не понимаю!

Сообщение kreator » 10 Сентябрь 2019, 13:58

porutchik писал(а):
10 Сентябрь 2019, 0:04
как и в вопросе так и в последнем посте мало, что можно разобрать - "смешались в кучу кони, люди".
Я понял. Даже скуль посоветовать не удасться. Там тоже так можно влететь. :D
We are hard at work… for you. :)

Yufil
Ветеран движения
Сообщения: 1141
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Ничего не понимаю!

Сообщение Yufil » 10 Сентябрь 2019, 16:11

Но отладчик и трассировку драйвера можно посмотреть, там сразу становится ясно, что БД вроде как ни при чём.

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2284
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Ничего не понимаю!

Сообщение Дед Пахом » 10 Сентябрь 2019, 16:17

Алексей- Софт-Центр писал(а):
09 Сентябрь 2019, 15:03
Сразу напишу - мой косяк.
Чёрт, проиграл пари самому себе - думал, что этот комментарий появится на 4-й или 5-й странице :D
С уважением, ДП

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 873
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Ничего не понимаю!

Сообщение RaFaeL » 10 Сентябрь 2019, 22:48

Алексей- Софт-Центр писал(а):
09 Сентябрь 2019, 15:03
А почему мог искать долго, потому что портился этот параметр (Х) совсем в другом месте, где я использовал IP-функцию чтения файла, указав "буфер" сstring(31), а читал 32 байта. Вот этот лишний байтик и накрывал мою переменную Х.
На всякий случай - лишних байтов два

Ответить