Автор | Сообщение |
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
[только новые]
|
|
nbatocanin
|
| |
Пост N: 26
Зарегистрирован: 06.05.14
|
|
Отправлено: 29.09.15 05:11. Заголовок: nUser
Здравствуйте! Есть ли способ, чтобы определить текущее nUser для Leto_MgKill(nUser)? Я хочу использовать Leto_MgKill для всех пользователей, но я не хочу, чтобы "убить" активного пользователя. Спасибо, Ненад
|
|
|
Pasha
|
| Администратор
|
Пост N: 3341
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.09.15 12:13. Заголовок: Функция leto_mgGetUs..
Функция leto_mgGetUsers возвращает массив с параметрами пользователей: ip-адрес, имя хоста, название приложения. В этом массиве можно найти свои параметры. Это способ, конечно же, ненадежен, так как с одного и того же хоста одно и тоже приложение можно запустить не один раз. Другой способ: сделать на сервере udf-функцию: Function UDF_UserNumber(nUserStru) Return nUserStru и вызывать ее с клиента посредством leto_UDF("UDF_UserNumber") Этот способ не очень красив. Можно, конечно, добавить номер клиента в качестве еще одного элемента массива, возвращаемого функцией leto_mgGetInfo, чтобы номер клиента можно было бы получить штатными средствами letodb
|
|
|
nbatocanin
|
| |
Пост N: 27
Зарегистрирован: 06.05.14
|
|
Отправлено: 29.09.15 17:48. Заголовок: Было бы хорошо, чтоб..
Было бы хорошо, чтобы сделать функцию Leto_GetCurrentID(). Я использую следующую процедуру: aInfo := Leto_MgGetUsers() FOR i := 1 TO Len(aInfo) Leto_MGKill (aInfo[i,1]) NEXT Это работает, потому что Leto_MGKill не убить текущего пользователя.
|
|
|
alex_II
|
| |
Пост N: 127
Зарегистрирован: 12.07.06
|
|
Отправлено: 16.11.15 12:02. Заголовок: Условные индексы
Не могу в условии индексации использовать пользовательскую функцию. Можно ли обойти это ограничение? UDF-функцию также не видит
|
|
|
Pasha
|
| Администратор
|
Пост N: 3354
Зарегистрирован: 23.05.05
|
|
Отправлено: 16.11.15 12:58. Заголовок: Индексация происходи..
Индексация происходит на сервере, так что клиентские пользовательские функции там недоступны. Надо добавить эту функцию как раз м модуль udf, причем не как static function, а как function. Тогда эта функция будет видна.
|
|
|
alex_II
|
| |
Пост N: 128
Зарегистрирован: 12.07.06
|
|
Отправлено: 16.11.15 13:14. Заголовок: как static я функцию..
как static я функцию не описываю вот udf модуль: Скрытый текст #include "dbinfo.ch" #include "set.ch" #ifdef __LINUX__ #define DEF_SEP '/' #define DEF_CH_SEP '\' #else #define DEF_SEP '\' #define DEF_CH_SEP '/' #endif FUNCTION UDF_Init() SET AUTORDER TO 1 RETURN NIL FUNCTION UDF_Metka(nUserStru, cClientAlias) LOCAL rc := .F. LOCAL cArea := Alias() LOCAL cServerAlias := leto_Alias(nUserStru, cClientAlias) dbSelectArea(cServerAlias) DBGoTop() DBSeek(cArea->ls) rc := Found() dbSelectArea(cArea) RETURN rc
| в логе получаю сообщение: 16.11.2015 14:57:25: Error BASE/1001 Undefined function: LETO_UDF Arguments: ( [ 1] = Type: C Val: UDF_Metka, [ 2] = Type: C Val: amt)
|
|
|
Pasha
|
| Администратор
|
Пост N: 3355
Зарегистрирован: 23.05.05
|
|
Отправлено: 16.11.15 14:09. Заголовок: Если в условии for к..
Если в условии for команды index on используется пользовательская функция, то ее надо просто добавить в модуль hrb, причем без параметра nUserStru. В условии for ее надо просто вызвать, не задействуя механизм leto_udf. Пример: index on .. tag .. to .. for Pole=MyFunc() сама функция: function myfunc ... return ...
|
|
|
alex_II
|
| |
Пост N: 129
Зарегистрирован: 12.07.06
|
|
Отправлено: 17.11.15 05:04. Заголовок: Понял, буду пробоват..
Понял, буду пробовать Спасибо
|
|
|
alex_II
|
| |
Пост N: 130
Зарегистрирован: 12.07.06
|
|
Отправлено: 17.11.15 07:03. Заголовок: Pasha пишет: просто..
Pasha пишет: цитата: | просто добавить в модуль hrb |
| Поспешил написать что всё понятно Что это и где этот модуль?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3357
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.11.15 09:06. Заголовок: Надо создать файл le..
Надо создать файл letoudf.prg, скомпилировать его с параметром -gh, и получившийся модуль letoudf.hrb скопировать в папку, где находится сервер letodb.exe. Сервер при старте загружает этот модуль. Но я тут заметил, что пользовательская функция обращается к другим рабочим областям. Тогда так просто ее написать не получится.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3358
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.11.15 10:14. Заголовок: Добавил функцию leto..
Добавил функцию leto_ClientID() для получения nUserStru на сервере Таким образом, функцию для индексации for можно сделать в udf-модуле примерно так: FUNCTION UDF_Metka(cClientAlias) LOCAL nUserStru := leto_ClientID() LOCAL cServerAlias := leto_Alias(nUserStru, cClientAlias) LOCAL xIs := Field->Is RETURN (cServerAlias)->(DBSeek(xls))
|
|
|
|
alex_II
|
| |
Пост N: 131
Зарегистрирован: 12.07.06
|
|
Отправлено: 19.11.15 05:50. Заголовок: Pasha пишет: Добави..
Pasha пишет: цитата: | Добавил функцию leto_ClientID() |
| Спасибо за помощь Буду пробовать
|
|
|
nbatocanin
|
| |
Пост N: 42
Зарегистрирован: 06.05.14
|
|
Отправлено: 20.11.15 04:04. Заголовок: Паша, это может быть..
Паша, это может быть использовано в SET FILTER на сервере?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3359
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.11.15 08:00. Заголовок: Да. Функция leto_Cli..
Да. Функция leto_ClientID() возвращает nUserStru клиента, в потоке которого она выполняется. Затем этот nUserStru можно использовать для других функций.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4586
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.11.15 16:10. Заголовок: Всем привет ! Как на..
Всем привет ! Как на сервере LetoDB сделать подключение к базам работающим в режиме файл-сервера ? Т.е. базы открыты другими программами в режиме SHARED. Хочу сделать функцию для LetoDB в letoudf.prg, чтобы функция открывала чужие базы, что-то подсчитала и передавала результат через массив, для программы расчета.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3364
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.11.15 09:02. Заголовок: Andrey пишет: Как н..
Andrey пишет: цитата: | Как на сервере LetoDB сделать подключение к базам работающим в режиме файл-сервера ? Т.е. базы открыты другими программами в режиме SHARED. Хочу сделать функцию для LetoDB в letoudf.prg, чтобы функция открывала чужие базы, что-то подсчитала и передавала результат через массив, для программы расчета. |
| Надо открывать такие файлы обычной командой use ... via DBFCDX new shared выборку делать обычными командами skip/seek/etc по окончанию выборки не забыть закрыть. А еще лучше все файлы открывать через letodb, даже локально на сервере. Это будет эффективнее, да и вопроса такого не возникнет, как совмещать.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4587
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.11.15 17:47. Заголовок: Pasha пишет: А еще ..
Pasha пишет: цитата: | А еще лучше все файлы открывать через letodb, даже локально на сервере. Это будет эффективнее, да и вопроса такого не возникнет, как совмещать. |
| Согласен. Только есть уже работающие 7 программ которые открывают эти файлы (переделывать их... ну просто головная боль). Мне нужен режим совместимости для новой программы с LetoDB и старыми программами.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4778
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.03.16 18:09. Заголовок: Открываю коннект к б..
Открываю коннект к базе: nConnection := LETO_CONNECT( cPathServer ) .... nConnection = 1 Открываю таблицу и остаюсь в ней. Далее в другой программе делаю другой коннект (пути одинаковы пока, потом будут разные) nConnection := LETO_CONNECT( cPathServer ) nConnection тоже равен 1 !!! Так должно быть ? Или я что-то не допонимаю.... А как сделать чтобы nConnection были разными ?
|
|
|
PSP
|
| постоянный участник
|
Пост N: 1192
Зарегистрирован: 27.01.07
|
|
Отправлено: 13.03.16 22:11. Заголовок: Andrey пишет: Так д..
Andrey пишет: Еще эта функция вернёт -1, если сервер недоступен. Это её основное (и, имхо, единственное) назначение: определить доступность сервера. Но ты можешь посмотреть исходники. Мне, если честно, лень)))
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4779
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.03.16 22:20. Заголовок: PSP пишет: Еще эта ..
PSP пишет: цитата: | Еще эта функция вернёт -1, если сервер недоступен. Это её основное (и, имхо, единственное) назначение: определить доступность сервера. Но ты можешь посмотреть исходники. Мне, если честно, лень))) |
| Да я знаю что при -1 сервер недоступен. Я просто считал, что если один коннект уже есть, то следующий должен быть 2. А этого нет. Если я делаю LETO_DISCONNECT(nConnection), то программа падает с виндовой ошибкой. Так как nConnection одинаков. Пробовал делать LETO_SETCURRENTCONNECTION( nConnection ) - без толку. Возвращает тоже 1. Т.е. как сделать, чтобы новый коннект был другим ? nConnection := LETO_CONNECT( cPathServer , ....) IF nConnection > 0 LETO_SETCURRENTCONNECTION( nConnection ) nI := LETO_GETCURRENTCONNECTION() MsgDebug(TIME() + " " + HB_NtoS(nI) + " - connect" ) ???
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|