Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1
Зарегистрирован: 21.04.09
|
|
Отправлено: 21.04.09 15:43. Заголовок: Помогите советом начинающему...
Тут вот надумал переползти на xHarbour. Возникла следующая проблема: имена всех функций и подпрограмм дополняются префиксом HB_FUN_. А можно ли этого избежать так, чтобы остались родные, начальные имена. У меня весь софт построен на скриптах, в которых уже стоят вызовы функций и процедур по привычным, родным именам. И перелопатить везде в 5000 текстовых файлах-скриптах вызовы функций и поменять на новые - задача крайне утомительная с непонятной перспективой на успех.
|
|
|
Ответов - 294
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|
| |
Пост N: 325
Зарегистрирован: 08.04.06
|
|
Отправлено: 05.06.09 22:14. Заголовок: Urri пишет: Среди п..
Urri пишет: цитата: | Среди параметров hb_gtinfo не удалось найти нужных |
| Посмотри, как это у меня сделано, вдруг поможет. Хотя не факт, что это самый лучший вариант, - тоже пара тем тут на форуме обсуждалась по этому вопросу. if HB_GTVERSION() == "WVT" wint = HB_GtInfo(GTI_DESKTOPWIDTH) v_all = HB_GtInfo(GTI_DESKTOPHEIGHT) HB_GtInfo(GTI_FONTNAME, "Lucida Console") HB_GtInfo(GTI_FONTSIZE, IIF(v_all > 800, 34, IIF(v_all > 640, 18, 16))) HB_GtInfo(GTI_FONTWIDTH, IIF(wint > 1024, 16, IIF(wint > 800, 12, 9))) else SetConsoleDisplayMode(1) && в полноэкранный режим SetMode(25, 80) endif
|
|
|
|
| постоянный участник
|
Пост N: 74
Зарегистрирован: 21.04.09
|
|
Отправлено: 06.06.09 19:01. Заголовок: alkresin пишет: Воз..
alkresin пишет: цитата: | Возможно, вы установили слишком большой шрифт, оно не помещается целиком на экране и отсюда такие фокусы ... |
| Шрифт нормальный, после дергания окна по экрану в новом положении все выглядит аккуратно, я бы даже сказал красиво... Даже и неясно чего это такое поведение при запуске... Еще всплыла проблема... Благодаря советам alkresin заработали было в ADS SQL-запросы к dbf таблицам. Я очень от этого порадовался, т.к. весьма расчитывал на эту возможность в связке xHarbour & ADS. Однако выяснилось, что все хорошо работало в тестовом примере (до открытия баз данных задачи), а после открытия выдает AdsCreateSqlStatement( ,2 )=.f. После закрытия баз - все опять работает нормально. Что это за козни такие и как с этим бороться?
|
|
|
|
| moderator
|
Пост N: 193
Зарегистрирован: 06.07.06
|
|
Отправлено: 08.06.09 09:57. Заголовок: Urri пишет: После з..
Urri пишет: цитата: | После закрытия баз - все опять работает нормально. Что это за козни такие и как с этим бороться? |
| Было бы проще ответить на этот вопрос, если б вы составили небольшой пример, который легко было бы воспроизвести - чтобы там нужная база создавалась.
|
|
|
|
| постоянный участник
|
Пост N: 75
Зарегистрирован: 21.04.09
|
|
Отправлено: 09.06.09 14:26. Заголовок: *-------------------..
*-------------------------------------- procedure main request DBFCDX,DBFNTX Request Ads ? curdir_() ? AdsSetServerType(1) ? AdsIsServerLoaded('g:\') ? AdsConnect("g:\") rddSetDefault('ADSCDX') select(100) if !AdsExecuteSqlDirect( "SELECT * FROM rab\street WHERE kod<=20" ) ? "AdsExecuteSqlDirect - error" endif ? Reccount() Вот такой текст тестовой программы. Вообще не работает. curdir_() возвращает g:\rab\ ? AdsSetServerType(1) 0 ? AdsIsServerLoaded('g:\') 1 ? AdsConnect("g:\") .t. После этого "AdsExecuteSqlDirect - error" В g:\rab\ имеется примитивная база street.dbf с тремя полями kod n(4),naim c(20),kolic n(6) Не работает также и для remote сервера если поменять g: на m: и в AdsSetServerType(1) поставить параметром 2. Самое интересно то, что этот тестовый пример, запущенный через мой интерпретатор - работает. Удивительно до невозможности. Но потом и интерпретаторе, если открыть обычным клипперовским способом любую базу - перестает работать. Закроешь все - снова работает. Даже отдельное закрытие алиаса ADSSQL не помогает
|
|
|
|
| moderator
|
Пост N: 194
Зарегистрирован: 06.07.06
|
|
Отправлено: 11.06.09 08:37. Заголовок: А куда потерялся Ads..
А куда потерялся AdsCreateSqlStatement() ??? Запустил ваш пример в таком виде: PROCEDURE main LOCAL arr := { { "KOD","N",4,0 }, { "NAIM","C",20,0 } } REQUEST DBFCDX, DBFNTX REQUEST Ads ? CurDir() ? AdsSetServerType( 1 ) ? AdsIsServerLoaded( 'c:\' ) ? AdsConnect( "c:\" ) rddSetDefault( 'ADSCDX' ) dbCreate( "c:\street.dbf", arr ) use ("c:\street.dbf") append blank replace kod with 12,naim with "12" append blank replace kod with 30,naim with "30" dbCloseArea() SELECT( 100 ) IF !AdsCreateSqlStatement( , 2 ) ? "Cannot create SQL statement" ENDIF IF !AdsExecuteSqlDirect( "SELECT * FROM street WHERE kod<=20" ) ? "AdsExecuteSqlDirect - error" ENDIF ? RecCount() RETURN Nil Все работает. Кстати, прошу вас в дальнейшем приводить примеры именно в таком виде, готовом к исполнению, не предлагая создать таблицу где-то в rab/ - чтобы можно было, не теряя времени, скопировать его в prg и запустить.
|
|
|
|
| |
Пост N: 41
Зарегистрирован: 19.12.06
|
|
Отправлено: 12.06.09 08:41. Заголовок: to alkresin: Есть л..
|
|
|
|
| Администратор
|
Пост N: 1159
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.06.09 09:28. Заголовок: Вызов AdsSet* можно ..
Вызов AdsSet* можно добавить и самому #pragma BEGINDUMP #include "hbapi.h" #include "rddads.h" HB_FUNC( ADSSETSTRING ) { AdsSetString( hb_parnl(1), hb_parc(2), hb_parc(3), hb_parclen(3) ); } #pragma ENDDUMP Хотя этот wrapper можно добавить и в rddads
|
|
|
|
| постоянный участник
|
Пост N: 76
Зарегистрирован: 21.04.09
|
|
Отправлено: 12.06.09 10:56. Заголовок: Добрый день, уважаем..
Добрый день, уважаемые... alkresin пишет: цитата: | А куда потерялся AdsCreateSqlStatement() ??? |
| Есть в реальном примере, честное слово. Не знаю как вывалился в моем вопросе... Извиняюсь... В том виде, в котором вы прислали подкорректированный мой пример, и у меня запустилось. Только вот после того, как я между строками dbclosearea() и select(100) добавил строки select 0 use c:\street начало вываливаться сообщение AdsExecuteSqlDirect - error Т.е. получается: если я работаю с .DBF файлом в обычном клипперовском смысле и мне в какой-то момент нужно по нему сделать какую-то выборку соответствующий алиас нужно закрывать а потом снова открывать??? А если с этой таблицей параллельно работают другие пользователи на сети - то работает... Неожиданно однако... alkresin пишет: цитата: | Кстати, прошу вас в дальнейшем приводить примеры именно в таком виде, готовом к исполнению, не предлагая создать таблицу где-то в rab/ - чтобы можно было, не теряя времени, скопировать его в prg и запустить. |
| Признаю свою ошибку и извиняюсь. Категорически обещаю исправиться... Благодарю за вашу помощь и внимание к моим проблемам.
|
|
|
|
| |
Пост N: 42
Зарегистрирован: 19.12.06
|
|
Отправлено: 12.06.09 11:07. Заголовок: Cпасибо, добавил в п..
Cпасибо, добавил в проект. Cтранно, что никому больше не нужен был вызов этой функции, хотя она включена только для 9 версии ADS.
|
|
|
|
| moderator
|
Пост N: 198
Зарегистрирован: 06.07.06
|
|
Отправлено: 12.06.09 19:46. Заголовок: Urri пишет: Только ..
Urri пишет: цитата: | Только вот после того, как я между строками dbclosearea() и select(100) добавил строки select 0 use c:\street начало вываливаться сообщение AdsExecuteSqlDirect - error Т.е. получается: если я работаю с .DBF файлом в обычном клипперовском смысле и мне в какой-то момент нужно по нему сделать какую-то выборку соответствующий алиас нужно закрывать а потом снова открывать??? |
| Вы же открыли таблицу в exclusive режиме... Попробуйте use c:\street shared
|
|
|
|
| постоянный участник
|
Пост N: 77
Зарегистрирован: 21.04.09
|
|
Отправлено: 14.06.09 10:46. Заголовок: alkresin пишет: Вы ..
alkresin пишет: цитата: | Вы же открыли таблицу в exclusive режиме... Попробуйте use c:\street shared |
| Да, спасибо, так получилось. В пердыдущих своих попытках работать с SQL в больших проектах у меня тоже не получалось, хотя там все базы открываются в режиме shared. А теперь и там получается, наверное, следуя вашим советам, сделал что-то правильно и успех достигнут. Нужно теперь будет подробнее изучить ADS'овский SQL: читал, что имеются существенные ограничения. Но все-равно - прогресс, а то вызывать FOXPRO для получения выборок и итогов, для чего вся база тащется по сети, уже достало. Еще раз спасибо за терпение и внимание.
|
|
|
|
|
| постоянный участник
|
Пост N: 78
Зарегистрирован: 21.04.09
|
|
Отправлено: 17.06.09 08:33. Заголовок: Добрый день. Пытаюс..
Добрый день. Пытаюсь активно работать с SQL запросами. То радуюсь, то расстраиваюсь. Сейчас такая проблема: если записать where prz_pdc='Дт', то не отбирает, русские буквы не понимает. В программе есть операторы REQUEST HB_LANG_RU866 REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) В настройках ADSLOCAL.CFG ; ANSI Character Set ANSI_CHAR_SET=RUSSIAN ; OEM/Localized Character Set OEM_CHAR_SET=RUSSIAN Сервере для remote такие параметры установлены и тоже не работает отбор. Замена 'Дт' DOS кодировки на Windows к положительному результату не приводит. Что делать, подскажите
|
|
|
|
| Администратор
|
Пост N: 1166
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.06.09 08:52. Заголовок: Urri пишет: Что дел..
Urri пишет: При старте программы надо указать: AdsSetCharType( 2, .t. )
|
|
|
|
| постоянный участник
|
Пост N: 79
Зарегистрирован: 21.04.09
|
|
Отправлено: 17.06.09 10:07. Заголовок: Pasha пишет: При ст..
Pasha пишет: цитата: | При старте программы надо указать: AdsSetCharType( 2, .t. ) |
| Такой оператор уже имеется в программе, но не помогает.
|
|
|
|
| Администратор
|
Пост N: 1167
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.06.09 11:08. Заголовок: Urri пишет: Такой о..
Urri пишет: цитата: | Такой оператор уже имеется в программе, но не помогает. |
| А функции upper/lower для полей БД правильно работают ? В качестве теста русских строк в sql-операторах можно выполнить такую команду update table1 set field1 = 'А' where RecID = :nRecID и затем проверить, правильно ли записываются русские символы
|
|
|
|
| постоянный участник
|
Пост N: 80
Зарегистрирован: 21.04.09
|
|
Отправлено: 17.06.09 11:42. Заголовок: В качестве теста вып..
В качестве теста выполнял команды sql="update abonent\dbf\street set unaim='АБВГДЕ'" Что в DOS кодировке, что в Windows кодировке записывало в базу полную фигню sql="update abonent\dbf\street set unaim=upper(naim)" Также в базу записывает фигню. Но если в цикле программно пробежаться и сделать такое присвоение с использованием встроенной ф-ции upper - все нормально получается. И что это означает?
|
|
|
|
| постоянный участник
|
Пост N: 81
Зарегистрирован: 21.04.09
|
|
Отправлено: 18.06.09 11:10. Заголовок: Urri пишет: Pasha п..
Urri пишет: цитата: | Pasha пишет: цитата: При старте программы надо указать: AdsSetCharType( 2, .t. ) |
| С этой ф-цией программа работает нормально, но не работает SQL запрос в том виде как я писал. Убрал вызов этой ф-ции - заработал SQL запрос, но многое другое поломалось. Вот же незадача... И как с этим бороться?
|
|
|
|
| Администратор
|
Пост N: 1170
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.06.09 12:23. Заголовок: Urri пишет: И как с..
Urri пишет: Тогда причина понятна. Не буду вдаваться в подробности, надо в модуле rddads\adsfunc.c в функции HB_FUNC( ADSEXECUTESQLDIRECT ) строку char * pucStmt = hb_adsOemToAnsi( hb_parc( 1 ), hb_parclen( 1 ) ); заменить на char * pucStmt = hb_parc( 1 ); и пересобрать rddads.lib
|
|
|
|
| постоянный участник
|
Пост N: 82
Зарегистрирован: 21.04.09
|
|
Отправлено: 18.06.09 16:00. Заголовок: Ура. Заработало. Па..
Ура. Заработало. Павел, большое спасибо. Выручил, как всегда...
|
|
|
|
| Администратор
|
Пост N: 1172
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.06.09 16:15. Заголовок: Не можете проверить,..
Не можете проверить, правильно ли работают функции AdsPrepareSQL AdsVerifySql содержащие строковые константы с русскими симолами ? Если нет, в этих функциях надо сделать подобную замену Вызов hb_adsOemToAnsi добавлялся, так как ace делает неявную перекодировку строк ansi -> oem, полагая, что получает строки в кодировке ansi, что не так Получается в этих функциях по крайней мере ace 8 такую перекодировку не выполняет, значит, вызов hb_adsOemToAnsi не нужен
|
|
|
Ответов - 294
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|