On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





Пост N: 86
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 11.08.13 18:47. Заголовок: Перехожу с Clipper 5.2e на Harbour, список вопросов от "новичка"


Добрый день, уважаемые коллеги.

Большое спасибо за море справочной информации по переходу, но нужно ещё пнуть меня в нужном направлении.

Итак, установил Harbour 3.0 + BCC 5.5.1 ==>> 3.2.0 +minGW скомпилировал и запустил традиционный "Hello, world!"
Дело перешло к проекту, из-за которого собственно и речь. Компилируется что через hbmk2, что самим харбором - без ошибок, всего с парой предупреждений, что меня немало удивило.
Возникли ошибки на этапе линковки:

Скрытый текст

Help, please - что делать и куды бечь ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 285 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


Администратор




Пост N: 2978
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.09.13 08:09. Заголовок: Sergy пишет: Загвоз..


Sergy пишет:

 цитата:
Загвоздка оказалась в команде RUN. Как она может повлиять на SAVESCREEN() - ума не приложу.



Харбор-программа разделяет консоль с внешним приложением (cmd.exe), которое изменяет какие-то параметры консоли.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3540
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.09.13 09:07. Заголовок: Sergy Вместо RUN по..


Sergy
Вместо RUN поюзай hb_processrun , WAPI_ShellExecute , EXECANDWAIT

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2979
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.09.13 13:51. Заголовок: Делаем тест: Local ..


Делаем тест:

#include "hbgtinfo.ch"

proc main

Local i, j, cc

REQUEST HB_CODEPAGE_RU866
REQUEST HB_LANG_RU866
hb_cdpSelect( "RU866" )

cls
//hb_gtinfo(HB_GTI_COMPATBUFFER, .f.)
for i := 0 to 15
cc := ''
for j := 0 to 15
cc += Chr(i*16 + j)
next
@ i, 0 say cc
next
cc := SaveScreen(0,0,15,15)
RestScreen(0,20,15,35,cc)
run('dir >nul')
cc := SaveScreen(0,0,15,15)
RestScreen(0,40,15,55,cc)
wait
retu

На экране видим бяку на месте кодов меньше 32
А теперь фокус-покус: добавляем вызов

hb_gtinfo(HB_GTI_COMPATBUFFER, .f.)

и все исправляется. Только при этом буфер для savescreen/restscreen будет в 2 раза больше.


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник


Пост N: 931
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.09.13 14:14. Заголовок: Ну да: HB_GTI_COMPAT..


Ну да:
HB_GTI_COMPATBUFFER /* Use DOS CGA/EGA/VGA character/attribute buffer in SAVE/REST SCREEN */

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 276
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 10.09.13 18:01. Заголовок: Pasha пишет: На экр..


Pasha пишет:

 цитата:
На экране видим бяку на месте кодов меньше 32
А теперь фокус-покус: добавляем вызов

hb_gtinfo(HB_GTI_COMPATBUFFER, .f.)

и все исправляется. Только при этом буфер для savescreen/restscreen будет в 2 раза больше.



Пока остановился на замене #define RUN(x) HB_ProcessRun(x) - SAVESCREEN заработал нормально. Понятно, что под Windows памяти дофига - но жалко же какой смысл ее транжирить...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 277
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 11.09.13 11:04. Заголовок: Sergy пишет: #defin..


Sergy пишет:

 цитата:
#define RUN(x) HB_ProcessRun(x)



Так не пойдет - только что наступил на грабли: не выполняются команды shell - dir, copy, ren и тп... При этом не выдаются никакие сообщения об ошибке. Просто игнор и всё.

Нужно вот так: #define RUN(x) HB_ProcessRun("cmd /c "+x)

буффер не портится и команды command shell выполняются.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3541
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.09.13 11:11. Заголовок: Sergy пишет: При эт..


Sergy пишет:

 цитата:
При этом не выдаются никакие сообщения об ошибке. Просто игнор и всё.


Оно пишется в 3-й параметр этой функции если его указать

Sergy пишет:

 цитата:
не выполняются команды shell - dir, copy, ren и тп...


А зачем ? Все это можно делать средствами Harbour

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 120
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 11.09.13 12:04. Заголовок: А почему нельзя сох..


А почему нельзя сохранять экран ДО команды RUN ? Так было бы логичнее.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 278
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 11.09.13 13:22. Заголовок: nick_mi пишет: А по..


nick_mi пишет:

 цитата:
А почему нельзя сохранять экран ДО команды RUN ? Так было бы логичнее.



Изначально вопрос стоял так: в процессе перехода с Clipper на Harbour были устранены шероховатости и программа была запущена в работу на предприятии. Все возникающие в процессе работы вопросы решались, за исключением непонятки, "портившей" символы с кодом ниже CHR(32) при восстановлении на экран.

После детального изучения вопроса (а версии возникали самые разные - они описаны тут, на пред. страницах) выяснилось, что уже SAVESCREEN возвращает "испорченный" буфер экрана. Пошаговое выполнение программы привело к выяснению причины - ею оказалась команда RUN().

Понятно, что анализировать сотни/тысячи строк кода и выяснять, где идет RUN(), а потом SAVESCREEN() вряд-ли имеет смысл и решение с #define кажется мне на сегодня вполне достаточным.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 279
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 11.09.13 13:26. Заголовок: Dima пишет: А зачем..


Dima пишет:

 цитата:
А зачем ? Все это можно делать средствами Harbour



Безусловно. Но речь идет о запуске тысяч строк кода Clipper под Harbour, а не его переделке "с учетом возможностей".

А в Clipper, к примеру, невозможно было работать нормально с каталогами/файлами, не соответствующими формату 8.3.
Да и в Harbour сейчас проще записать RUN("del local\*.dbf >nul") чем городить такой огород:
dim:=DIRECTORY(cPath,"*.dbf") ; AEVAL(dim,{|x| cPath+x[F_NAME]...}).

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 283
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.09.13 12:37. Заголовок: Решил поднять старую..


Решил поднять старую тему: http://clipper.borda.ru/?1-20-0-00000475-000-0-0-1208757116

Речь в ней идет о DIRTYREAD/TURBOREAD/DBOI_READLOCK

Подскажите плиз - к каким все-таки результатам приводит включение этого "ускорителя" ?

Общая ситуация такая: есть куча пользователей, которые что-то пишут в таблицу с продажами.
Есть пара пользователей, которые на основании таблицы продаж в READONLY режиме хотят построить отчет.

Вот тут я немного не понял, чем все кончилось, а тема закрыта: если я у этой пары пользователей ("читателей") включу dbOrderInfo(DBOI_READLOCK,,, .t.) - что, помимо ускорения выборки, произойдет? Если в таблице за время построения отчета появятся какие-то записи - "читателям" по барабану: отчеты обычно строятся за прошлые периоды, изменение которых юзерам запрещено программно.

Будут ли ошибки у "читателей" таблицы? Или у "писателей" в неё?

Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 39
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 16.09.13 13:46. Заголовок: Отчеты за прошлые периоды


Если технология - файл-серверная и
данные за прошлые периоды не изменяются, зачем нагружать доступ ко всей базе "грязным" чтением ?
Можно сверить текущую базу с предыдущей локальной выборкой( копией ) и строить отчеты
по локальной копии продаж, не нагружая рабочую базу.
Создание файла локальной копии происходит гораздо быстрее и менее напряжно, чем подготовка отчетов по общей базе,
и в общем случае, затраты ресурсов и времени на создание локальной копии окупаются.
Заодно - получается точная фиксация "точки отсечения" - на какой момент фиксировано состояние продаж.
if local_file_not_exist or local_file_is_old ;use .. shared readonly; copy to (local_file) for ..; close ..

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2991
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.09.13 14:13. Заголовок: Sergy пишет: Вот ту..


Sergy пишет:

 цитата:
Вот тут я немного не понял, чем все кончилось, а тема закрыта: если я у этой пары пользователей ("читателей") включу dbOrderInfo(DBOI_READLOCK,,, .t.) - что, помимо ускорения выборки, произойдет? Если в таблице за время построения отчета появятся какие-то записи - "читателям" по барабану: отчеты обычно строятся за прошлые периоды, изменение которых юзерам запрещено программно.

Будут ли ошибки у "читателей" таблицы? Или у "писателей" в неё?



DBOI_READLOCK касается только выборки по управляющему индексу.
Если этот параметр включен, то на время включения другие клиенты не смогут ничего ни прочитать, ни записать в рабочую область, т.к. индекс блокируется для чтения. Внешне это будет выглядеть как "зависание" клиента. Поэтому использовать эту опцию надо аккуратно, и на очень непродолжительное время. Можно сделать тест:

dbOrderInfo(DBOI_READLOCK,,, .t.)
wait

и попробовать с другого клиента выдась go top/skip, и посмотреть, что получится. Ничего хорошего, естественно.
Это все проблемы файл-сервера. Для клиент-сервера вроде ads/letodb такой проблемы нет в принципе.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 284
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.09.13 23:03. Заголовок: petr707, Pasha Мысл..


petr707, Pasha Мысли понятны. С letodb скоро разберусь. И загрузку локально для справочников я провожу всегда, практически с первого дня написания программы. Для большой кучи отчетов (в начале месяца, например) есть функция "работать локально" - через 5-7 минут ожидания (пока вся база скопом копируется в локальную папку) - программа работает с ней, как ни в чем не бывало, но в READONLY - чтобы никто не навыписывал по забывчивости накладных.

А вот если юзеру нужно всего один-два отчета, не окажется ли процесс "копирование всей таблицы продаж + локальная индексация" длительнее, чем просто чтение нужного периода по индексу ? Т.е. овчинка не будет стоить выделки... Думал, что DBOI_READLOCK поможет ускорить чтение по индексу.

Спасибо.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3007
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.13 02:16. Заголовок: Уже перешел на Харбо..


Уже перешел на Харбор ! Поздравляю !
Sergy пишет:

 цитата:
А вот если юзеру нужно всего один-два отчета, не окажется ли процесс "копирование всей таблицы продаж + локальная индексация" длительнее, чем просто чтение нужного периода по индексу ?



Для различных выборов из баз, делай условную индексацию по уже сформированным индексам.
Отчеты будут строиться влет, даже не успеешь заметить...
Здесь на форуме обсуждалось это, и не раз.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 40
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 17.09.13 06:33. Заголовок: все можно проверить..и нужно проверять


для каждой задачи можно проверить и выбрать подходящую схему..
set order to 0; copy to () for...; index on ...
может оказаться быстрее чем
index on ...; copy to () for...;

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2992
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.09.13 08:33. Заголовок: Sergy пишет: Думал,..


Sergy пишет:

 цитата:
Думал, что DBOI_READLOCK поможет ускорить чтение по индексу.



Сергей, я подзабыл эти вещи, и неправильно написал: DBOI_READLOCK блокирует выборку на запись с других клиентов, а не на чтение. А так да, когда я использовал DBFCDX, установка DBOI_READLOCK меня реально выручала. В сетевом окружении скорость выборки возрастала многократно.
Что же касается остальных вариантов, то надо иметь в виду: все эти приемы: динамическое построение индекса, или индекса с условием, или копирование таблицы с set order to 0 для больших таблиц неприемлемы, поскольку предполагают цикл по всем записям, что быстрым быть не может. Надо применять обычное решение: иметь правильный набор индексов для возможных выборок, и использовать их. Для файл-сервера DBOI_READLOCK реально помогает. Проблем из-за его использования у меня не было. Только, как я отмечал, его надо использовать аккуратно.

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 286
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.09.13 10:08. Заголовок: Pasha пишет: DBOI_R..


Pasha пишет:

 цитата:
DBOI_READLOCK блокирует выборку на запись с других клиентов, а не на чтение.



Требуется уточнение: блокирует именно те записи, по которым идет чтение или целиком запись в индексный файл ?

Тк первый вариант для меня подходит, а второй - нет.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 287
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.09.13 10:15. Заголовок: Andrey пишет: Для р..


Andrey пишет:

 цитата:
Для различных выборов из баз, делай условную индексацию по уже сформированным индексам.


Не очень знаком с условной индексацией, если честно... Направьте плиз на путь истинный.

Вот допустим, у меня есть таблица продаж:
date D8 // дата продажи
stk1 N5 // продавец
stk2 N5 // покупатель
code C10 // код товара
num N10 // кол-во
price N10.2 // цена

И два индекса:
1) по CODE (чтобы быстро находить нужный товар в куче продаж)
2) по DATE (чтобы быстро найти нужный период для отчета)

Для построения отчета использую таблицу продаж только со вторым индексом в режиме READONLY
Как условная индексация может тут помочь ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2993
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.09.13 10:31. Заголовок: Sergy пишет: Требуе..


Sergy пишет:

 цитата:
Требуется уточнение: блокирует именно те записи, по которым идет чтение или целиком запись в индексный файл ?



Блокирует весь индекс, то есть любое изменение. Причем ошибка не возникает, клиент просто ждет, пока другой клиент не отпустит индекс.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 285 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 168
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет