Неправильно строится ключ файла DBF

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1412
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Неправильно строится ключ файла DBF

Сообщение RaFaeL »

Столкнулся с чем-то непонятным: неправильно индексируется файл если указать LOCALE (любую, даже WINDOWS)
Ключ по текстовому полю длиной 4 символа
К примеру записи 04p5, 04p6, 04p7 идут по порядку, а 04p8, 04p9 где-то ближе к концу индексного файла, соответственно SET по значению 04p8 не работает как надо, запись не находит
Версия 6.300.9059
Что делать?
Вложения
testproject.zip
(34.42 КБ) 206 скачиваний
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Неправильно строится ключ файла DBF

Сообщение Shur »

может стоит проверить что в строке: "p" латинская или "р" русская?
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1412
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Неправильно строится ключ файла DBF

Сообщение RaFaeL »

Латинская там везде... (или русская везде, не помню)
Таким способом учетка "Парус" кодирует уникальные поля, регистрозависимое 4-х символьное поле, во всех таблицах такое, соответственно для получения данных надо с этими полями работать
Я обошел в итоге эту непонятку, сбросив в пустую строку CLACOLSEQ, после чего стало все работать. Почему же при любой CLACOLSEQ ключ строится неправильно, так и осталось загадкой. Наверное, глюк драйвера
Ал
✯ Ветеран ✯
Сообщения: 1040
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Неправильно строится ключ файла DBF

Сообщение Ал »

RaFaeL писал(а): Латинская там везде... (или русская везде, не помню)
Таким способом учетка "Парус" кодирует уникальные поля, регистрозависимое 4-х символьное поле, во всех таблицах такое, соответственно для получения данных надо с этими полями работать
Я обошел в итоге эту непонятку, сбросив в пустую строку CLACOLSEQ, после чего стало все работать. Почему же при любой CLACOLSEQ ключ строится неправильно, так и осталось загадкой. Наверное, глюк драйвера
RBM_K KEY(+GOO:DOCS_RN),DUP ?
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1412
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Неправильно строится ключ файла DBF

Сообщение RaFaeL »

Ал писал(а):
Не понял вопроса. Да, этот ключ
Ал
✯ Ветеран ✯
Сообщения: 1040
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Неправильно строится ключ файла DBF

Сообщение Ал »

RaFaeL писал(а):
Ал писал(а):
Не понял вопроса. Да, этот ключ
у вас в коде

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

GOODSPEC             FILE,DRIVER('dBase4'),OEM,NAME('GOODSPEC.DBF'),PRE(GOO),BINDABLE,THREAD
RBM_K                    KEY(GOO:DOCS_RN),DUP
Record                   RECORD,PRE()
DOCS_RN                     STRING(4)
                         END
                     END              
не так стоит - без "+"..., если поставить
RBM_K KEY(+GOO:DOCS_RN),DUP ?
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1412
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Неправильно строится ключ файла DBF

Сообщение RaFaeL »

А
Ну вообще говоря это одно и то же. В рабочем проекте с плюсом, никакой разницы
Ал
✯ Ветеран ✯
Сообщения: 1040
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Неправильно строится ключ файла DBF

Сообщение Ал »

RaFaeL писал(а):А
Ну вообще говоря это одно и то же. В рабочем проекте с плюсом, никакой разницы
ну ещё и OEM забыт - в рабочем проекте?
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1412
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Неправильно строится ключ файла DBF

Сообщение RaFaeL »

Где забыт? Не забыт, на месте
Ал
✯ Ветеран ✯
Сообщения: 1040
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Неправильно строится ключ файла DBF

Сообщение Ал »

тогда все должно быть отсортировано, если указано RBM_K KEY(+GOO:DOCS_RN) и OEM
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1412
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Неправильно строится ключ файла DBF

Сообщение RaFaeL »

Ал писал(а): тогда все должно быть отсортировано, если указано RBM_K KEY(+GOO:DOCS_RN) и OEM
Если бы это было так, этой темы бы не было ))
Ал
✯ Ветеран ✯
Сообщения: 1040
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Неправильно строится ключ файла DBF

Сообщение Ал »

RaFaeL писал(а):Латинская там везде... (или русская везде, не помню)
Таким способом учетка "Парус" кодирует уникальные поля, регистрозависимое 4-х символьное поле, во всех таблицах такое, соответственно для получения данных надо с этими полями работать
Я обошел в итоге эту непонятку, сбросив в пустую строку CLACOLSEQ, после чего стало все работать. Почему же при любой CLACOLSEQ ключ строится неправильно, так и осталось загадкой. Наверное, глюк драйвера
ну я так понимаю так и должно быть - "читать и писать файлы следует, всегда используя одну и ту же последовательность сортировки", а если используется "значение WINDOWS, то последовательность сортировки, используемая по умолчанию, определяется установкой страны в Windows. Если эта переменная в файле установок среды опущена, то по умолчанию используется последовательность сортировки в стандарте ANSI", ну а т.к. стоит OEM - видимо берется набор символов OEM ASCII, в котором и писался файл в Парусе?
Вообщем все как в доке - если файл совместим с DOS, то указываем OEM, в "противном случае задавайте значение WINDOWS или опустите эту переменную".
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Неправильно строится ключ файла DBF

Сообщение Shur »

Ал писал(а): ну я так понимаю так и должно быть - "читать и писать файлы следует, всегда используя одну и ту же последовательность сортировки",
BUILD() как раз и лечит эту проблему. Здесь всё хорошо.

Поиграл с представленной программой. С 04P5, 04P6, 04P7, 04P8, 04P9 проблем с сортировкой не заметил.
Дальше чуть поинтереснее.
1. Если CLACOLSEQ вообще не указан, то берётся сортировка ANSI. Здесь Ал совершенно прав. Заглянем внутрь ndx-файла:

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

04P0    pN  04P1    qN  04P2    rN  04P3    sN  04P4    tN  04P5    uN  04P6    vN  04P7    wN  04P7    xN  04P8    yN  04P9    zN  04PA    {N  04PB    |N  04PC    }N  04PD    ~N  04PD    N  04PE    АN  04PF    БN  04PG    ВN  04PH    ГN  04PH    ДN  
...
04PZ    иN  04PZ    йN  04Pa    кN  04Pb    лN  04Pc    мN  04Pd    нN  04Pe    оN  04Pf    пN  04Pg    ░N
Теперь посмотрим, если CLACOLSEQ=Windows. Фрагмент ndx-файла:

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

04P0    pN  04P1    qN  04P2    rN  04P3    sN  04P4    tN  04P5    uN  04P6    vN  04P7    wN  04P7    xN  04P8    yN  04P9    ©N  04Pa    zN  04PA    ЄN  04Pb    {N  04PB    «N  04Pc    |N  04PC    ¬N  04Pd    }N  04PD    ~N  04PD    ­N  04Pe    N  04PE    ®N  04Pf    ЂN  04PF    ЇN  04Pg    ЃN  04PG    °N  04Ph    ‚N  04PH    ѓN  04PH    ±N  
Обращаем внимание, что 04Pa стоит раньше 04PA, а 04Ph стоит раньше двух 04PH.

Наконец рассмотрим CLACOLSEQ='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuWwXxYyZzАаБбВвГгДдЕеЁёЖжЭзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя'.

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

04P0    pN  04P1    qN  04P2    rN  04P3    sN  04P4    tN  04P5    uN  04P6    vN  04P7    wN  04P7    xN  04P8    yN  04P9    zN  04PA    *       ©N  04Pa    {N  04PB    ЄN  04Pb    |N  04PC    «N  04Pc    }N  04PD    ~N  04PD    ¬N  04Pd    N  04PE    ­N  04Pe    ЂN  04PF    ®N  04Pf    ЃN  04PG    ЇN  04Pg    ‚N  04PH    ѓN  04PH    °N  04Ph    „N  
На мой взгляд из представленных этот вариант наиболее приемлем: сначала идёт 04PA, потом 04Pa; сначала два 04PH, потом 04Ph.

Как-то так.
Последний раз редактировалось Shur 29 Январь 2016, 11:26, всего редактировалось 1 раз.
Ал
✯ Ветеран ✯
Сообщения: 1040
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Неправильно строится ключ файла DBF

Сообщение Ал »

Shur писал(а):...Как-то так.
ого, целое исследование!
для каких версий операционных систем Windows и с какими региональными установками проверялось?

PS TC, по-моему, написал, что не сработал у него BUILD - при принудительной смене последовательности сортировки/кодировки в индексном файле строится последовательность отличная от исходной (т.е. при которой создавался файл с данными в Парусе)
неправильно индексируется файл если указать LOCALE (любую, даже WINDOWS)
, пока он не сбросит настройки
Я обошел в итоге эту непонятку, сбросив в пустую строку CLACOLSEQ, после чего стало все работать. Почему же при любой CLACOLSEQ ключ строится неправильно, так и осталось загадкой.
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Неправильно строится ключ файла DBF

Сообщение Shur »

Ал писал(а): для каких версий операционных систем Windows и с какими региональными установками проверялось?
Ценное замечание. Тесты проводились под Win10, локализованной для русского языка.
Ал писал(а): PS TC, по-моему, написал, что не сработал у него BUILD - при принудительной смене последовательности сортировки/кодировки в индексном файле строится последовательность отличная от исходной (т.е. при которой создавался файл с данными в Парусе)
Созданный в чём угодно DBF файл при перестроении индексов не трогается. Пересоздаются только индексы. И никого не волнует с каким CLACOLSEQ и с какой локализацией создавался файл данных.
Последовательность в индексном файле, естественно, зависит от CLACOLSEQ, чему и был посвящён мой предыдущий пост.
Ответить