Форум » Для флейма » Помогите протестировать первую xHarbour систему » Ответить

Помогите протестировать первую xHarbour систему

AndreyZh: Уважаемые профи! Наконец перевёл систему на xHarbour (терминальный режим). Если не сложно помогите найти ошибки в её работе (сам уже тестил). Если есть желание, то с удовольствием приму критику в любом виде и отвечу на все вопросы. Система содержит исходный код (+ база очень крупной оптовки за 4 месяца) и варианты Clipper (нужна настройка ОС) и xHarbour (Win32) программ. Для установки скачать в любой каталог и распаковать архив. Все виды паролей - 11. Для создания индексов clipper (s_repair.bat), harbour (srepharb.bat). Справка F1 в любом режиме, инструкции в каталоге document. Для принудительного запуска st.bat (clip)/sth.bat (harb). По системе печати, если интересно - отдельно. Состав комплекса: 1. Оперативная программа. ls.exe (clip)/hls.exe (harb) 2. Администратор и бухгалтерия. la.exe (clip)/hla.exe (harb) 3. Аналитический контур. ldust.exe (clip)/hld.exe (harb) Буду очень благодарен за найденные ошибки и критику в любой форме! Скачка с учётом исправлений всех замечаний на 04.04.2010 (5.92) http://get.freesoft.ru/?id=108083

Ответов - 182, стр: 1 2 3 4 5 6 7 8 9 10 All

Dima: AndreyZh пишет: Млин! Andrey и AndreyZh разные люди! Это и понятно . Не ошибся я. Я веду к тому что у Андрея порядок верный у Вас нет. ЗЫ При желании можно найти в инете дискуссии на эту тему relcom.comp.dbms.clipper fido.clipper

Dima: Andrey пишет: А что не так ? У тебя все правильно !

Andrey: Dima пишет: У тебя все правильно ! Так я же с журнала Nantacket списывал, да так и осталось .... Уже подумал, по новому нужно делать....


Dima: Andrey пишет: Так я же с журнала Nantacket списывал, да так и осталось ....

AndreyZh: Заинтриговало! А что не так? Доски BBC уже лет десять не смотрел, да и найти инфу крайне сложно!

Dima: AndreyZh Выкладываю как есть текст от 18 октября 1999 года от andvit , Newsgroups: relcom.comp.dbms.clipper Без правок и своих комментариев. Свои выводы каждый делает сам. Привет! Как я уже упоминал у меня тоже были проблемы с индексами, которые я решил под НТ (не 100% конечно но достаточно для стабильной работы). Начать наверное нужно с самого клиппера. Я использую 5.2е + blinker 4.1 protected mode + несколько библиотек от разных компаний (six, ctp, esc) Все кто использует 5.3 думаю там свои хитрости есть хотя все ниже сказанное может пригодиться Переиндексировать можно и нужно если есть свободное время и юзеров нет это никогда не мешает. Замечено что после переиндексации все шуршит намного быстрее. Рекомендую настоятельно как минимум делать это в понедельник рано утром. Наш сервер после выходных всегда спит и думает медленно. 1. Если уж совсем плохо с индексами поискать на дежа по ключевым словам nt+clipper+locking. Там помнится кто-то написал по научному что нужно подправить на сервере нт и на клиенте связанное с кешем из за чего могут портиться индексы. Толково написано. 2. НЕ ДОПУСКАТЬ юзеров - менеджеров - директоров и прочих начальников заходить на базу с помощью dbu, dbx (особенно важно при six!), brow и делать там исправления даже самые маленькие. Опять же замечено - это помагает на 99%. Потому как мемо поля при редактировании dbx запросто летят а если есть unique индекс при ручном редактировании может НЕ ОБНОВИТЬСЯ - жди в скором времени проблему. 3. К сожалению не доверять полностью brow - имеет маленькие но ошибки (связанные с relations) что особенно неприятно при глобальной замене. 4. В программе естественно ВЕЗДЕ И ВСЮДУ при ВСЕХ редактированиях делать rlock. Лучше пользоваться модифицированной версией которая имеет параметр в секундах ждать если рекорд кем-то занята или сервер просто "задумался". После редактирования делать DbCommit() и DbUnLock() Как ни странно именно в такой последовательности. Я читал где-то дискуссию почему так а не наоборот можно поискать наверное на той же деже. Я везде поменял (перед этим всегда почему-то использовал DbUnLock а уже потом DbCommit) 5. Для тех кто делает backup. Желательно чтобы в это время юзеры не держали базы данных. С этим есть много проблем. 6. Гоните подальше любителей делать репорты под виндовс. У нас были (и есть) деятели которые напрямую цепляются к базам из R&R, Access'a и т.д. Это к хорошему не приведет. 7. Выкидывайте юзера после 15 минут бездействия! Нечего ему держать базы открытыми. Сделать это можно просто. В цикле где inkey() поставить таймер. Очень помогает!!! 8. Теперь не совсем связанное с индексами но полезное при работе на клиппере. Я все базы данных храню на сервере, а exe-файл на клиенте. Т.е. используется на полную мощь машина клиента на которой уже и так накуплено куча мемори, быстрый хард и т.д. Конечно есть advantage который делает все на сервере но я доволен и такой схемой. Нетворк она и для того создана чтобы иногда перегонять какие-то быйты туда сюда. На клиенте создается директория в которой 4 файла - r.bat, r.exe, check.exe, kbqui.com (помните такую программку длиной 6 байт - устанавливает скорость работы клавиатуры на МАКСИМУМ speed и browse летает !)- так что не надо покупать пентиум 500). В r.bat - 3 строки собственно kbqui, check.exe, r.exe. Что делает check.exe. Она просто сверяет дату и время файлов r.exe на клиенте и на сервере. И если на сервере файл свежее просто копирует его на клиент. Это дает вам возможность обновлять ваш сервер хоть 24 часа БЕЗБОЛЕЗНЕННО для юзеров. Никаких переинсталляций и апгрейдов! Кого интересует конкретно код, пишите вышлю. Это экономит много времени. Опять же только для админа когда он запускает программу можно просто прикрутить переиндексацию всех индексов предварительно закрыв директорию на сервере для старта юзеров. Кстати проверять разрушены ли индексы можно написать простенькую программку которая последовательно открывает все базы с индексами и делает count на кадлый индекс. Если вылетает значит индекс разрушен. Еще одна вещь. Создайте базу где будет имена всех юзеров. Как только кто-то запускает программу находим его запись и БЛОКИРУЕМ ее. Теперь в любой момент можем знать кто в онлайне Просто идем по базе и смотрим если рекорд заблокирована, значит юзер живой еще :) Если даже случится что он вылетет по ошибке запись автоматически разблокируется. Кстати полезно при этом создать error.dbf в которую писать кто когда и где вылетел. Сразу можно подправить, кинуть на сервер и все имеют апдейт при след.запуске! 9. Да и конечно потратьте время и посмотрите на свою нетворк. Что за нетворк, какая скорость, есть ли full-duplex на клиенте, погоняйте файлы туда сюда на предмет скорости. Я когда этим занялся был просто в шоке. Вместо 10Мбит работает еле-еле на 2Мбит, все драйвера установлены по умолчанию т.е. на самую медленную скорость (лишь бы работало) С этим точно могут возникнуть проблемы. Я не могу технически подробно объяснить но такое впечатление что если машина тормозит то на сервере может быть что угодно от потери информации до порчи (кеш опять!) Я думаю даже в самом худшем случае у всех карточки как минимум 10Мбит. Делим на 8. ~1.2 megabyte per second. Теоретически. Практически примем за 1 мег. Копируем файл с сервера на клиент мегабайт 20-30 Засекаем время. Если 20-40 секунд - прекрасно. Если 2-4 минуты - печально. Тут собака и зарыта. Я поисправлял всех своих клиентов (переставил драйвера иптимизировал ) они счастливы правда нетворк суппорт орали сильно. Конечно в каждой ситуации свои проблемы. Но по своему опыту скажу. Нт + 95 можно все таки использовать с клиппером очень даже эффективно и так сразу переходить на другую опер. систему? Не знаю. С протектед моде пришла стабильность. У меня ОЧЕНЬ большая программа (больше 100 000 строк, около 150 баз и все работает)Я сам хотел бы попробовать под линукс. Но пока к сожалению клиенты сидят на 95 + нт. Плюс есть другие программы где миллионы записей и работает вроде все. Если кому что интересно пишите, помогу советом. Виктор

AndreyZh: Dima Конечно спасибо за текст - интересно было вспомнить "основы"! Но за ответом какая последовательность более "правильная" текст отсылает "подальше"! Кроме того в тексте рассуждения по поводу техники, ОС, менталитете пользователей 199х года. Сейчас всё не так! 1. Техника в тысячи раз мощнее 2. ОС семейства NT/Server/Linux 3. Сети 100mb, а скоро приступаем к тесту 1Gb подсети для операторов Кроме этого уже отмечал, что ничего не значит: 1. размер таблицы в mb/gb. Пример нужно было конвертировать табличку, где было 10000 записей * 120 полей * каждое c 255 (размер не помню), у меня она расположена в 10 значащих полях по 5-50 знаков. 2. количество таблиц в базе данных - всё зависит от проектирования и ЗАДАЧИ. Помню в "детстве" на каждого работника заводилась своя таблица, где за год набиралось по 500-5000 записей и работников было теоритически более 10 000 человек (система подотчётных лиц). НУ И ЧТО? Хотя бы примерно скажите в чём мой порядок "неправильный"? - Он реально даёт повышение быстродействия при интенсивной работе с базой!

Dima: AndreyZh Cмотрите ответ Паши в теме http://clipper.borda.ru/?1-0-0-00000441-000-0-0-1234869089 в плане порядка dbcommit() и dbunlock() Так же если Вы все таки читаете ответы в этой теме то посмотрите последний ответ от Петра и Андрея , на мой взгляд все очевидно.

AndreyZh: Пашу сейчас почитаю, а в остальном? Петр: Я, кстати, тоже это приметил. Но подумал может быть просто здесь напутал. А оказывается и в программе Andrey: Так я же с журнала Nantacket списывал, да так и осталось .... Уже подумал, по новому нужно делать.... Да и у Павла "очень обстоятельное разьяснение": редактирование/удаление: if RecLock() read или delete dbCommit() dbUnlock() endif

Dima: AndreyZh пишет: Да и у Павла "очень обстоятельное разьяснение" Просто показана идея. Что снова не так ?

AndreyZh: Просто показана идея. Что снова не так ? Таки тута обсуждение, что первично "курица или яйца", правда непонятко "с какой стороны посмотреть", а именно как более правильно и почему (свои аргументы привёл - мне изменить всю систему просто сменить одну команду препроцессора)? I. DbUnlock*; DbCommit* или II. DbCommit*; DbUnlock*

Dima: AndreyZh пишет: II. DbCommit*; DbUnlock* Именно.

AndreyZh: Именно. Аргументу В СТУДИЮ!!! А что бы мне не быть голословным даю статистику за 3 дня (количество операций детализаций*15) и даже НИ одной жалобы на "тормоза"

Петр: AndreyZh пишет: Аргументу В СТУДИЮ!!! А что бы мне не быть голословным даю статистику за 3 дня (количество операций детализаций*15) и даже НИ одной жалобы на "тормоза" При работе в сети вы должны находить баланс между скоростью и целосностью данных. А также почитайте Clipper Guide To insure data integrity, COMMIT should be issued before an UNLOCK operation или xHarbour Language Reference Guide It is recommended to call COMMIT before UNLOCK.

AndreyZh: Петр При работе в сети вы должны находить баланс между скоростью и целосностью данных. А также почитайте Clipper Guide To insure data integrity, COMMIT should be issued before an UNLOCK operation или xHarbour Language Reference Guide It is recommended to call COMMIT before UNLOCK. AndreyZh Но за ответом какая последовательность более "правильная" текст отсылает "подальше"! Кроме того в тексте рассуждения по поводу техники, ОС, менталитете пользователей 199х года. Сейчас всё не так! 1. Техника в тысячи раз мощнее 2. ОС семейства NT/Server/Linux 3. Сети 100mb, а скоро приступаем к тесту 1Gb подсети для операторов "Учение Ленина правильное потому, что оно верное" что первично "курица или яйца", правда непонятко "с какой стороны посмотреть", а именно как более правильно и почему (свои аргументы привёл - мне изменить всю систему просто сменить одну команду препроцессора???

Pasha: AndreyZh пишет: что первично "курица или яйца", правда непонятко "с какой стороны посмотреть", а именно как более правильно и почему (свои аргументы привёл - мне изменить всю систему просто сменить одну команду препроцессора??? Обьяснение такой последовательности самое простое. Между unlock и commit другой клиент может успеть выполнить rlock - commit. Чтобы этого не произошло, надо сначала сбросить свои данные, и только затем разблокировать запись

AndreyZh: Pasha Между unlock и commit другой клиент может успеть выполнить rlock - commit. Чтобы этого не произошло, надо сначала сбросить свои данные, и только затем разблокировать запись Спасибо! Какое-то объяснение... Теоритически (практически нереальная ситуация в сфере clipper программ) с каким последствиям это сможет привести? При корректно работающей техники и ОС данные не будут разрушаться даже, если не буду вообще использовать DbCommit! Или я не прав (приведите пример "фатального" кода)? А если прав, то моя конструкция обеспечивает лучшее быстродействие (объяснения выше) при ОДИНАКОВОЙ стабильности! Помогите пожалуйста (более актуально на сейчас): Решил собрать с другим терминалом (не gtWin), со всей прогой не пулучилось начал "на мышах" - подключил библиотеки gtWin, gtWVT (далее эксперементально подключал vtgui, библиотеку на которую ссылался Andrey в своём примере wvtgui нигде не нашёл). Если не пытаюсь задействовать gtWVT то прога работает, а даже при попытке HB_GT_WVT_DEFAULT ругается через Win окошко, что нет gui (Честное слово - перед обращением к залу прочитал всю документацию и исходники на англицком языке) Что и как нужно подключать в xHarbour, что задействовать терминал gtWVT, который якобы быстрее в Win 98, да и имеет функцию gtInfo управления терминальным окном?

AndreyZh: Вопрос по терминалам снимается - нашёл проблему методом "тыка", а именно вместо подключения библиотеки gtWin подключил gtWVT. Они не живут вместе?

Pasha: AndreyZh пишет: Они не живут вместе? Живут. Можно линковать программу с несколькими терминалами: указать request на все, которые нужны, default - на предпочитаемый терминал, и линкеру дать все библиотеки терминалов. Есть еще опция при запуске программы, которая прямо активирует нужный терминал: myapp.exe //gtwin или myapp.exe //gtwvt

AndreyZh: Pasha Живут. Можно линковать программу с несколькими терминалами: указать request на все, которые нужны, default - на предпочитаемый терминал, и линкеру дать все библиотеки терминалов. Пробовал - не получалось. Пример: Файл *.bc: LIBFILES = lang.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib dbffpt.lib common.lib GTWIN.LIB gtwvt.lib gtgui.lib codepage.lib ct.lib tip.lib pcrepos.lib hsx.lib hbsix.lib zlib.lib Текст в исходнике: REQUEST HB_GT_WVT REQUEST HB_GT_WIN REQUEST HB_GT_WVT_DEFAULT Больше ничего... Получал Win сообщение об отсутствии gui



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