Форум » LetoDB, HbNetio. » Вопросы новичка... » Ответить

Вопросы новичка...

Andrey: Взял последнюю версию с "Новая страница с бинарниками", установил на Win2008 Server, чуток помучился с портом... Собрал на МиниГуи+BCC 551 - \MiniGui\batch\hbmk2.bat rddleto.hbp Получил rddleto.lib - 131072 байт - правильный ли размер ? И еще Warning-и лезут: lib\.hbmk\win\bcc\rddsys.c: source\client\letocl.c: source\client\leto1.c: source\client\letomgmn.c: source\common\blowfish.c: source\common\common_c.c: source\common\hbip.c: TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation /P32 lib\rddleto.lib -+ lib\.hbmk\win\bcc\rddsys.obj -+ lib\.hbmk\win\bcc\letocl.obj -+ lib\.hbmk\win\bcc\leto1.obj -+ lib\.hbmk\win\bcc\letomgmn.obj -+ lib\.hbmk\win\bcc\blowfish.obj -+ lib\.hbmk\win\bcc\common_c.obj -+ lib\.hbmk\win\bcc\hbip.objWarning: 'rddsys' not found in library Warning: 'letocl' not found in library Warning: 'leto1' not found in library Warning: 'letomgmn' not found in library Warning: 'blowfish' not found in library Warning: 'common_c' not found in library Warning: 'hbip' not found in library Так должно быть или нет ? Вопрос сразу напрашивается с путями - как писать правильно "\" или "/" : Local cPathServer := "//127.0.0.1:2812/" cPathServer := cPathServer +"DATE_TEST_PATH\test.dbf" Помню что где то обсуждали, а результат не запомнил...

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

Andrey: Спасибо БОЛЬШОЕ всем за разъяснения !

Pasha: В скрипте rddleto.hbp надо сделать некоторые изменения: Строки # static lib -hblib # shared lib, dll or so #-hbdynvm #-shared Заменить на # static lib #-hblib # shared lib, dll or so -hbdynvm -shared Возможно, изменить имя библиотеки, это команда -olib/${hb_plat}/${hb_comp}/rddleto Для использования dll в программе надо при сборке указать соответствующую lib

Andrey: Pasha, СПАСИБО ! Меня отговорили от dll-ки !

nbatocanin: Попробуем Leto_CliendID(). Это функция в letoudf.hrb: FUNCTION Test LOCAL nUserStru := leto_ClientID() RETURN nUserStru При запуске сервера, получаем: Leto DB Server v.2.17b1 ! INIT: DataPath=d:\base, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=50 05/07/16 15:48:16: Error BASE/6101 Unknown or unregistered symbol: LETO_CLIENTID ERROR! SETHRBERROR - pUStru not found!!!!!!!!!!!!!!!!!!!! Почему?

nbatocanin: Как использовать функцию LetoOrdCreate? Я написал в клиенте это: Leto_UDF("LetoOrdCreate", "IN001", "Upper(a_naziv)") Но сервер выдает сообщение об ошибке: Error DBFNTX/1003 Open error: d:\base\xapp\36\in001.ntx

Pasha: nbatocanin пишет: Попробуем Leto_CliendID(). Это функция в letoudf.hrb: FUNCTION Test LOCAL nUserStru := leto_ClientID() RETURN nUserStru При запуске сервера, получаем: Leto DB Server v.2.17b1 ! INIT: DataPath=d:\base, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=50 05/07/16 15:48:16: Error BASE/6101 Unknown or unregistered symbol: LETO_CLIENTID ERROR! SETHRBERROR - pUStru not found!!!!!!!!!!!!!!!!!!!! Почему? Я добавил request для этой функции. Попробуйте сейчас.

Pasha: nbatocanin пишет: Как использовать функцию LetoOrdCreate? Я написал в клиенте это: Leto_UDF("LetoOrdCreate", "IN001", "Upper(a_naziv)") Но сервер выдает сообщение об ошибке: Error DBFNTX/1003 Open error: d:\base\xapp\36\in001.ntx Эта функция предназначена для вызова на сервере. С клиента используйте стандартную команду INDEX ON / функцию ordCreate

nbatocanin: Эта функция предназначена для вызова на сервере. С клиента используйте стандартную команду INDEX ON / функцию ordCreate Надо изменить readme.txt: 9. Server-side functions These functions can be run from the client by function leto_udf, and also from the functions defined in a file letoudf.hrb. Сделал функцию в letoudf.hrb: [pre2]FUNCTION Udf_ParSort (nUserStru, cExp) LOCAL cLetoPar, cFile cFile := "002" cLetoPar := Leto_Alias (nUserStru, "Partneri") SELECT (cLetoPar) LetoOrdCreate (nUserStru, cFile, cExp) LetoOrdListAdd (nUserStru, cFile) RETURN cFile[/pre2] Но функция не работает, сервер регистрирует ошибку: Error DBFNTX/1003 Open error: d:\base\xapp\36\002.ntx

nbatocanin: Я добавил request для этой функции. Попробуйте сейчас. работает, спасибо!

Pasha: nbatocanin пишет: Сделал функцию в letoudf.hrb: FUNCTION Udf_ParSort (nUserStru, cExp) LOCAL cLetoPar, cFile cFile := "002" cLetoPar := Leto_Alias (nUserStru, "Partneri") SELECT (cLetoPar) LetoOrdCreate (nUserStru, cFile, cExp) LetoOrdListAdd (nUserStru, cFile) RETURN cFile Но функция не работает, сервер регистрирует ошибку: Error DBFNTX/1003 Open error: d:\base\xapp\36\002.ntx Попробуйте после сегодняшнего обновления

nbatocanin: Сейчас функция LetoOrdCreate работает (должен быть написать дополнительный параметр cTag): LetoOrdCreate (nUserStru, cFile, cExp, cTag) Но как я могу использовать этот индекс? LetoOrdListAdd не активирует этот индекс. Я попробовал OrdSetFocus, SET INDEX... безуспешно.

Pasha: letoOrdListAdd активирует (формирует соответствующие структуры данных) этот индекс на сервере, но клиент об этом ничего не знает. Чтобы активировать его и на клиенте, изменить функцию letoOrdListAdd, чтобы она передавала информацию об открытом индексе клиенту, и сделать на клиенте обработку этой информации. Это требует небольшой доработки letodb. Можно обойтись и без такой схемы, просто создавая и открывая индекс стандартными средствами rdd с клиента до вызова udf-функции. Кстати, почему вы выбрали такую схему создания индекса в udf-функции, а не непосредственно с клиента ?

nbatocanin: У меня есть таблица (tbrowse) с колоннами: A: p_id B: p_naziv C: SumPar(p_id) Функция SumPar(p_id) для каждого p_id: [pre2]FUNC SumPar (p_id) SELECT Table2 s := 0 SEEK p_id WHILE p_id == s_doc s += s_val SKIP END DO SELECT Partner RETURN s [/pre2] Я хочу, чтобы отсортировать столбец C. Когда не используется LetoDB может написать: cExp := "SumPar(p_id)" INDEX ON &cExp TO (cTmp) Но с LetoDB, это невозможно.

Andrey: nbatocanin пишет: Но с LetoDB, это невозможно. Возможно ! Нужно добавить функцию "SumPar(p_id)" в LetoDB и пересобрать сервер, т.е. эта функция будет уже на сервере. Или сделать отдельную функцию UDF.

Pasha: nbatocanin пишет: У меня есть таблица (tbrowse) с колоннами: ... Такую задачу можно решить самыми стандартными средствами, не задействуя механизм udf Надо создать постоянный индекс для table2 по полю s_doc В качестве 3-й колонки для tbrowse использовать выражение: table2->(leto_Sum('s_val',, table1->p_id))

nbatocanin: Такую задачу можно решить самыми стандартными средствами, не задействуя механизм udf Надо создать постоянный индекс для table2 по полю s_doc В качестве 3-й колонки для tbrowse использовать выражение: table2->(leto_Sum('s_val',, table1->p_id)) Можно ли сортировать (INDEX ON) по данной колонке? Мне нужно индексирование по функциям потому что у меня есть и другие функции. Эти функции не существуют в Letodb.

Pasha: nbatocanin пишет: Можно ли сортировать (INDEX ON) по данной колонке? Если создан индекс по полю s_doc. то естественно, записи будут упорядочены (отсортированы) по этому полю. Мне нужно индексирование по функциям потому что у меня есть и другие функции. Эти функции не существуют в Letodb. Это, насколько я понимаю, уже другой вопрос. Свои пользовательские функции можно самому добавить в source\server\server.prg перед сборкой сервера. Это касается простых функций. Если функции при этом выполняют какие-то выборки из других рабочих областей, вопрос конечно сложнее.

nbatocanin: Я не объяснил правильно, извините. Tbrowse имеет несколько функций, например: A: p_id B: p_naziv C: SumPar(p_id) D: KomName(p_id) [pre2]FUNC KomName (p_id) SELECT Komerc SEEK p_id cName := Komerc->k_name SELECT Partner RETURN cName[/pre2] Мне нужно сортировать произвольную колонку выбраную пользователем. Например, это начальная таблица: [pre2]A B C D ---------------------------- 1 AB Comm 200 A6 2 D-Trd 1300 B1 3 XY Trade 500 A1 [/pre2] Пользователь выбирает колонку C: [pre2]A B C D ---------------------------- 2 D-Trd 1300 B1 3 XY Trade 500 A1 1 AB Comm 200 A6 [/pre2] выбирает колонку D: [pre2]A B C D ---------------------------- 3 XY Trade 500 A1 1 AB Comm 200 A6 2 D-Trd 1300 B1 [/pre2] Поэтому мне нужен индекс по функции. Когда не используется LetoDB, решение очень простое: cExp := "SumPar(p_id)" INDEX ON &cExp TO (cTmp)

SergKis: nbatocanin пишет:Когда не используется LetoDB, решение очень простое Не сложным будет, если делать запрос к базе, например в массив, тогда по умолчанию получите все колонки с сортировкой в tsb, как в примере minigui\samples\advanced\tsb_array_2\demo.prg (dblclick на header колонки). При такой технологии, не важно будет с какой базой работаете dbf\sql\ads\leto\...

nbatocanin: К сожалению, я не использую MiniGUI. Кроме того, эти таблицы могут быть очень большими (50.000+), не знаю как быстро это решение работает. Но, если я не найти другое решение, буду скопировать всю таблицу в DBFNTX, где работает INDEX по функциям. Это не хорошее решение, но не имеют другую идею.



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