On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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"

Помню что где то обсуждали, а результат не запомнил...

Спасибо: 0 
Профиль
Ответов - 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 для всех пользователей, но я не хочу, чтобы "убить" активного пользователя.

Спасибо, Ненад

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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 не убить текущего пользователя.


Спасибо: 0 
Профиль
alex_II



Пост N: 127
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 16.11.15 12:02. Заголовок: Условные индексы


Не могу в условии индексации использовать пользовательскую функцию.
Можно ли обойти это ограничение?
UDF-функцию также не видит

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3354
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.11.15 12:58. Заголовок: Индексация происходи..


Индексация происходит на сервере, так что клиентские пользовательские функции там недоступны.
Надо добавить эту функцию как раз м модуль udf, причем не как static function, а как function.
Тогда эта функция будет видна.


Спасибо: 0 
Профиль
alex_II



Пост N: 128
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 16.11.15 13:14. Заголовок: как static я функцию..


как static я функцию не описываю
вот udf модуль:
Скрытый текст


в логе получаю сообщение:
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)

Спасибо: 0 
Профиль
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 ...


Спасибо: 0 
Профиль
alex_II



Пост N: 129
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 17.11.15 05:04. Заголовок: Понял, буду пробоват..


Понял, буду пробовать
Спасибо

Спасибо: 0 
Профиль
alex_II



Пост N: 130
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 17.11.15 07:03. Заголовок: Pasha пишет: просто..


Pasha пишет:

 цитата:
просто добавить в модуль hrb


Поспешил написать что всё понятно
Что это и где этот модуль?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3357
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.11.15 09:06. Заголовок: Надо создать файл le..


Надо создать файл letoudf.prg, скомпилировать его с параметром -gh, и получившийся модуль letoudf.hrb скопировать в папку, где находится сервер letodb.exe. Сервер при старте загружает этот модуль.
Но я тут заметил, что пользовательская функция обращается к другим рабочим областям. Тогда так просто ее написать не получится.

Спасибо: 0 
Профиль
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))


Спасибо: 0 
Профиль
alex_II



Пост N: 131
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 19.11.15 05:50. Заголовок: Pasha пишет: Добави..


Pasha пишет:

 цитата:
Добавил функцию leto_ClientID()


Спасибо за помощь
Буду пробовать

Спасибо: 0 
Профиль
nbatocanin



Пост N: 42
Зарегистрирован: 06.05.14
ссылка на сообщение  Отправлено: 20.11.15 04:04. Заголовок: Паша, это может быть..


Паша, это может быть использовано в SET FILTER на сервере?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3359
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.11.15 08:00. Заголовок: Да. Функция leto_Cli..


Да. Функция leto_ClientID() возвращает nUserStru клиента, в потоке которого она выполняется.
Затем этот nUserStru можно использовать для других функций.

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4586
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.11.15 16:10. Заголовок: Всем привет ! Как на..


Всем привет !
Как на сервере LetoDB сделать подключение к базам работающим в режиме файл-сервера ?
Т.е. базы открыты другими программами в режиме SHARED.
Хочу сделать функцию для LetoDB в letoudf.prg, чтобы функция открывала чужие базы, что-то подсчитала и передавала результат через массив, для программы расчета.


Спасибо: 0 
Профиль
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, даже локально на сервере. Это будет эффективнее, да и вопроса такого не возникнет, как совмещать.

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4587
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.15 17:47. Заголовок: Pasha пишет: А еще ..


Pasha пишет:

 цитата:
А еще лучше все файлы открывать через letodb, даже локально на сервере. Это будет эффективнее, да и вопроса такого не возникнет, как совмещать.


Согласен. Только есть уже работающие 7 программ которые открывают эти файлы (переделывать их... ну просто головная боль).
Мне нужен режим совместимости для новой программы с LetoDB и старыми программами.

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4778
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.03.16 18:09. Заголовок: Открываю коннект к б..


Открываю коннект к базе:
nConnection := LETO_CONNECT( cPathServer )
....
nConnection = 1

Открываю таблицу и остаюсь в ней.

Далее в другой программе делаю другой коннект (пути одинаковы пока, потом будут разные)
nConnection := LETO_CONNECT( cPathServer )

nConnection тоже равен 1 !!!

Так должно быть ?
Или я что-то не допонимаю....
А как сделать чтобы nConnection были разными ?





Спасибо: 0 
Профиль
PSP
постоянный участник


Пост N: 1192
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 13.03.16 22:11. Заголовок: Andrey пишет: Так д..


Andrey пишет:

 цитата:
Так должно быть ?


Еще эта функция вернёт -1, если сервер недоступен. Это её основное (и, имхо, единственное) назначение: определить доступность сервера. Но ты можешь посмотреть исходники. Мне, если честно, лень)))

Спасибо: 0 
Профиль
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" )

???



Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 681
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет