Форум » [x]Harbour » Помогите советом начинающему... » Ответить

Помогите советом начинающему...

Urri: Тут вот надумал переползти на xHarbour. Возникла следующая проблема: имена всех функций и подпрограмм дополняются префиксом HB_FUN_. А можно ли этого избежать так, чтобы остались родные, начальные имена. У меня весь софт построен на скриптах, в которых уже стоят вызовы функций и процедур по привычным, родным именам. И перелопатить везде в 5000 текстовых файлах-скриптах вызовы функций и поменять на новые - задача крайне утомительная с непонятной перспективой на успех.

Ответов - 294, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Петр: Urri пишет: Что подскажете по этому поводу? Павел уже исправил эту ошибку 2009-05-05 21:40 UTC+0300 Pavel Tsarenko <tpe2/at/mail.ru> * source/rtl/gtwin/gtwin.c ! fixed HB_GTI_KBDSHIFTS (by Przemyslaw Czerpak, borrowed from Harbour) Если собираетесь и дальше использовать xHarbour - осваивайте CVS Забыл добавить, gtwin не из contrib, а source/rtl

Urri: Добрый вечер, уважаемые. Подскажите пожалуйста: а совместимы ли способы блокировки записей в ADS, вызываемые из Клиппера и проверяемые в Нарборе? После использования в клиппере функции rlock() функцией ax_islocked() указывает, что запись заблокирована, но в Харборе функция ADSISRECORDLOCKED() дает .F. Есть ли где описание соответствия функций для ADS, вызываемых из клиппера и Харбора? А то по названиям можно догадываться, а вот при проверке - не работает.

Pasha: Проверил на ace 7.0, local server, AdsIsRecordLocked() работает На ace 8 проверить не могу


Urri: Да, но Local и Remote версии при работе с ADS только из Harbour работает нормально, а вот если для remote server блокировку поставила одна программа, написанная на Клиппере, то другая программа, написанная на Харборе эту блокировку не видит. Т.е. получается, что с одной таблицей не может правильно (в смысле анализа блокировок) работать две программы: одна на Клиппере, другая полный ее аналог, но на Харборе (с разницей только в вызываемых функциях анализа блокировок). Я спрашивал именно про совместную работу Клиппера и Харбора

Pasha: Я бы советовал задать этот вопрос в Ads support Совместимы ли блокировки старого клиента клиппер с ace 8.0. У ads раньше была newsgroup, я даже задавал там вопрос, и мне отвечали, адреса правда под рукой нет. Возможно, он уже изменился

Pasha: Вот где собака порылась AdsIsRecordLocked tests if the given record is locked by the current user

Pasha: dbInfo(DBI_GETLOCKARRAY) возвращает массив блокировок, номера записей Можно проверять: ASCAN(dbInfo(DBI_GETLOCKARRAY), RecNo()) # 0

Urri: Pasha пишет: Вот где собака порылась AdsIsRecordLocked tests if the given record is locked by the current user Так что, получается для конкретной записи даже для работающих только Харбор программ нельзя проверить факт блокировки другим пользователем конкретной строки (отложив на время вопрос о взаимодействии с Клиппер программами)? Pasha пишет: dbInfo(DBI_GETLOCKARRAY) возвращает массив блокировок, номера записей Можно проверять: ASCAN(dbInfo(DBI_GETLOCKARRAY), RecNo()) # 0 У меня бывают ситуации блокировок по 5000 строк. Пока функция dbinfo() соберет массив корректировок, функция ascan() проверит - нужную строку уже заблокируют

Pasha: Других функций опроса блокировок в ace я не увидел, а rddads может работать только через ace Почему бы не блокировать нужные записи сразу ? Примерно так for i := 1 to len(aRecs) if ! DBRLock(aRecs) lLock := .f. exit endif next

Urri: Pasha пишет: Почему бы не блокировать нужные записи сразу ? Примерно так Какие записи блокировать выясняется в процессе расчета. Бывает нужно заблокировать штук 300, а бывает - только 1. А блокировать на всякий случай - так это переводняк времени (в ADS блокировки выполняются неторопливо). Проблема вот в чем. На 20 машинах запускается расчет для 250000 абонентов. Первая машина прихватила (заблокировала) первую строку списка - расчитывает, вторая машина - проверила эту строку: занята (заблокирована кем-то) - перешла на следующую строку, прихватила, расчитывает. Третья машина проверила первуя строку, вторую строку - заняты. Прихватила третью. И т.д. А потом первая строка ищет в списке следующую свободную для расчета и т.д. Получается такой себе конвейер. А теперь получается нужно придумывать другой по банальной причине...

Pasha: А зачем разделять проверку и блокировку ? rlock/dbRLock - это проверка и блокировка в одном флаконе А то может оказаться, что запись будет захвачена другим пользователем между вызовами ax_islocked и rlock

Urri: Добрый день. Подскажите пожалуйста, как заставить ф-цию FT_SETVPG прилинковаться. В LIBNF она есть, при вызове FT_INT86, которая ее вызывает, пишет про неразрешенную внешнюю ссылку. При попытке вставить в исходный текст эту ф-цию из исходников - пишет, что дублируется... И что делать? Очень хочется воспользоваться ф-цией FT_INT86 чтобы закончить с печатью... Кстати, кто как в Харборе печатает, т.е. выбодит на принтер. Просматривал список предлагаемых в Харборе функций - про все сказано, что сделаны только для совместимости и возвращают постоянное значение вне зависимости от ситуации. А какая же родная ф-ция печати в Харборе?

Urri: Еще такой вопрос. Вызываются ли под ADS SQL команды, например выбрать нечто по условию и результат записать в DBF файл. Попытка использования ф-ции ADSEXECUTESQLDIRECT('select ...') ни к чему не привела. Дайте пример.

Pasha: Select(nSel) if AdsGetConnectionHandle() == 0 AdsConnect(cPath) // Set(_SET_DEFAULT) endif if AdsCreateSQLStatement(cAlias, 2) AdsPrepareSQL(cSQL) AdsExecuteSQL() endif

Urri: Спасибо. Щас будем разбираться. Может у кого есть описание указанных ф-ций? А ф-ция ADSEXECUTESQLDIRECT что, не работает? И что подскажите насчет печати (предыдущего вопроса)?

Pasha: Urri пишет: Подскажите пожалуйста, как заставить ф-цию FT_SETVPG прилинковаться. В LIBNF она есть, при вызове FT_INT86, которая ее вызывает, пишет про неразрешенную внешнюю ссылку. При попытке вставить в исходный текст эту ф-цию из исходников - пишет, что дублируется... И что делать? Очень хочется воспользоваться ф-цией FT_INT86 чтобы закончить с печатью... Эти функции - переключение видеостраниц - реализованы только для dos К тому же в page.prg опечатка: вместо _ft_setvpg(nPage) надо _v_setvpg(nPage) для win32 эти средства работать не будут, поскольку это специфика os Какие именно функции печати имеются в виду ?

Pasha: Urri пишет: А ф-ция ADSEXECUTESQLDIRECT что, не работает? По-видимому, перед ее вызовом надо выдать: AdsCreateSQLStatement(cAlias, 2)

Urri: Pasha пишет: Какие именно функции печати имеются в виду ? Имеются ввиду функции PrintReady() и PrintSend(). Написано в инструкции, что созданы для целей совместимости и возвращают всегда 0 и .f. соответственно. И других ф-ций для анализа готовности принтера и пересылки строк в принтер больше не вижу. Из истории проблемы: лет 15 назад еще при работе с Clipper 5.01 и матричными принтерами не было никакой возможности проанализировать сбой оборудования (бумага застряла, например) и программа вываливалась с дикими ошибками. В те далекие времена меня это очень утомляло и я переписал для себя блок печати с использованием DOS прерывания, вызываемого ф-цией FT_INT86() и забыл о проблемах печати на 15 лет (даже под w95,w98,w2000,XP). И теперь, перейдя на Харбор пока в варианте консольного приложения, очень хочу не иметь проблем с печатью. А для этого очень хочу снова воспользоваться ф-цией FT_INT86. Она ведь есть в библиотеках Харбора, только не работает так, как раньше под Клиппером. Или подскажите другой вариант проверки готовности принтера (матричные принтеры у нас еще имеются)

Urri: Pasha пишет: По-видимому, перед ее вызовом надо выдать: AdsCreateSQLStatement(cAlias, 2) Что есть cAlias? Что такое параметр 2? Смотрю примеры из Харбор, понятного весьма мало т.к. нет ну никакого описания. А прокладывать дорогу в дебрях исходников на С очень утомительно и долго. Может у кого есть какое-то описание? И вообще из участников этого форума кто-то использует SQL запросы при работе ADS с .DBF файлами, а не .ADT? Хочу пока немного: сделать выборку SQL запросом и вывалить результат в .DBF файл...

Pasha: Алиас - это алиас рабочей области, в которой будет выполняться select 2 - имеется в виду ADS_CDX После выполнения select в рабочей области можно использовать обычные средства rdd: go top, skip, обращение к полям Поскольку эти функции в харборе не описаны, то надо смотреть сырцы rddads, и, конечно, помощь к ace



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