Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Вниз

Глюк в Halcyon? Составной индекс.   Найти похожие ветки 

 
sniknik   (2002-06-20 16:53) [0]

Использую Halcyon для построения Клиперовских индексов (не для себя изменить не могу только исправить).
Индекс такого вида
TDest.IndexOn(BaseDir+"\DiscCrd.Ntx", "", "PADR(STR(Type,3,0),3) + PADR(CODE,25) + STR(GR1,6,0) + STR(GR2,6,0) + STR(GR3,6,0) + STR(GR4,6,0) + STR(GR5,6,0)", "", Unique, Ascending);

проблема с этой частью PADR(CODE,25)
по идее команда должна усекать строку до 25 символов (сама строка 30) и строить индекс по усеченной строке. Чего не происходит (смотрел в индексном файле построен по полным строкам)
с остальными полями проблем нет т.к. они соответствуют по длинне (первый PADR)
строка из моего индекса
4!621997ZZZZZZZZZZZZZZZZZZ 0 0 0 0 0
и оригинального
4!621997ZZZZZZZZZZZZZZZZZZ 0 0 0 0 0
разница что называется невооружонным глазом видна

Изза этого и индексный файл больше получается чем оригинал.

Ктонибудь знаком с проблемой? Есть патч? Или знает что можно сделать?


 
sniknik   (2002-06-20 18:21) [1]

Во первых прошу прощения за дезинформацию
PADR(CODE,25) не усекает строку а наоборот дополняет пробелами до указанной длинны.
а глюк возникает потому что в каком-то месте (не разобрался пока) строка считывается с поля полная (забитая до конца пробелами) и она и используется при построении индекса.

это конечно не решает проблемы, "что делать". Но может кто подскажет?


 
sniknik   (2002-06-21 18:06) [2]

Штото никто не отвечает, ну да ладно сам решил, благо есть исходники и проблема ясна.
Все свелось к исправлению модуля gs6_dbf

процедура FieldVarResult
в обработку текстового поля добавим TrimRight
вот тут
"C" : begin
ExpResult := rtText;
s := TrimRight(DataTable.gsFieldGetN(DataField));
BufVar := s;
end;

довольно странно что его нет в формировании индексов, т.к. при считывании строки это есть
процедура gsStringGetN
строки
s := gsFieldPull(FieldPtr, CurRecord);
s := TrimRight(s);

кто использует Halcyon имейте в виду. Хотя может это старый баг пофиксенный просто сам модуль у меня еще старше :-).


 
sniknik   (2002-06-24 10:22) [3]

Еще раз corry, но решение неверное, т.к. простой индекс (просто по одному текстовому полю) строится именно по полному полю (дополненный до размера пробелами). Чтож у них так там все по разному?
В общем все пришлось вернуть на место и менять обработку функции PADR, черт бы побрал этот клипер, буду надеятся что хоть сейчас это ни счем не пересечется. А пока все мои индексы соответствуют оригиналам, надо по деруву постучать чтоб не зглазить ;-).


 
Alexandr   (2002-06-24 10:32) [4]

тихо сам с собою...


 
sniknik   (2002-06-24 10:38) [5]

Так если б кто ответил. Но видать слишком сложно для них. А после ляпа был просто обязан исправить.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.02 c
1-47264
volph
2002-06-29 18:19
2002.07.15
Как удалить у TTreeView все нити?


1-47347
mihrutka
2002-07-01 15:41
2002.07.15
Удаление макровов из ворд документа


1-47253
Grave
2002-06-26 23:30
2002.07.15
Переключение задач (task switching)


3-47174
Egor_M
2002-06-18 13:04
2002.07.15
Цветная DBGrid


4-47910
stainer a
2002-05-10 08:00
2002.07.15
сообщение em_settextex





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский