Форум » Clipper » Clipper 5.3 не хочет работать с DBFCDX. » Ответить

Clipper 5.3 не хочет работать с DBFCDX.

AlexCh: Народ, помогите утопающему! Раньше писал на Clipper Summer 87. Нужно на Clipper 5.3 создать индексный файл CDX, но не могу даже собрать exe-шник. В начале программы вставил: REQUEST DBFCDX rddSetDefault( "DBFCDX" ) Линкую как в примере: BLINKER FILE $(objs) OUTPUT $@ lib dbfcdx.lib При сборке выдает ошибку : BLINKER : 1115 : DBFCDX.LIB(CL53INIT) : '_DBFCDX' : unresolved external Заменил BLINKER. Стал пробовать собирать BLINKERом 6.0 то же самое. Что интересно, если вместо DBFCDX подключать к примеру DBFNDX, т.е. в программе REQUEST DBFNDX rddSetDefault( "DBFNDX" ) а затем BLINKER FILE $(objs) OUTPUT $@ lib dbfndx.lib то всё нормально линкуется и работает

Ответов - 32, стр: 1 2 All

Softlog86: У меня такая-же проблемма ..... Я в линковщике пишу обе библиотеки : BLINKER.EXE .... LIB _DBFCDX.LIB , DBFCDX.LIB Вроде уже три года пашет ....

Andrey: Вот мой рабочий файл сборки для CDX (10 лет работает): # Скрипт-файл начана сценария компоновки BLINKER 3.2 - 6.0 - для ЗАЩИЩЕНОГО РЕЖИМА ПАМЯТИ (Extended Memory) BLINKER EXECUTABLE CLIPPER F:250;SWAPK:8192;SWAPPATH:С:\TEMP BLINKER EXECUTABLE NODELETE BLINKER PROCEDURE DEPTH 60 BLINKER EXECUTABLE EXTENDED # Switch blinker to protected mode BLINKER INCREMENTAL OFF # Switch incremental off if needed BLINKER EXECUTABLE COMPRESS 1 BLINKER MESSAGE WINK LEFT NOBELL FILE mainto # ====== вызов листинга OBJ-файлов ========== @Zviewplt.lst //FILE ctintp, ctusp //FILE CLD.LIB SEARCH BLXRATEX.LIB LIB _DBFCDX, DBFCDX SEARCH BLXCLP53 LIB Ctp53 @C53BLMAX ## End of LNK

AlexCh: Сделал по варианту Softlog86 и всё прошло нормально. Линковка пошла и CDX заработали как надо. Зверски обрадовался, но рано... Поясню, для чего мне понадобились CDX. У меня в одной системе на одних и тех же файлах одновременно работают Clipper 87 и VFP 6. На уровне dbf-файлов никаких проблем нет, но вот понадобилось использовать общие индексы. Хочу попробовать использовать DBFCDX или DBFSIX как получится. В общем казалось бы всё получилось. Clipper 5.3 и VFP 6 заработали на одних и тех же DBF и CDX, причём в обе стороны. Они поняли друг друга! CDX-индексы, созданные Clipper-ом, VFP 6.0 прекрасно понимает и наоборот. Дописывал в конец файла - всё OK! Протестировал это дело на одном файле - всё нормально, но как только попытался работать с более-менее реальной задачей - облом. Простая программа, которая в цикле создаёт CDX для нескольких десятков файлов непредсказуемо вылетает в разных местах с различными сообщениями об ошибках или попросту зависает. Затыкается в разных местах, на 10-м файле, на 3, 15, 47 и т.д. Никакой системы. В общем, номер с CDX не прошёл :((( , а жаль. Но есть ещё надежда на SIX, может быть получится через файлы IDX на Clipper 5.2 Только никак не могу найти SIX 3.2, ссылка на сайте вашего форума есть, но не работает. Поэтому у меня большая просьба. Если есть возможность, скиньте пожалуйста SIX 3.2 на мой емейл: achik<собака>inbox.ru Заранее благодарен.


Softlog86: Думаю что не в этом проблема ....

Andrey: AlexCh пишет: Простая программа, которая в цикле создаёт CDX для нескольких десятков файлов непредсказуемо вылетает в разных местах с различными сообщениями об ошибках или попросту зависает. Затыкается в разных местах, на 10-м файле, на 3, 15, 47 и т.д. Никакой системы. Перед созданием индекса НЕОБХОДИМО базу открывать в режиме EXCLUSIVE, и перед созданием CDX-файла НЕОБХОДИМО УДАЛИТЬ ранее созданный индексный файл. Я пользовался CDX с 1993 года и никаких проблем с ними не было, намного лучше NTX.... Что-то неправильно делаешь !

Vlad04: Где то читал, что блокировки разные у Clipper и VFP 6 , не получится в обе стороны. А базу открывать EXCLUSIVE при создании индекса не надо, Clipper ее сам блокирует, если ему позволят.

AlexCh: >Думаю что не в этом проблема .... Вот и я не могу понять, в чём проблема. Пробовал на двух разных машинах с разными операционками (WIN XP SP3 и WIN98) Заново перестраивал EXE и запускал на чистых DBF-файлах (без CDX-индексов). Папку создал специально для отладки, к которой никто доступа не имеет и туда эти файлы сбросил. Результат один и тот же. >Перед созданием индекса НЕОБХОДИМО базу открывать в режиме EXCLUSIVE, и перед созданием CDX-файла НЕОБХОДИМО УДАЛИТЬ ранее созданный индексный файл. Я много раз запускал эту прораммульку с созданием в цикле CDX-индексов на чистых DBF-файлах без CDX. Удалять было нечего. Вылетает где угодно, хотя пару раз и сработало до конца. При вылете выдаются сообщения: -ORDCREATE(0) Unrecoverable error 5302: Conventional memory exhaused -Процессор NTVDM обнаружил недопустимую инструкцию … - или просто зависает без всяких сообщений >Я пользовался CDX с 1993 года и никаких проблем с ними не было, намного лучше NTX.... А ты использовал SIX или DBFCDX? >Где то читал, что блокировки разные у Clipper и VFP 6 , не получится в обе стороны. В данном случае до VFP дело не ещё не дошло. Я не могу даже индексы CDX создать. >А базу открывать EXCLUSIVE при создании индекса не надо, Clipper ее сам блокирует, если ему позволят. У меня базы как таковой нет, на CLIPPER 87 какая может быть база? Есть огромная куча файлов DBF (на файл-сервере Win2003 Server), с которыми без проблем одновременно работают Clipper 87 и VFP6. Блокировки может быть и разные, но на уровне RLOCK они друг друга понимают. Если одна прога запись заблокировала, то другая это понимает и к ней не лезет. VFP считывает запись из DBF, созданного Сlipper-ом, перекодирует символы DOS-Win и никаких проблем.

PSP: AlexCh пишет: Unrecoverable error 5302: Conventional memory exhaused Программа собрана для защищенного режима? Вот такая команда "BLINKER EXECUTABLE EXTENDED" есть?

AlexCh: Видимо, после CLIPPER 87 я чего-то недопонимаю в принципе. Как я собираю: Моя прога называется REST_CDX.prg Мой файл сборки REST_CDX.rmk (взял из примера в папке SOURCE) такой: // Define comma separated obj list as a macro objs=REST_CDX // Inference rule for compiling (.prg) to .obj files .prg.obj: CLIPPER $< /m /n /w > ttt.txt // Dependancy statements for .obj file REST_CDX.OBJ: .\REST_CDX.PRG // Dependancy rule for linking .obj file to .EXE file REST_CDX.EXE: REST_CDX.OBJ BLINKER FILE $(objs) OUTPUT $@ lib dbfcdx.lib , _dbfcdx.lib Потом запускаю REST_CDX.bat , который собирает REST_CDX.exe del REST_CDX.obj del REST_CDX.exe SET PATH=C:\CLIP53\BIN;%PATH% SET LIB=C:\CLIP53\LIB SET INCLUDE=C:\CLIP53\INCLUDE SET PLL=C:\CLIP53\INCLUDE rmake REST_CDX --- Попытки использовать рабочий файл сборки от Andrey или вставить строку BLINKER EXECUTABLE EXTENDED в REST_CDX.rmk приводят к синтаксической ошибке. Поясните, пожалуйста, что я делаю не так и куда надо вставлять эти строки.

LYSK: Я десятки лет работаю на Клиппере только с индексами CDX в смешанной среде (FOX26,Clipper,сеть) но с самого первого дня это был SIX. Защищенным режимом не заморачиваюсь, потому что активно юзаю библиотеку, несовместимую с РМ. линковка в большинстве случаев примитивна: BLINKER fi прога,sixcdx @six3 lib ct250 в более сложных случаях еще скрипт @cl520mid

AlexCh: >Программа собрана для защищенного режима? >Вот такая команда "BLINKER EXECUTABLE EXTENDED" есть? Нет, собрана так, как я описал выше. Насколько я понимаю это сборка по умолчанию в реальном режиме, в не в защищённом. Как переключиться в защищённый режим? Работая на Clipper 87 никогда с такими вещами не встречался.

Andrey: AlexCh пишет: Нет, собрана так, как я описал выше. Насколько я понимаю это сборка по умолчанию в реальном режиме, в не в защищённом. Как переключиться в защищённый режим? Если используешь Blinker 6.0 то ставь мой LNK для сборки, тогда программа будет собираться в защищенном режиме. AlexCh пишет: Попытки использовать рабочий файл сборки от Andrey или вставить строку BLINKER EXECUTABLE EXTENDED в REST_CDX.rmk приводят к синтаксической ошибке. Поясните, пожалуйста, что я делаю не так и куда надо вставлять эти строки. Эти строки только для BLINKER 3.2 и выше. Я же написал РАНЕЕ - смотреть надо ! # Скрипт-файл начана сценария компоновки BLINKER 3.2 - 6.0 - для ЗАЩИЩЕНОГО РЕЖИМА ПАМЯТИ (Extended Memory) В стандартной поставке Клипера стоит версия 1.0 и она не собирает "защищенные приложения". А если в реальном, то попробуй после индексации файла (DBFCDX) закрывать эту базу. Скорее всего у тебя не хватает ОТКРЫТЫХ ОБАСТЕЙ (SELECT) ! А вообще - кончай "фигней" заниматься и переходи на хХарбор. Намного приятней работать и САМОЕ ГЛАВНОЕ - это СТАБИЛЬНАЯ РАБОТА программы.

LYSK: Коллеги, да не заморачивайте человеку голову защищенным режимом.. В Виндовой среде оно нафиг надо, тем более что чел до сих пор на S'87 сидел. Ко всему высказанному ранее добавлю, что DBFCDX в Клиппере отличается нативной ущербностью... иначе из-за чего бы он полностью менялся в каждой очередной версии? короче, SIX рулит!

Vlad04: А почему Clipper 5.3 , а не (х)Харбор?.Нормально работает с CDX .Часть программ переевел с Clipper 5.01. Не удалось создать на хХарбор временные индексы, ими пользовался в клиппере Если спец библиотек нет, то и проблем не должно быть при переводе.

AlexCh: Чел не сидел S'87, а давно уже перешёл на VFP и написал на нём целую кучу работающих программ, но старые проги, написанные на Clipper переписать на VFP у чела нет никаких физических возможностей. Их очень много, они очень сложные и многие их них написаны людьми, которых уже давно нет поблизости. Исходники у меня есть, но разбираться в чужих алгоритмах... ну вы понимаете... Кроме того, нельзя их переписывать постепенно, поскольку это единый комплекс. Нужно переписать все сразу, отладить, а потом резко сменить всё. На практике это нереально. Трудозатраты на переписывание комплекса наших Clipper-программ я оцениваю как минимум в 5 человеко-лет, а я тут фактически один, кто реально может что-то разрабатывать в свободное от текущих доработок и разборок с пользователями время (есть ещё 2 программиста, системщик и технолог, но у них своих текущих дел выше крыши).. Пока буду переписывать последние проги с Clipper на VFP, первые устареют настолько, что их нужно писать по новой. Прошу не судить меня строго за мои чайниковые вопросы, честно сказать у меня довольно тяжёлая ситуация и я пытаюсь найти выход в попытке состыковать Clipper с VFP на уроне индексов CDX, почему и попросил вашей помощи. Увы, даже с вашими подсказками у меня меня пока не получается. Один из вас откликнулся на мою просьбу и прислал мне SIX, за что я очень благодарен, но есть вопросы. Не сочтите за труд ответить на них, когда они созреют. С уважением к сообществу.

LYSK: Обращайся, если что.. Помогу.

Andrey: AlexCh пишет: Исходники у меня есть, но разбираться в чужих алгоритмах... ну вы понимаете... Кроме того, нельзя их переписывать постепенно, поскольку это единый комплекс. Нужно переписать все сразу, отладить, а потом резко сменить всё. На практике это нереально. Если все Клиперные программы написаны на 87 или выше, то я как спец по переделке чужих программ на хХарбор заявляю: 1) переделать их совсем нетрудно, если нет вставок на С или ASM 2) может быть нужно будет подправить синтаксис команд (скобочки, пробел лишний поставить), и в алгоритмах разбираться ненужно. 3) переделка не занимает много времени, неделя максимум (это я чужие проги переделывал) 4) Любая прога на клипере (без других вставок) легко и ПОНЯТНО (как в клипере) переделывается в терминалку хХарбора. В хХарборе есть классный сборщик проектов HBMAKE (как RMAKE в клипере) с продвинутыми возможностями. Если надо краткую доку, то могу выслать. Я тоже, сначала с трудом переделывал свои проекты на хХарбор. А теперь не жалею...

Pasha: У меня когда-то был успешный опыт совместной работы clipper 5.2e и FoxPro 2.6 По-умолчанию dbfcdx использует ту же схему блокировок, что и foxpro Во 1-х, вопрос: файлы dbf используются с расширениями VFP. т.е. с расширенным заголовком, или в старом формате FoxPro ? Если с расширением vfp, то клиппер их не просто откроет И некоторые советы. Надо использовать последние версии clipper: 5.2e или 5.3b. Собирать надо в защищенном режиме, т.е. дать команду: BLINKER EXECUTABLE EXTENDED Если не работает dbfcdx у clipper 5.3, может быть стоит попробовать clipper 5.2 Насчет Харбора - я думаю не стоит его использовать, лучше обойтись клиппером. Совместимость с S87 все-таки у него намного выше. Если не планируется в дальнейшем развивать проекты на клиппере, можно обойтись малой кровью - пересборкой на 5.2/5.3 Мне помнится, несколько лет назад Przemyslaw Czerpak писал, что полной совместимости по индексам у Харбора с VFP (именно с VFP, а не со старым FoxPro 2.6) у харбора нет. Сейчас я не могу найти это сообщение.

Urri: Добрый день, уважаемые коллеги. А проблема вообще имеет ли решение? Берем .dbf, строим индех .cdx в Клиппере и Фоксе с одинаковым ключевым выражением. Оба индексных файла даже по длине не совпадают, т.е. имеются отличия в способах их построения. Такая же проблема при использовании SIX и ADS. Действительно, первое впечатление такое, что все работает на тестовом примере. Но когда работаешь с серьезными по размеру базами да еще и в сети и активно модифицируешь - очень скоро начинаются проблемы с корректностью индексов. Помнится давно делал такую ошибку: индексировал все базы на локальной машине, переписывал .dbf & .cdx на сеть и пытался после этого работать через ADS - проблемы типа index corrupted появлялись очень быстро. Чуть сдуру от ADS не отказался. Когда проиндексировал правильно через ADS - оказалось и быстрее, и проблемы с индексами пропали навсегда. Опять же есть проблемы и с заданием индексного выражения. Если есть числовое поле "number,n,5", то в клиппере в сложном индексном выражении можно написать ...+str(number)+... , а в Фоксе ...+str(number,5)+..., иначе совсем индексы совпадать перестанут. Для решения вопроса, который задал автор, может лучше использовать ADS: для Клиппера и Фокса прикрутить одинаковую библиотеку формирования индексов, которые прилагаются к ADS отдельно для клиппера и для фокса.

ALGO: Всё просто - помимо dbfcdx.lib в каталоге библиотек имеется ещё _dbfcdx.lib. Её также надо прилинковать - тогда нормально работает.

ALGO: Извиняюсь, здесь уже ранее ответили на первый вопрос. По второму вопросу - в своей системе я также использую как CLIPPER (чаще), так и FOXPRO (реже и завязал с ним, поскольку у FOXPRO убийственный недостаток - максимальная размерность массива 2. Для алгоритмиста это дрова. Если знал бы сразу - вообще бы с FOXом не связывался). Но тем не менее несколько программ уже есть на FOXe. Однако не понимаю, зачем нужны общие индексы? В клиппере я использую NDX, а на FOXe - его долбаные IDX, DBF общие. Работа идет порознь - каждому своё. Или система столь монументальна, что идет непрерывным потоком изменение файлов с двух сторон? Боюсь, что нормального решения нет для разнородных систем, столь тесно работающих друг с другом на уровне индексов. А по поводу глюков по созданию CDX Клиппером единственный совет - это скинуть файл с минимальным тестовым примером без предметной части (прога + DBF + описание глюка (когда и как он проявляется), может кому и удасться докопаться до сути происходящего. По крайней мере у меня интерес возник.

Urri: Ответ на предыдущее письмо. _dbfcdx.lic конечно же прилинковываю, но это не помогает. Для реализации возникшего интереса можно взять первую попавшуюся .DBF и построить по любому индексному выражению .CDX клиппером и фоксом. Размер у индексов будет разным, не говоря уже о содержимом одинаковых якобы индексов. У фокса есть преимущество по сравнению с клиппером: намного быстрее работает с базой, а у меня задача на 400 тыс. абонентов, которых нужно каждый месяц массово пересчитывать. Тут бы фокс помог, а то бегаю по управлению, компьютеры ищу, которые можно на ночь оставить для расчета. Так что такая связка иногда весьма полезна

КСС: ...у меня задача на 400 тыс. абонентов... ...а то бегаю по управлению, компьютеры ищу, которые можно на ночь оставить для расчета. Конечно это не в тему, но при таком количестве абонентов и, стало быть, высокой ответственности, имеет смысл выделить отдельный сервер. Тогда на нём можно запускать сервисные задачи. Моя Клипперная прога, которой уже 13 лет, так и делает.

Andrey: Urri пишет: а у меня задача на 400 тыс. абонентов У меня задача раньше была на 150 тыс. абонентов. Считала целую ночь. Потом пределал алгоритм (долго делал) стала считать за 5 часов. Перешел на хХарбор. Считает 1,5-2 часа примерно. Так что Фокс, что Клиппер - пора переходить на нормальные компиляторы. А если руководство не понимает твоего труда - нужно менять руководство, или забить на работу. Чем раньше поймешь эту истину, тем легче будет жить дальше.

Urri: Смотрел я на хХарбор в начале его творческого пути, но не нашел тогда возможности прицепить к нему ADS, без которого сейчас себе не мыслю работы для своих больших по размеру баз (корректность индексов и транзакции дорого стоят). Если знаешь как подружить с ADS - подскажи пожалста и дай ссылку где взять стабильно работающий хХарбор. Я постараюсь поднять на нем расчетную часть - может полегчает. На нормальный компилятор переходить, говоришь? Это при том, что 60% машин (из 300) такие, что половину из них w98 с трудом тянут, а другая половина - w95 только поддерживает с 14" мониторами и разрешением 640*480... Что, на VBasic-4? А руководство сейчас трудно поменять - кругом кризис однако, работодатели программистов сейчас не жалуют. Или у вас в регионе по-другому?

Pasha: Поддержка Ads в харборе есть. Харбор с Ads подружился даже раньше, чем с DBFCDX, т.е. рабочмй rdd для Ads был готов, когда DBFCDX был еще глючный

Andrey: Urri пишет: что половину из них w98 с трудом тянут, а другая половина - w95 только поддерживает с 14" мониторами и разрешением 640*480... Что, на VBasic-4? Так хХарбор даже на w98 - 95 работать НАМНОГО стабильней и быстрей будет. Я тоже очень сомневался раньше, а сейчас просто думаю почему мне никто раньше его (хХарбор) не показал !!! Задача из Клипера в хХарбор переноситься просто компиляцией, но могут быть заморочки, но небольшие. Проблемы будут, подскажем. Я уже систем 5 своих и 3 чужих пренес !!! Чужие даже легче пошли, за неделю делал !

Urri: Уважаемые (вместе с модератором Pasha)! Вы не дразнитесь, а ссылку дайте на стабильный релиз хХарбора и rdd для ADS и где что можно почитать. Пожалста. Очень нужно

Andrey: Вот блин ! Берешь просто http://www.xharbour.org качаешь оттуда версию и все ! Я на этой версии уже почти год сижу !

ALGO: Провел тест для clipper 5.3, Blinker 1.0 и FoxPro 8. Имеются два одинаковых файла testclp.dbf и testfox.dbf с полями NAME, NAME1 - C(10), NUMBER, NUMBER1, SUMMACLP, SUMMAFOX - N(10). Специальная программа fill.exe <кол-во записей> заполняет оба эти файла таким образом: NAME=A000000001, NUMBER1=1 для 1-й записи, NAME=A000000002, NUMBER1=2 для 2-й записи и т.д. Поля NAME1 и NUMBER1 заполняются аналогично, но в обратной оследовательности, т.е. указанные значения будут иметь последняя и предпоследняя записи и т.д. Поля SUMMAFOX и SUMMACLP программой fill.exe не заполняются. Далее имеются две аналогичные программы на CLIPPER (testclp.exe) и на FoxPro (testfox.exe). Для testclp.exe (clipper) задача следующая: а) проиндексировать файл testclp.dbf по полю NAME (tag FLD) и по полю NAME1 (tag FLD1), создав при этом "свой" индекс testclp.cdx; б) пройтись по файлу testfox.dbf и, пользуясь созданным в а) индексным файлом, для каждой строки из testfox.dbf по значению NAME отыскать строку в файле testclp.dbf, у которой такое же поле NAME и прибавить поле NUMBER из этого файла к полю SUMMACLP из testfox.dbf; затем по этому же значению NAME отыскать еще одну строку в файле testclp.dbf, у которой такое же поле NAME1 и вычесть из поля SUMMACLP testfox.dbf. в) пройтись по файлу testclp.dbf и, пользуясь индексным файлом testfox.cdx, созданным другой программой (testfox.exe - FoxPro), для каждой строки из testclp.dbf по значению NAME отыскать строку в файле testfox.dbf, у которой такое же поле NAME и прибавить поле NUMBER из этого файла к полю SUMMACLP из testclp.dbf; затем по этому же значению NAME отыскать строку в файле testfox.dbf, у которой такое же поле NAME1 и вычесть из поля SUMMACLP testclp.dbf. Для testfox.exe (FoxPro) аналогичная задача: а) проиндексировать файл testfox.dbf по полю NAME (tag FLD) и по полю NAME1 (tag FLD1), создав при этом "свой" индекс testfox.cdx; б) пройтись по файлу testclp.dbf и, пользуясь созданным в а) индексным файлом, для каждой строки из testclp.dbf по значению NAME отыскать строку в файле testfox.dbf, у которой такое же поле NAME и прибавить поле NUMBER из этого файла к полю SUMMAFOX из testclp.dbf; затем по этому же значению NAME отыскать строку в файле testfox.dbf, у которой такое же поле NAME1 и вычесть из поля SUMMAFOX testclp.dbf. в) пройтись по файлу testfox.dbf и, пользуясь индексным файлом testclp.cdx, созданным другой программой (testclp.exe - Clipper), для каждой строки из testfox.dbf по значению NAME отыскать строку в файле testclp.dbf, у которой такое же поле NAME и прибавить поле NUMBER из этого файла к полю SUMMAFOX из testfox.dbf; затем по этому же значению NAME отыскать строку в файле testclp.dbf, у которой такое же поле NAME1 и вычесть из поля SUMMAFOX testfox.dbf. Таким образом, при правильной работе обе программы должны к каждому полю каждого файла прибавить и вычесть одно и то же число (хотя и расположенные в разных записях), и в результате при правильной работе системы должны остаться нулевые значения в полях SUMMACLP и SUMMAFOX в обоих файлах. Тест проводился для 100000 и 400000 записей, и не смотря на разный размер индексных файлов, дал правильный результат. Единственное что - при добавлении записей один из индексных файлов ("чужой") остается неправильным, поэтому при первом запуске каждая из программ выполняет только работу со "своим" индексом, и не выплняет с "чужим". После запуска второй программы оказываются правильно проиндексированными оба файла и обе программы начинают работать без сбоев (аналогично при уменьшении кол-ва записей, но при этом FoxPro вылетает в error на чужом индексе, и мне пришлось применить обработчик ON ERROR... Но это из-за того, что изменение кол-ва записей производится fill.exe без открытия обоих индексов, а также из-за того, что каждая из программ не переиндексирует чужой индекс (т.е. эта проблема искусственно создана - иначе и не должно быть). Если разрешить FoxPro выполнить переиндексацию чужого индекса - тогда нормальная работа восстанавливается. Далее "совершенствовать" систему обработок ошибок я не стал, чтобы обе программы не сильно отличались друг от друга. Итог следующий: 1) У меня сначала был Clipper 5.3 без патча (и я на нем уже давно работаю). Он действительно давал сбои: начиная где-то с 40000 записей, иногда работал нормально, иногда зависал, иногда вылетал с ошибкой (типа программа выполнила недопустимую операцию) в начале программы при попытке проиндексировать "свой" CDX. Как советуют здесь на форуме, сделал патч до 5.3b - всё заработало нормально. Но и до патча глюки были не в том смысле, что не понимались индексы FoxPro - без переиндексирования (когда оба индеса создавались FoxPro) обработка нормально выполнялась, CLIPPER валился на создании "своих" индексов. 2) для современных CУБД 400000 записей - не очень много. Как видно из результатов теста, обработка всего файла со случайным поиском занимает 2-3 минуты максимум даже на несколько устаревших компьютерах. Так что 2-4 часа времени на современной технике (и даже 30 мин.) - это "das ist fantastisсh" в моих понятиях. Проблема скорее всего или в неэкономном алгоритме, или в узких местах типа пропускной способности сети (из-за повального увлечения архитектурой клиент-сервер, к чему я отрица- тельно отношусь - но это оффтоп). 3) Как видно из результатов теста, время на создание индекса незначительно по сравнению с общим временем работы, так что лучше всего перед началом обра- ботки файлов индексы создавать заново, не доверяя ранее созданным "чужим" и "своим"индесам (если только они не используются в этот момент другими программами). Каждая из программ в случае нормальной обработки файлов сообщает время (в сек.), потребовавшееся для: - создания "своего" индекса (пyнкт а); - обработки файла по "своему" индексу (пункт б); - обработки файла по "чужому" индексу (пункт в); - общее время работы (сюда добавляется еще время на заполение полей SUMMAFOX и SUMMACLP нулевыми значениями в обоих файлах). Прилагается архив: info.doc - результаты эксперимента по времени выполнения. fill.prg - текст вспомогательной программы на clipper для заполнения файлов. calc.prg - текст clipper-программы. program1.prg - текст FoxPro-программы. makefill.bat - создает fill.exe (немного подкорректировать придется) makecalc.bat - создает testclp.exe (тоже самое). proj1.pjx - файл проекта на FoxPro. testfox.dbf и testclp.dbf - файлы с данными (созданные в DBU). testclp.cdx - индексный файл, создаваемый CLIPPERом. testfox.cdx - инрексный файл, создаваемый FoxPro. fill.exe - программа для заполнения файлов. testclp.exe - программа на CLIPPERе. testfox.exe - программа на FoxPro. Для testfox.exe потребуется runtime environment (от VFP6 скорее всего не подойдет, так что придется использовать текст из program1.prg и возможно тоже подкорректировать). Для сокращения объема архива файлы dbf содержат по 10 записей, для проведения реальных испытаний следует число записей увеличить. Если в наличии CLIPPER 5.2, то также придется подкорректирвоать fill.prg и саlc.prg. Тесты для CLIPPER'87, CLIPPER 5.2 и VFP6 попробую выполнить несколько позже, поскольку c этими версиями не работаю и сейчас в рабочем состоянии их нет (а также перекрестные тесты типа CLIPPER 5.2 <-> VFP8 и CLIPPER 5.3 <-> VFP6). Несмотря на кажущуюся простоту задачи, времени все же потребовалось немало, однако именно такие объективные сравнительные исследования представляют для меня значительный интерес. Ссылка на файл cdx.rar с тестом http://slil.ru/27376115

Andrey: ALGO пишет: Так что 2-4 часа времени на современной технике (и даже 30 мин.) - это "das ist fantastisсh" в моих понятиях. Проблема скорее всего или в неэкономном алгоритме Это не проблема, и не неэкономный алгоритм. Нормальный, по другому не получиться. Для понятия этого алгоритма нужно представить запись значений 24 сумм прихода денег, 24 дат прихода денег, 24 тарифов, 24 сумм начислений и т.д. в одну запись в базе. Так было еще мной на Клипере написано, и пока еще не переделывал, да и не буду наверно. Я видел как на платформе 1С версии 7.5 реализовали начисление коммунальных платежей, так там у 9.тыс. абонентов начисления делались порядка 5 часов. И ничего, никто не жаловался.

ALGO: Andrey пишет: Я видел как на платформе 1С версии 7.5... 1C прошу не упоминать



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