Форум » 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 ?

SergKis: Pasha пишет:А зачем может понадобиться несколько служб LetoDB ? Службами разделены клиенты (их базы) по требованиям безопасности.

Andrey: SergKis пишет: Службами разделены клиенты (их базы) по требованиям безопасности. Вообще то это было бы интересней - несколько служб LetoDB. И сколько ресурсов (в среднем) будет "отъедать" одна служба LetoDB на сервере ?


SergKis: Pasha Возможна ли работа LetoDb клиента в потоках ?

Dima: SergKis пишет: Возможна ли работа LetoDb клиента в потоках ? Сам чекани. Из своих наблюдений: 1. Объект EXCEL создать в отдельном потоке не возможно. 2. Пробовал в ADS юзать одни и те же базы в разных потоках одновременно , падает. Если в порядке очереди все нормально.

Pasha: Наверное, нельзя. Сейчас у клиента rdd leto имеются статические данные, и в результате клиент не сможет работать в разных потоках. Эту проблему, положим, решить довольно легко. Но сам сервер для обслуживания клиента создает отдельный поток, и, если запросы с клиента будут поступать с нескольких потоков этого клиента, сервер не сможет их обслужить.

SergKis: Pasha пишет:Наверное, нельзя Сегодня у нас есть CDX в потоках+Leto сервер (старая версия) с Share_Tables = 1. Сейчас пробуем переползти на последнюю версию Leto и хотелось бы отказаться от CDX в потоках. Эту проблему, положим, решить довольно легко это было бы здорово , особенно, если коннект один (общий), а работа с таблицами в потоках.

SergKis: Dima с EXCEL и OpenOffis работаем через: http://www.libxl.com/

nbatocanin: Здравствуйте, Mне нужно, чтобы отфильтровать таблицу ARTIKLI по содержанию другой таблице (MAGKOL). Таблица MAGKOL содержать информацию о количестве каждого элемента на складах. Я хочу показать только элементы которые существуют на складе. Я знаю, что LETODB не поддерживается SET RELATION отношении в SET FILTER. Что бы Вы посоветовали? Ненад

Dima: разве что выкинуть все во временную базу и ее показать (вариант видится не один) PS Не очень корректно видимо изначально спроектирована сама база.

nbatocanin: У меня есть следующие таблицы: [pre2]ARTIKLI: a_id a_name ------ ------------- 1 Milk 2 Cookie 3 Chocolate MAGACIN: m_id m_name ------ -------------- 1 Magacin 1 X 2 Magacin 2 X 3 Magacin 3 MAGKOL mk_mag mk_art mk_kol ------- -------- -------- 1 1 10 1 2 0 1 3 0 2 1 5 2 2 0 2 3 12 3 1 100 3 2 100 3 3 100[/pre2] Например, первая запись в magkol означает склад ID = 1 имеет 10 штук молока. Пользователь выбирает несколько складов (скажем, 1 и 2). Я хочу все элементы в склад, который имеет 1 или 2: [pre2]TBrowse: Name Quant. ----------- ------ Chocolate 12 (= 0 + 12) Cookie 0 (= 0 + 0) Milk 15 (= 10 + 5)[/pre2] В этом случае, не нада показывать вторую строку (=0). Теперь у меня есть функция, которая вычисляет сумму в выбранный и я пишу: [pre2]SELECT Artikli SET FILTER TO CalcMagKol() <> 0 [/pre2] Я надеюсь, что это теперь яснее. Привет, NB

Pasha: Сейчас средствами стандартного серверного фильтра этого сделать нельзя. Посмотрите в сторону функции UDF_getFields, которая находится в модуле letoudf.hrb Она фильтр не установит, но с ее помощью можно вернуть массив с данными обеих таблиц. Массив формируется одним запросом к серверу.

nbatocanin: Я не могу найти эту функцию? Где она точно находится? Спасибо, Ненад

sashaBG: находится в test\letoudf.prg строка 304 Класная функция . Возмещает отсутствия SQL запросов . Спасибо Паша !

Pasha: см. tests/letoudf.prg Этот модуль надо скомпилировать командой harbour letoudf.prg -gh -n -w -i\harbour\include и поместить letoudf.hrb в папку, в которой расположен letodb.exe

nbatocanin: Спасибо!

nbatocanin: Я хочу сделать сервер функцию которая изменяет DBF: клиент: USE test Leto_UDF ("Udf_Test") сервер: FUNCTION Udf_Test (nUserStru) cTest := leto_Alias (nUserStru, "Test") // cTest = NIL?? ... Почему это не работает?

Pasha: Проверил - работает. С такими поправками: Пусть cPath - строка коннекта к серверу, f.e.: cPath:="//127.0.0.1:2812/" 1. Надо или выдать: if (nConnect:=leto_connect(cPath))<>-1 или при вызове udf-функции напрямую указывать параметры сервера: ? leto_udf(cPath + 'UDF_Test') 2. Открывать файл с параметрами коннекта: use (cPath + 'test') В целом, такой пример получается рабочим: if (nConnect:=leto_connect(cPath))<>-1 use (cPath + 'test') ? leto_udf('UDF_Test') wait endif

nbatocanin: Вот то, что я делаю: добавил следующее в конце server.prg: FUNCTION Udf_ArtKol (nUserStru) LOCAL cLetoArt cLetoArt := leto_Alias (nUserStru, "Artikli") RETURN cLetoArt Тогда я произвел LetoDB (hbmk2 letodbc.hbp). Затем я активировал тестовую программу: REQUEST LETO PROC Main RddSetDefault ("LETO") cPath := "//192.168.99.1:2807/LetoDB/" USE (cPath + "Artikli") ALIAS Artikli NEW DbSetIndex (cPath + "Art_ID") x := Leto_UDFExist("//192.168.99.1:2807/Udf_ArtKol") y := Leto_UDF ("//192.168.99.1:2807/Udf_ArtKol") ? "ret=", x, y Inkey(0) CLOSE Artikli RETURN Программа возвращается "ret=.T. NIL", а в letodb.log пишет: 12/04/14 04:07:07: Leto DB Server has been started. Leto DB Server v.2.14 ! INIT: DataPath=d:\test, ShareTables=0, MaxUsers=500, Max Tables=5000, CacheRecords=500 DEBUG! new connect 192.168.99.10 (0 : 1 : 1) leto_errInternal!!!!!!!!!!!!!!!!!!

sashaBG: 1. Функцию Udf_ArtKol (nUserStru) надо добавить в tests\letoudf.prg 2. Откомпилировать kоманндой harbour /gh letoudf.prg 3. Полученый фаил letoudf.hrb поставить в папку где у тебя лежит letodb.exe 4. При старте letodb загрузит letoudf.hrb ( етого можно увидить в логе) 5. Възов UDF функции должен осуществлятся только через имя функции : x := Leto_UDFExist("Udf_ArtKol") y := Leto_UDF ("Udf_ArtKol") если есть параметры вот так : Leto_UDF ("Udf_ArtKol", Param1, Param2)



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