Автор | Сообщение |
Andrey
|
| постоянный участник
|
Пост N: 4156
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.05.15 22:44. Заголовок: Вопросы новичка...
Взял последнюю версию с "Новая страница с бинарниками", установил на 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
|
| постоянный участник
|
Пост N: 4899
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.16 12:13. Заголовок: Спасибо БОЛЬШОЕ всем..
Спасибо БОЛЬШОЕ всем за разъяснения !
|
|
|
Pasha
|
| Администратор
|
Пост N: 3431
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.05.16 13:15. Заголовок: В скрипте rddleto.hb..
В скрипте 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
|
| постоянный участник
|
Пост N: 4900
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.16 14:12. Заголовок: Pasha, СПАСИБО ! :s..
Pasha, СПАСИБО ! Меня отговорили от dll-ки !
|
|
|
nbatocanin
|
| |
Пост N: 68
Зарегистрирован: 06.05.14
|
|
Отправлено: 07.05.16 16:54. Заголовок: Попробуем Leto_Clien..
Попробуем 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
|
| |
Пост N: 69
Зарегистрирован: 06.05.14
|
|
Отправлено: 08.05.16 04:04. Заголовок: Как использовать фун..
Как использовать функцию LetoOrdCreate? Я написал в клиенте это: Leto_UDF("LetoOrdCreate", "IN001", "Upper(a_naziv)") Но сервер выдает сообщение об ошибке: Error DBFNTX/1003 Open error: d:\base\xapp\36\in001.ntx
|
|
|
Pasha
|
| Администратор
|
Пост N: 3432
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.05.16 09:25. Заголовок: nbatocanin пишет: П..
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
|
| Администратор
|
Пост N: 3433
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.05.16 09:28. Заголовок: nbatocanin пишет: К..
nbatocanin пишет: цитата: | Как использовать функцию LetoOrdCreate? Я написал в клиенте это: Leto_UDF("LetoOrdCreate", "IN001", "Upper(a_naziv)") Но сервер выдает сообщение об ошибке: Error DBFNTX/1003 Open error: d:\base\xapp\36\in001.ntx |
| Эта функция предназначена для вызова на сервере. С клиента используйте стандартную команду INDEX ON / функцию ordCreate
|
|
|
nbatocanin
|
| |
Пост N: 70
Зарегистрирован: 06.05.14
|
|
Отправлено: 08.05.16 16:03. Заголовок: Эта функция предназн..
цитата: | Эта функция предназначена для вызова на сервере. С клиента используйте стандартную команду 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: 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
|
| |
Пост N: 71
Зарегистрирован: 06.05.14
|
|
Отправлено: 08.05.16 16:05. Заголовок: Я добавил request дл..
цитата: | Я добавил request для этой функции. Попробуйте сейчас. |
| работает, спасибо!
|
|
|
Pasha
|
| Администратор
|
Пост N: 3436
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.05.16 21:21. Заголовок: nbatocanin пишет: С..
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
|
| |
Пост N: 73
Зарегистрирован: 06.05.14
|
|
Отправлено: 12.05.16 02:42. Заголовок: Сейчас функция LetoO..
Сейчас функция LetoOrdCreate работает (должен быть написать дополнительный параметр cTag): LetoOrdCreate (nUserStru, cFile, cExp, cTag) Но как я могу использовать этот индекс? LetoOrdListAdd не активирует этот индекс. Я попробовал OrdSetFocus, SET INDEX... безуспешно.
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 3437
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.05.16 10:28. Заголовок: letoOrdListAdd актив..
letoOrdListAdd активирует (формирует соответствующие структуры данных) этот индекс на сервере, но клиент об этом ничего не знает. Чтобы активировать его и на клиенте, изменить функцию letoOrdListAdd, чтобы она передавала информацию об открытом индексе клиенту, и сделать на клиенте обработку этой информации. Это требует небольшой доработки letodb. Можно обойтись и без такой схемы, просто создавая и открывая индекс стандартными средствами rdd с клиента до вызова udf-функции. Кстати, почему вы выбрали такую схему создания индекса в udf-функции, а не непосредственно с клиента ?
|
|
|
nbatocanin
|
| |
Пост N: 74
Зарегистрирован: 06.05.14
|
|
Отправлено: 12.05.16 17:37. Заголовок: У меня есть таблица ..
У меня есть таблица (tbrowse) с колоннами: A: p_id B: p_naziv C: SumPar(p_id) Функция SumPar(p_id) для каждого p_id: 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 Я хочу, чтобы отсортировать столбец C. Когда не используется LetoDB может написать: cExp := "SumPar(p_id)" INDEX ON &cExp TO (cTmp) Но с LetoDB, это невозможно.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4921
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.05.16 18:00. Заголовок: nbatocanin пишет: Н..
nbatocanin пишет: цитата: | Но с LetoDB, это невозможно. |
| Возможно ! Нужно добавить функцию "SumPar(p_id)" в LetoDB и пересобрать сервер, т.е. эта функция будет уже на сервере. Или сделать отдельную функцию UDF.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3438
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.05.16 18:07. Заголовок: nbatocanin пишет: У..
nbatocanin пишет: цитата: | У меня есть таблица (tbrowse) с колоннами: ... |
| Такую задачу можно решить самыми стандартными средствами, не задействуя механизм udf Надо создать постоянный индекс для table2 по полю s_doc В качестве 3-й колонки для tbrowse использовать выражение: table2->(leto_Sum('s_val',, table1->p_id))
|
|
|
nbatocanin
|
| |
Пост N: 75
Зарегистрирован: 06.05.14
|
|
Отправлено: 12.05.16 18:46. Заголовок: Такую задачу можно р..
цитата: | Такую задачу можно решить самыми стандартными средствами, не задействуя механизм udf Надо создать постоянный индекс для table2 по полю s_doc В качестве 3-й колонки для tbrowse использовать выражение: table2->(leto_Sum('s_val',, table1->p_id)) |
| Можно ли сортировать (INDEX ON) по данной колонке? Мне нужно индексирование по функциям потому что у меня есть и другие функции. Эти функции не существуют в Letodb.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3439
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.05.16 18:59. Заголовок: nbatocanin пишет: М..
nbatocanin пишет: цитата: | Можно ли сортировать (INDEX ON) по данной колонке? |
| Если создан индекс по полю s_doc. то естественно, записи будут упорядочены (отсортированы) по этому полю. цитата: | Мне нужно индексирование по функциям потому что у меня есть и другие функции. Эти функции не существуют в Letodb. |
| Это, насколько я понимаю, уже другой вопрос. Свои пользовательские функции можно самому добавить в source\server\server.prg перед сборкой сервера. Это касается простых функций. Если функции при этом выполняют какие-то выборки из других рабочих областей, вопрос конечно сложнее.
|
|
|
nbatocanin
|
| |
Пост N: 76
Зарегистрирован: 06.05.14
|
|
Отправлено: 13.05.16 02:37. Заголовок: Я не объяснил правил..
Я не объяснил правильно, извините. Tbrowse имеет несколько функций, например: A: p_id B: p_naziv C: SumPar(p_id) D: KomName(p_id) FUNC KomName (p_id) SELECT Komerc SEEK p_id cName := Komerc->k_name SELECT Partner RETURN cName Мне нужно сортировать произвольную колонку выбраную пользователем. Например, это начальная таблица: A B C D ---------------------------- 1 AB Comm 200 A6 2 D-Trd 1300 B1 3 XY Trade 500 A1 Пользователь выбирает колонку C: A B C D ---------------------------- 2 D-Trd 1300 B1 3 XY Trade 500 A1 1 AB Comm 200 A6 выбирает колонку D: A B C D ---------------------------- 3 XY Trade 500 A1 1 AB Comm 200 A6 2 D-Trd 1300 B1 Поэтому мне нужен индекс по функции. Когда не используется LetoDB, решение очень простое: cExp := "SumPar(p_id)" INDEX ON &cExp TO (cTmp)
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 982
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.05.16 16:18. Заголовок: nbatocanin пишет:Ког..
nbatocanin пишет: цитата: | Когда не используется LetoDB, решение очень простое |
| Не сложным будет, если делать запрос к базе, например в массив, тогда по умолчанию получите все колонки с сортировкой в tsb, как в примере minigui\samples\advanced\tsb_array_2\demo.prg (dblclick на header колонки). При такой технологии, не важно будет с какой базой работаете dbf\sql\ads\leto\...
|
|
|
nbatocanin
|
| |
Пост N: 77
Зарегистрирован: 06.05.14
|
|
Отправлено: 13.05.16 16:51. Заголовок: К сожалению, я не ис..
К сожалению, я не использую MiniGUI. Кроме того, эти таблицы могут быть очень большими (50.000+), не знаю как быстро это решение работает. Но, если я не найти другое решение, буду скопировать всю таблицу в DBFNTX, где работает INDEX по функциям. Это не хорошее решение, но не имеют другую идею.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|