Форум » LetoDB, HbNetio. » Leto DB Server (продолжение 9) » Ответить

Leto DB Server (продолжение 9)

Dima: Продолжаем тут

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

Pasha: А что за ошибки при сборке ? Я собирал без проблем letodb-64 с Harbour 3.0/3.2dev и mingw64 tdm 4.6 А смысл есть, если на сервере стоит 64-битная ОС.

sashaBG: Mingw64 у меня был какойто неправильный . Заметил что hbmak2 ищет x86_64-w64-mingw32-ar.exe а в папке bin есть ar.exe Взял и копираовал ar.exe в x86_64-w64-mingw32-ar.exe И все заработало :)

alkresin: Я начал понемножку просматривать код letodb, сравнивая его со своей рабочей версией ( от 20.08.2010 ). Вот такой вопрос: почему теперь leto_disconnect() закрывает не текущее соединение, что было бы логично, а первое соединение из letoConnPool ?


alkresin: А... теперь увидел. 1 - это номер параметра, передаваемого функции. А зачем так запутанно - то ?

Pasha: По умолчанию, без параметра (или как раньше) закрывается текущее соединение. А при наличии параметра можно закрыть любое соединение по его номеру.

alkresin: Это я уже понял. Просто было бы лучше, понятнее, если бы в leto_getConnection() передавался не номер параметра, а сам параметр hb_param( n, HB_IT_ANY ). Мелочь, но ...

alkresin: Продолжаю разбираться с leto1.c. В функции letoSetFilter() раньше строка фильтра конвертировалась в codepage базы данных - в случае, если эта codepage отличалась от codepage клиентского приложения. Теперь эта конвертация где-то в другом месте делается ?

alkresin: И еще, в letoOpen(): if( pOpenInfo->abName[0] != '+' && pOpenInfo->abName[0] != '-' ) Это для чего ?

Pasha: alkresin пишет: В функции letoSetFilter() раньше строка фильтра конвертировалась в codepage базы данных - в случае, если эта codepage отличалась от codepage клиентского приложения. Теперь эта конвертация где-то в другом месте делается ? Эта конвертация и раньше была не нужна, я ее пару лет назад убрал. Пусть таблица открыта в cp866, а кодировка программы - cp1251 Клиент передает на сервер строку фильтра в cp1251. Поскольку таблица на сервере открыта в cp866, при выполнении выражения фильтра: а именно - чтении полей таблицы методом GetValue данные будут конвертированы из cp866 в cp1251, которую установит функция leto_SetUserEnv, и сравнение строк будет выполняться cp1251 с cp1251

Pasha: alkresin пишет: И еще, в letoOpen(): if( pOpenInfo->abName[0] != '+' && pOpenInfo->abName[0] != '-' ) Это для чего ? Это для пакетного открытия нескольких таблиц одним запросом к серверу. Пример использования см. в tests\letoudf.prg, функция UDF_OpenTables

alkresin: Эта конвертация и раньше была не нужна, я ее пару лет назад убрал. Действительно. Еще вопрос: для чего эта структура в LETOCONNECTION - pCdpTable, она , похоже, нигде не инициализируется, и функция leto_GetServerCdp() просто возвращает код, который получает в качестве параметра ?

Pasha: Она инициализируется в функции LETO_ADDCDPTRANSLATE, используется для тех случаев, когда одна и та же кодовая страница на клиенте и на сервере называется по разному: к примеру, RU1251 и RUWIN. Из-за многочисленных переименований кодовых страниц в разных версиях Harbour и xHarbour такое может произойти.

Pasha: Александр, посмотрите пожалуйста manage.exe, собранный по windows: Harbout git + mingw tdm 4.6.1, hwgui и manage.prg последние сырцы с SVN и CVS http://files.mail.ru/327FCEB4B20541EC90551C0BC65D8F95 Ненормально работает combobox для адреса сервера: не показывает список Items Только из-за этого я не выкладываю сборку letodb на sourceforge, сам не могу понять причину.

alkresin: Pasha пишет: Ненормально работает combobox для адреса сервера: не показывает список Items Исправил.

alkresin: Павел, напомните мне, пожалуйста, предназначение RDD методов drop, exists и rename.

alkresin: Разобрался, вопрос снят.

alkresin: Я сделал кое-какие изменения в клиентской части letodb, они касаются только работы с сервером старой версии - теперь клиент определяет, с чем он имеет дело и использует соответствующий протокол. Наверное, это надо только мне - теперь я могу спокойно, постепенно обновить часть своих серверов letodb ( до текущей версии ) и оценить все последствия. Изменения в серверной части касаются только вызовов leto_writelog() - я изменил ее, теперь не надо предварительно формировать буфер для вывода, можно вывести текущие переменные одним вызовом функции.

Pasha: Все собрал, запустил - вроде бы полет нормальный. Увидел одно изменение на клиенте: в leto_ParseRec после if( pArea->area.fEof ) { leto_SetBlankRecord( pArea, FALSE ); раньше стоял возврат, сейчас его нет. Но это и правильно, чтобы считался reccount Еще я не понял, зачем в leto_gotoEof стоит вызов SELF_RECCOUNT ? Еще один ньюанс: раньше в leto_writelog можно было передать длину строки, и выдавать в лог бинарные данные. Сейчас этого нет. Может быть, стоит вернуть ? И наверное, стоит изменить версию.

alkresin: Pasha пишет: if( pArea->area.fEof ) { leto_SetBlankRecord( pArea, FALSE ); раньше стоял возврат, сейчас его нет. Но это и правильно, чтобы считался reccount Мне показалось, что так будет безопаснее. Еще я не понял, зачем в leto_gotoEof стоит вызов SELF_RECCOUNT ? Старая версия сервера ( а этот вызов именно для нее ) не передает в каждом пакете записей ulRecCount, клиент его получает только в результате вызова SELF_RECCOUNT, а в leto_gotoEof он требуется. Еще один ньюанс: раньше в leto_writelog можно было передать длину строки, и выдавать в лог бинарные данные. Сейчас этого нет. Может быть, стоит вернуть ? Да, стоит - вторым параметром, наверное. Сделаю. И наверное, стоит изменить версию. Не уверен. Протокол не изменился, сервер тот же, новые функции не добавились.

alkresin: Думаю, можно убрать уже все эти HARBOUR_VER_AFTER_101, HARBOUR_VER_BEFORE_100 - Harbour ниже 2.0 вряд ли кто использует.



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