Форум » [x]Harbour » Длина имени поля в dbf не более 10 знаков (Harbour) » Ответить

Длина имени поля в dbf не более 10 знаков (Harbour)

PSP: Давно не обновлял Харбор (больше 2-х лет), сейчас обновил. И тут же наткнулся на грабли: имена полей длиннее 10 знаков усекаются. [quote]2014-10-03 16:03 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rdd/wafunc.c % use dynamic symbol pointer to find field index * src/rdd/workarea.c * set default maximum field size to HB_SYMBOL_NAME_LEN characters (by default in Harbour builds HB_SYMBOL_NAME_LEN is 63) Some RDDs may set longer names but it will be respected only by FieldName() function and in all other cases only HB_SYMBOL_NAME_LEN characters is significant for Harbour so such decision should be well thought by RDD authors because it may confuse users. Warning: all 3-rd party RDDs which need to force shorter names should update uiMaxFieldNameLength in their NEW() method just after SUPER_NEW() call, i.e. like in core DBF RDD. ! respect uiMaxFieldNameLength when new fields are added * src/rdd/dbf1.c * set maximum field size to 10 characters [/quote] Т.е., было внесено ограничение на длину поля в dbf файле в 10 символов. У меня кое-где есть имена полей с длиной больше 10. Не хотелось бы перелопачивать программу... Пока еще глубоко не изучал вопрос, но может кто-то знает, возможно ли "на лету" менять в своем коде это ограничение или только в исходниках Харбора нужно править? Если только в исходниках, то достаточно ли изменить в файле src\rdd\dbf1.c d в строке 4068 значение 10 на большее? [quote]/* set maximum fieldname length to 10 characters */ pArea->area.uiMaxFieldNameLength = 10; [/quote] Спасибо!

Ответов - 10

Andrey: PSP Придётся писать программу считывания полей по базам и проверки на длину. А потом придется ручками в коде править эти поля. Другого выхода (нормального) не вижу.

SergKis: можно что то типа такого: #xtranslate "LongLongName1" => "R_1" #xtranslate "LongLongName2" => "R_2" #xtranslate "LongLongName3" => "R_3" а с макро ...

PSP: Андрей, не так уж всё печально. Я уже нашел все "длинные" поля. )) Исправить не проблема. Немного времени и всё... ) Мне интересно, меняется ли это ограничение "на лету". Судя по всему - нет. Менять исходники Харбора, думаю, не стоит.


PSP: SergKis пишет: можно что то типа такого: #xtranslate "LongLongName1" => "R_1" #xtranslate "LongLongName2" => "R_2" #xtranslate "LongLongName3" => "R_3" а с макро ... Ну, как вариант. Спасибо.

Dima: PSP пишет: set maximum field size to 10 characters Жестоко обрезали.....так же как длину алиаса в ADS до 10

PSP: Dima пишет: Жестоко обрезали.....так же как длину алиаса в ADS до 10 Видимо, борьба за совместимость ))

Dima: Интересно как читать чужие базы в которых имя поля > 10 TESTIKPOLE1 TESTIKPOLE2 будет считаться одним полем ))

PSP: Dima пишет: Интересно как читать чужие базы в которых имя поля > 10 TESTIKPOLE1 TESTIKPOLE2 будет считаться одним полем )) Я пока что наткнулся на обрезку длины при создании dbf. Остальные варианты не проверял.

SergKis: Dima FieldGet(nPos)

Dima: SergKis Да верно , редко пользуюсь этим , как правило по именам работаю.



полная версия страницы