Форум » [x]Harbour » ADS Remote , как подключится ? » Ответить

ADS Remote , как подключится ?

Dima: Имеем Novell Netware 4.11 (IPX) на нем работает ADS 5.6 Имеем свеже собранные библиотеки ADS 8.0 Как подключится к базам посредством ADS ? #include "ads.ch" #include "ord.ch" #include "set.ch" PROCEDURE Main REQUEST ADS AdsSetServerType(2) rddRegister("ADS",1) rddsetdefault("ADS") AdsRightsCheck(.F.) AdsSetFileType(ADS_CDX) hb_SetCodepage("RU866") REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") AdsSetCharType(2, .T.) use o:\sklad\dbf\nomen index o:\sklad\dbf\nomen3 shared new // просто зависает прога close all return

Ответов - 46, стр: 1 2 3 All

Pasha: попробуй rddsetdefault("ADSCDX")

Dima: Pasha пишет: попробуй rddsetdefault("ADSCDX") Результат тот же Возможно это в принципе не должно работать ? Ведь клиентская часть ads 8.0 а на серваке ADS 5.6..........

Pasha: Я на версии не обратил внимание Может и не будет работать, 5.6 все-таки очень старая версия Но можно ведь собрать rddads со старой ace


Dima: Pasha пишет: Но можно ведь собрать rddads со старой ace у меня нет ее к сожалению :((((( где взять ? там ведь нужны будут и соответсвующие dll

Pasha: Покопался в закромах... нашел ace55 Куда отправить ?

Pasha: Ушло Возможно, при сборке программы с rddads.lib и ace32.lib будут нереализованные ссылки на функции в более поздних версиях ace Из rddads надо будет просто убрать лишние функции, и пересобрать rddads

Dima: Спасибо получил !!! Вот только ace.h там нет.

Pasha: Нашел ace.h в каком-то архиве харбора за 2002-й год Отправил

Dima: Спасибо !!!!!!!!!!!!!!!!!!!!! Потом отпишусь как все получилось !

Dima: Все супер !!! ;) Одна не задача. Таблица в OEM и все что по русски кажет крякозяблы. Эта штука не сработала AdsSetCharType(2, .T.)

Pasha: Тут вот такое дело Если таблица хранится в OEM, и указан CharType ADS_OEM, ace32 считает, что поскольку клиент - gui-приложение, и автоматически перекодирует данные в ANSI. На 32-разрядных консольных клиентов ace не расчитан. Поэтому используется такой фокус: данные считываются функцией AdsGetFieldRaw, которая данные не перекодирует, и клиент получает в нужной кодировке (OEM). Но в Ace 5.5 функции AdsGetFieldRaw еще нет ! Тебе наверное пришлось прибить ее вызов в rddads Чтобы ace не перекодировал данные oem->ansi, можно указать ему CharType ADS_ANSI. При этом, поскольку исходнае и результирующая кодировка одинаковые, перекодировки не будет, и, так как данные в кодировке oem, клиент их и получит в oem Побочный неприятный эффект - неправильная работа Upper/Lower на сервере: в индексных выражениях и серверных фильтрах Поэтому, выход - использовать более свежую версию ads Проверь функцию AdsGetFieldRaw(), ее нет ?

Pasha: Впрочем, есть еще вариант Вместо вызова функций AdsGetFieldRaw вызывать AdsGetField, и затем перекодировку ansi->Oem. Вместо вызова AdsSetFieldRaw - перекодировку oem->ansi, и затем вызов AdsSetString Побочный эффект: если в строковых полях хранятся двоичные данные, в результате двойной перекодировки oem->ansi->oem они могут быть покоцаны

Dima: Pasha Чудеса конечно.......но поставив SET CHARTYPE TO ANSI , все встало на свом места. Но есть подозрения......... Как убедится что ads собрался верно с учетом изменений ? Удалил все rddads.lib б ads32.lib , все obj которые касаются ads , вернул назад исходники ads и запустил ads на сборку , странно но ни одной ошибки не возникло. При сборке приложения тоже нет ошибок а ведь были........

Pasha: Так rddads собрался без всяких правок в сырцах со старым ace.h ? И при линковке нет unresolved external ? Dima пишет: Чудеса конечно.......но поставив SET CHARTYPE TO ANSI , все встало на свом места. Внешне все нормально, но это только внешне. Ace считает, что БД в кодировке Ansi, клиенту (rddads) надо дать данные в ansi, и перекодировка не выполняется. А поскольку БД в кодировке oem, клиент ее и получает без перекодировки в oem. Но ! Upper/lower ads выполняет по правилам ansi-cp1251, поскольку ему сказали, что БД в этой кодировке

k_dima: а почему бы не использовать более свежую версию адс -7.0 например. Я ее в осле нашел - прекрасно работает, использую для тестов, правда у меня новель 5.

Dima: Pasha пишет: И при линковке нет unresolved external ? Вообщем все убил и сделал снова (ни чего не удаляя из сырцов) Просто в сырцах в нужных местах добавил #define ADS_LIB_VERSION 500 А вот с кодировкой точно лажа особенно в индексах. Пока оставил так AdsSetCharType(1, .T.) Завтра буду еще чекать. База открывается быстро как в Clipper ;) PS Одно не ясно , как же раньше на заре появления ads 5.5 юзали базы в кодировке OEM ?

Dima: Есть у кого то ADS версии старше чем 5.7 который можно пролечить для netware 4.11 ?

Dima: Pasha пишет: Чтобы ace не перекодировал данные oem->ansi, можно указать ему CharType ADS_ANSI Подробнее можно , где конкретно править ?

Pasha: Dima пишет: Подробнее можно , где конкретно править ? Указать CharType ADS_ANSI - это и есть AdsSetCharType(1) А 2-й параметр в AdsSetCharType не отрабатыватся, т.к. нет функций AdsGetFieldRaw Дима, ты хранишь в символьных полях двоичные данные ? Если нет, подойдет 2-й способ с двойной перекодировкой. Напиши, если не хранишь, и тогда я добавлю в rddads эти фрагменты для старой версии ace

Dima: Pasha пишет: Дима, ты хранишь в символьных полях двоичные данные ? Если нет, подойдет 2-й способ с двойной перекодировкой Нет двоичные данные не храню ! Счас пробну 2-й способ , спасибо !

Dima: Открываю таблицу с индексом по символьному полю в котором есть кирилица (уже существующая база созданная Clipper + ADS 5.6 netware 4.11) Ставлю AdsSetCharType(2) Сортирует нормально и браузер ездит нормально НО крякозяблы Ставлю AdsSetCharType(1) Появилась кирилица , но езда по браузеру не корректна Замкнутый круг , блин :(

Pasha: Dima пишет: Одно не ясно , как же раньше на заре появления ads 5.5 юзали базы в кодировке OEM ? Во времена ads 5.5 были только gui-клиенты ads. Проблема возникла с появлением Alaska xBase++, тогда и добавили эти функции в ads И в харборе вопрос решался таким же способом, как в xBase Дима, для в-го способа я поправлю adsfunc.c, и вышлю тебе Ты берешь xHb с CVS ?

Dima: Pasha пишет: Ты берешь xHb с CVS ? Думаю да , хотя вчера в 12 ночи CVS запросил пароль , ну как сейчас пробну.

Dima: О сейчас работает ;) Хотя быстрее будет adsfunc.c выслать на пойту или указать тут что и где правильно править. Спасибо !!!!!

Pasha: Лучше пришли мне свои сырцы rddads, у меня не последние, и я в них сделаю правки

Dima: Кстати в 4 файлах я добавлял строку #define ADS_LIB_VERSION 500 ads1.c adsfunc.c adsmgmnt.c adsexternal.ch

Dima: Pasha пишет: Лучше пришли мне свои сырцы rddads Выслал !

Pasha: Сделал Дима, пробуй AdsSetCharType(2, .t.)

Dima: Pasha пишет: Сделал Дима, пробуй AdsSetCharType(2, .t.) Сделал , крякозяблы :( ps ads пересобрал

Pasha: поправил, попробуй теперь

Dima: Pasha пишет: поправил, попробуй теперь Вот теперь в ДЕСЯТКУ !!!!!!!!!! СПАСИБО !!!!!! Подводные камни могут быть ?

Pasha: Только если в поле хранятся двоичные данные, и перекодировка oem->ansi->oem даст значение, отличное от исходного Проверь еще scope, filter Должно работать

Dima: Проверил пока что dbseek , не пашет однако.

Pasha: scope, filter с русскими строковыми константами

Pasha: Dima пишет: Проверил пока что dbseek , не пашет однако. Ага, значит и тип ADS_RAWKEY не поддерживается Надо еще перекодировать ключ для Seek Сделаю

Dima: Pasha пишет: scope, filter с русскими строковыми константами у меня исключены такие фильтры , все на English.

Dima: Проверил фильтр. Работает.

Dima: Проверил изменения по seek , работает. Ответ в мыле. Спасибо за отличную и нужную работу !!!!!!!!

Dima: Pasha Режим Multi Thread + ADS , собираем и получаем ошибку Unresolved External _hb_stackST Как лечить ?

Pasha: rddads.lib собирается в st режиме для сборки в режиме mt надо в rdd_ads\makefile.bc заменить строку bcc32 $(CLIBFLAGS) $(C_USR) $(CFLAGS) -c -O2 -DWIN32 -I$(INCLUDE_DIR) -o$@ $** на bcc32 $(CLIBFLAGS) $(C_USR) $(CFLAGS) -tWM -DHB_THREAD_SUPPORT -c -O2 -DWIN32 -I$(INCLUDE_DIR) -o$@ $**

Dima: Пересобрал , результат тот же....

Pasha: Скорее всего, кроме rddads.lib, в сборке есть еще какая-то ST-библиотека. Откуда идет ссылка на _hb_stackST ?

Dima: RDDADS.LIB|ADSFUNC

Dima: Pasha пишет: rddads.lib собирается в st режиме для сборки в режиме mt надо в rdd_ads\makefile.bc заменить строку bcc32 $(CLIBFLAGS) $(C_USR) $(CFLAGS) -c -O2 -DWIN32 -I$(INCLUDE_DIR) -o$@ $** на bcc32 $(CLIBFLAGS) $(C_USR) $(CFLAGS) -tWM -DHB_THREAD_SUPPORT -c -O2 -DWIN32 -I$(INCLUDE_DIR) -o$@ $** ты пробовал собрать так и затем собрать какое то приложение под ADS ?

Pasha: Непонятно. В adsfunc нет ссылки на hb_stack. Если посмотреть adsfunc.obj, тоже не видно hb_stackST/MT. Т.е., rddads.lib должна работать как с mt, так и с st сборкой, указывать флаги tWM -DHB_THREAD_SUPPORT необязательно ты пробовал собрать так и затем собрать какое то приложение под ADS ? У меня сборка идет немного по-другому, но все собирается и работает Я собираю harbour.dll в mt режиме, и отдельно hbads.dll без указания флагов mt-сборки. Если бы была ссылка на hb_stackST, ничего бы не собралось Дима, поищи ссылку на hb_stackST в obj-файлах, она ведь где-то есть, раз сборка не получается

Dima: Pasha Почему бы не сделать сборку всех библиотек более цивилизованно как в обычном так и в mt режиме. Ведь часть библиотек создается как в обычном режиме так и mt на автомате.



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