Форум » [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: Pasha пишет: Алиас - это алиас рабочей области, в которой будет выполняться select 2 - имеется в виду ADS_CDX Этот алиас будет создан автоматически? Какие еще значения параметров, кроме 2, можно задавать? А предыдущее мое сообщение (ответ на ваш вопрос) про принтер читали и какой ответ?

Pasha: надо сначала выбрать РО вызовом Select(nSel) В этой РО и будет открыт запрос с алиасом cAlias

Urri: Я делаю так: nsel=100 cPath='g:\abonent\dbf\' cSQL='select client,name from g:\abonent\dbf\client.dbf where street=20' cAlias='abc' Select(nSel) && if AdsGetConnectionHandle()=0 AdsConnect(cPath) && endif if AdsCreateSQLStatement(cAlias, 1) AdsPrepareSQL(cSQL) AdsExecuteSQL() endif ? alias(),reccount() Вызов Ф-ции AdsGetConnectionHandle() закомментирован, т.к. выдает неразрешенную ссылку. Диск G обслуживается локальным ADS (поэтому второй параметр в AdsCreateSQLStatement поставил 1 (2 тоже ставил - ничего не менялось)). В результате получал alias() = abc, reccount() = 0. Проверил, в базе client строки со street=20 имеются в количестве 1300 штук. Что я делаю не так?


Pasha: А поля видны ? ? FCount(), Client, Name Условие where сработало ? Тип поля street числовой ? 2-й параметр AdsCreateSQLStatement: #define ADS_NTX 1 #define ADS_CDX 2 #define ADS_ADT 3

Urri: fcount() = 196, но реально в базе client их всего 125. Поле street - числовое. Поля не видны, fieldname(1) - пусто

Urri: Добрый день. Ну кто подскажет как правильно SQL запрос вызвать? Это пока последнее, что мне нужно на ближайшее время. Со всеми остальными вопросами какт-то справился, даже с принтером временное решение нашел, т.к. FT_INT86 до сих пор не работает нормально

alkresin: Вот такой пример у меня работает ( test.dbf взято из harbour/tests ) #include "c:\harbour\contrib\rddads\ads.ch" FUNCTION main rddSetdefault("ADS") SET FILETYPE TO CDX SET SERVER LOCAL AdsConnect( ".\" ) IF !AdsCreateSqlStatement( ,2 ) ? "AdsCreateSqlStatement - error" RETURN ENDIF IF !AdsExecuteSqlDirect( "SELECT * FROM test WHERE AGE < 50" ) ? "AdsExecuteSqlDirect - error" RETURN ENDIF ? Reccount() ? RETURN

Urri: Ура. Спасибо, уважаемый. И у меня теперь заработало. Еще раз спасибо. Сейчас буду развивать достижение.

Urri: Поторопился радоваться. Для локального ADS - работает, для Remote - не работает, выдает сообщение "AdsCreateSqlStatement - error", а все остальное с Remote сервером работает. Какие будут рекомендации?

alkresin: Проверьте, что возвращает AdsConnect(): IF ! AdsConnect( <path> ) ? "No connection" RETURN ENDIF Кстати, в AdsConnect() что у вас указано ?

Urri: alkresin пишет: Проверьте, что возвращает AdsConnect(): alkresin пишет: Проверьте, что возвращает AdsConnect(): Добрый день Вот такой у меня проверочный тест. ? AdsConnect("m:\" ) if !AdsCreateSqlStatement( ,2 ) ? "AdsCreateSqlStatement - error" return endif select(100) if !AdsExecuteSqlDirect( "SELECT * FROM m:\abonent\dbf\client WHERE street=20" ) ? "AdsExecuteSqlDirect - error" return endif AdsConnect("m:\") = .t. Но при этом выдает "AdsExecuteSqlDirect - error". После этого программа успешно работает дальше, т.е. на m:\ нормально фукнционирует ADS REMOTE. Если "m:\" заменить на "g:\" (и в SQL запросе тоже), а на g:\ работает ADS Local - то все работает нормально выполняется

alkresin: Drive letters in paths of table names can only be used with Advantage Local Server. When using Advantage Database Server for NT or NetWare, fully qualified paths must use UNC (e.g., "\\server\volume\path\table"), because the SQL statement is parsed at the server where client-side drive letters are not meaningful. If relative paths are used in SQL statements, the path is considered to be relative to the connection path. For example, a table referenced as "..\alternate\info" would refer to a directory named "alternate" that would be expected to be parallel to the original connection path directory. Иными словами :), диск ( m:) указывается только для локального сервера. SQL запрос исполняется на сервере, а сервер не знает, на какую букву его распределили на вашей клиентской станции. Путь надо указывать относительно того, что прописан в AdsConnect(). Т.е., в вашем случае надо, по видимому, написать: AdsExecuteSqlDirect( "SELECT * FROM \abonent\dbf\client WHERE street=20" )

Urri: Получилось. Спасибо большое. Еще бы ссылку прислали где это можно почитать... Сейчас начну всех своих 95 пользователей на Харборе заставлять работать. Пусть еще какие-то ошибки и несответствия вылезут. А то я вчера с одной столкнулся - уже был в полном расстройстве и готов был от Харбора отказаться, т.к. непонятно что творилось. Таки нашел несовпадение в работе клиппера и Харбора. А еще сколько таких будет...

alkresin: Получилось. Спасибо большое. Еще бы ссылку прислали где это можно почитать... Почитать - в help'е к ADS.

Pasha: Urri пишет: Имеются ввиду функции PrintReady() и PrintSend(). Я добавил PrintSend для windows

wad1: Здравствуйте, Urri! Если не секрет, какое решение нашел для определения готовности принтера? А то я некоторое время назад пытался здесь получить какое-нибудь решение, но ничего не вышло.

Urri: Добрый день. wad1 пишет: Если не секрет, какое решение нашел для определения готовности принтера? А то я некоторое время назад пытался здесь получить какое-нибудь решение, но ничего не вышло. Ничего нового, вернулся к старому аля'Клиппер решению: if isprinter(1) set console off set print on set printer to lpt1. set device to print ?? cText set print off set device to screen set console on endif В далекие времена я от этого варианта отказался в пользу работы через прерывание ft_int86 (я здесь уже писал об этом и о причинах), но сейчас пришлось вспомнить былое, т.к. заставить в харборе эту ф-цию работать пока не удалось

wad1: Почему-то мне не удалось от isprinter() получить реальной информации о готовности принтера: даже если он выключен, возвращается .t.

Urri: wad1 пишет: Почему-то мне не удалось от isprinter() получить реальной информации о готовности принтера: даже если он выключен, возвращается .t. Может потому что очереди в Винде настроены для принтера? У меня пока работает - вот я глубоко не копаю, других проблем в Харборе нашлось. Надеюсь все-таки заставить FT_INT86 работать. А пока борюсь с клавиатурой. Пользователи привыкли к определенным комбинациям клавиш для выполнения нужной работы, а в Харборе работает на так как раньше. Например, в Клиппере AltR возвращало один код вне зависимости англ. раскладка или русс. включена в момент нажатия. А теперь в русской раскладке что AltR что К нету... Может кто знает как с этим бороться?

Dima: Urri пишет: Например, в Клиппере AltR возвращало Можешь подправить и юзать эту функцию http://clipper.borda.ru/?1-4-0-00000339-000-0-0-1223272101



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