Форум » [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-й способ , спасибо !



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