Автор | Сообщение |
|
| |
Пост N: 907
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 11:56. Заголовок: ADS Remote , как подключится ?
Имеем 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
[только новые]
|
|
|
| Администратор
|
Пост N: 979
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 12:27. Заголовок: попробуй rddsetdefau..
попробуй rddsetdefault("ADSCDX")
|
|
|
|
| |
Пост N: 908
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 12:45. Заголовок: Pasha пишет: попроб..
Pasha пишет: цитата: | попробуй rddsetdefault("ADSCDX") |
| Результат тот же Возможно это в принципе не должно работать ? Ведь клиентская часть ads 8.0 а на серваке ADS 5.6..........
|
|
|
|
| Администратор
|
Пост N: 980
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 12:52. Заголовок: Я на версии не обрат..
Я на версии не обратил внимание Может и не будет работать, 5.6 все-таки очень старая версия Но можно ведь собрать rddads со старой ace
|
|
|
|
| |
Пост N: 909
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 12:55. Заголовок: Pasha пишет: Но мож..
Pasha пишет: цитата: | Но можно ведь собрать rddads со старой ace |
| у меня нет ее к сожалению :((((( где взять ? там ведь нужны будут и соответсвующие dll
|
|
|
|
| Администратор
|
Пост N: 981
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 13:28. Заголовок: Покопался в закромах..
Покопался в закромах... нашел ace55 Куда отправить ?
|
|
|
|
| Администратор
|
Пост N: 982
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 13:37. Заголовок: Ушло Возможно, при с..
Ушло Возможно, при сборке программы с rddads.lib и ace32.lib будут нереализованные ссылки на функции в более поздних версиях ace Из rddads надо будет просто убрать лишние функции, и пересобрать rddads
|
|
|
|
| |
Пост N: 911
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 13:42. Заголовок: Спасибо получил !!! ..
Спасибо получил !!! Вот только ace.h там нет.
|
|
|
|
| Администратор
|
Пост N: 983
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 13:52. Заголовок: Нашел ace.h в каком-..
Нашел ace.h в каком-то архиве харбора за 2002-й год Отправил
|
|
|
|
| |
Пост N: 912
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 13:58. Заголовок: Спасибо !!!!!!!!!!!!..
Спасибо !!!!!!!!!!!!!!!!!!!!! Потом отпишусь как все получилось !
|
|
|
|
| |
Пост N: 913
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 14:23. Заголовок: Все супер !!! ;) Одн..
Все супер !!! ;) Одна не задача. Таблица в OEM и все что по русски кажет крякозяблы. Эта штука не сработала AdsSetCharType(2, .T.)
|
|
|
|
| Администратор
|
Пост N: 984
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 16:12. Заголовок: Тут вот такое дело Е..
Тут вот такое дело Если таблица хранится в 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(), ее нет ?
|
|
|
|
|
| Администратор
|
Пост N: 985
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 16:26. Заголовок: Впрочем, есть еще ва..
Впрочем, есть еще вариант Вместо вызова функций AdsGetFieldRaw вызывать AdsGetField, и затем перекодировку ansi->Oem. Вместо вызова AdsSetFieldRaw - перекодировку oem->ansi, и затем вызов AdsSetString Побочный эффект: если в строковых полях хранятся двоичные данные, в результате двойной перекодировки oem->ansi->oem они могут быть покоцаны
|
|
|
|
| |
Пост N: 914
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 18:04. Заголовок: Pasha Чудеса конечн..
Pasha Чудеса конечно.......но поставив SET CHARTYPE TO ANSI , все встало на свом места. Но есть подозрения......... Как убедится что ads собрался верно с учетом изменений ? Удалил все rddads.lib б ads32.lib , все obj которые касаются ads , вернул назад исходники ads и запустил ads на сборку , странно но ни одной ошибки не возникло. При сборке приложения тоже нет ошибок а ведь были........
|
|
|
|
| Администратор
|
Пост N: 986
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.09.08 20:33. Заголовок: Так rddads собрался ..
Так rddads собрался без всяких правок в сырцах со старым ace.h ? И при линковке нет unresolved external ? Dima пишет: цитата: | Чудеса конечно.......но поставив SET CHARTYPE TO ANSI , все встало на свом места. |
| Внешне все нормально, но это только внешне. Ace считает, что БД в кодировке Ansi, клиенту (rddads) надо дать данные в ansi, и перекодировка не выполняется. А поскольку БД в кодировке oem, клиент ее и получает без перекодировки в oem. Но ! Upper/lower ads выполняет по правилам ansi-cp1251, поскольку ему сказали, что БД в этой кодировке
|
|
|
|
| |
Пост N: 33
Зарегистрирован: 19.12.06
|
|
Отправлено: 30.09.08 22:08. Заголовок: а почему бы не испол..
а почему бы не использовать более свежую версию адс -7.0 например. Я ее в осле нашел - прекрасно работает, использую для тестов, правда у меня новель 5.
|
|
|
|
| |
Пост N: 915
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.09.08 23:42. Заголовок: Pasha пишет: И при ..
Pasha пишет: цитата: | И при линковке нет unresolved external ? |
| Вообщем все убил и сделал снова (ни чего не удаляя из сырцов) Просто в сырцах в нужных местах добавил #define ADS_LIB_VERSION 500 А вот с кодировкой точно лажа особенно в индексах. Пока оставил так AdsSetCharType(1, .T.) Завтра буду еще чекать. База открывается быстро как в Clipper ;) PS Одно не ясно , как же раньше на заре появления ads 5.5 юзали базы в кодировке OEM ?
|
|
|
|
| |
Пост N: 916
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.10.08 07:37. Заголовок: Есть у кого то ADS ..
Есть у кого то ADS версии старше чем 5.7 который можно пролечить для netware 4.11 ?
|
|
|
|
| |
Пост N: 917
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.10.08 07:48. Заголовок: Pasha пишет: Чтобы ..
Pasha пишет: цитата: | Чтобы ace не перекодировал данные oem->ansi, можно указать ему CharType ADS_ANSI |
| Подробнее можно , где конкретно править ?
|
|
|
|
| Администратор
|
Пост N: 988
Зарегистрирован: 23.05.05
|
|
Отправлено: 01.10.08 08:29. Заголовок: Dima пишет: Подробн..
Dima пишет: цитата: | Подробнее можно , где конкретно править ? |
| Указать CharType ADS_ANSI - это и есть AdsSetCharType(1) А 2-й параметр в AdsSetCharType не отрабатыватся, т.к. нет функций AdsGetFieldRaw Дима, ты хранишь в символьных полях двоичные данные ? Если нет, подойдет 2-й способ с двойной перекодировкой. Напиши, если не хранишь, и тогда я добавлю в rddads эти фрагменты для старой версии ace
|
|
|
|
| |
Пост N: 918
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.10.08 08:31. Заголовок: Pasha пишет: Дима, ..
Pasha пишет: цитата: | Дима, ты хранишь в символьных полях двоичные данные ? Если нет, подойдет 2-й способ с двойной перекодировкой |
| Нет двоичные данные не храню ! Счас пробну 2-й способ , спасибо !
|
|
|
Ответов - 46
, стр:
1
2
3
All
[только новые]
|
|