Автор | Сообщение |
Dima
|
| |
Пост N: 2728
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.13 11:27. Заголовок: Leto DB Server (продолжение 9)
Продолжаем тут
|
|
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|
Pasha
|
| Администратор
|
Пост N: 2808
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.03.13 15:02. Заголовок: Чуть позже напишу, с..
Чуть позже напишу, сейчас некогда, надо самому глянуть, что за флаги Но скорее всего: #define LETO_VCREAT 1 если переменной нет, она создается #define LETO_VOWN 2 переменная этого пользователя (соединения) #define LETO_VDENYWR 4 запрет присвоения для другого пользователя #define LETO_VDENYRD 8 запрет чтения другим пользователем #define LETO_VPREVIOUS 1 надо смотреть
|
|
|
AlexMyr
|
| |
Пост N: 797
Зарегистрирован: 11.06.10
|
|
Отправлено: 29.03.13 16:08. Заголовок: Dima пишет: хочу ко..
Dima пишет: цитата: | хочу контролировать вход юзеров |
| Есть опция Pass_for_Login=.T., раньше с ней игрался, так вот какая мысль, если добавить еще опцию допустим Multi_login (по умолчанию .F. - один пользователь, сервер сам проверяет, если пользователь залогинился, такой уже не зайдет), если .T. - значит допускается больше одного коннекта для одного юзера. Если Pass_for_Login = .F., то MultiLogin не обрабатывается. Вроде так будет лучше и правильней чем игры с переменными и флагами со стороны клиента.
|
|
|
Dima
|
| |
Пост N: 2900
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.03.13 16:53. Заголовок: AlexMyr Начну с пер..
AlexMyr Начну с переменных а там посмотрим. Вроде и особо играться там не надо. При входе проверил переменную , если ее нет , завел. Если есть то юзер не войдет. Ее даже убивать не надо при выходе из программы (убивается на автомате после LETO_DISCONNECT если я верно понял)
|
|
|
Pasha
|
| Администратор
|
Пост N: 2809
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.03.13 17:42. Заголовок: sashaBG пишет: Leto..
sashaBG пишет: цитата: | LetoDB у меня работает как демон а не как сервиз не знаю может в етом проблема сначала я кинулся убирать AVAST но не в нем проблема , несмотря что он враждебно относится к LetoDB . иногда падает при закрытии одной обласи или всех рабочих облостей со стороны клиента . Лечится ето через Leto_Commit() перед закрытием на локаьном соединении ето нельзя воспроизвести только через сеть. Ошибка получается не кажды раз . |
| У меня такая ошибка никогда не возникала. Судя по тому, что она лечится через Leto_Commit, возможно, перед dbCloseArea остались данные, которые не переданы на сервер, и блокированные записи. Хотя я таких ситуаций стараюсь избегать, смоделировал их, и ошибки не получил. Посмотрел по сырцам - если такая ситуация возникнет, то измененные записи перед закрытием будут переданы на сервер, и список блокированных записей очищается. Причина ошибки пока непонятна.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2810
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.03.13 17:48. Заголовок: Pasha пишет: #defin..
Pasha пишет: Функция leto_varset присваивает переменной новое значение, и возвращает ее предыдущее значение
|
|
|
Dima
|
| |
Пост N: 2901
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.03.13 18:08. Заголовок: Pasha пишет: Функци..
Pasha пишет: цитата: | Функция leto_varset присваивает переменной новое значение, и возвращает ее предыдущее значение |
| Спасибо за разъяснения ! Pasha Порадуешь на счет MAC адреса ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2811
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.03.13 20:13. Заголовок: Dima пишет: Порадуе..
Dima пишет: цитата: | Порадуешь на счет MAC адреса ? |
| А что надо с MAC-адресом ? Возврашать MAC-адрес сервера, что ли ?
|
|
|
Dima
|
| |
Пост N: 2902
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.03.13 20:16. Заголовок: Pasha пишет: Возвра..
Pasha пишет: цитата: | Возврашать MAC-адрес сервера, что ли ? |
| Да MAC адрес сетевой платы cервера. Или к примеру volserial() винта откуда стартовал LetoDB сервер.
|
|
|
Pasha
|
| Администратор
|
Пост N: 2812
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.03.13 20:34. Заголовок: В source\server&..
В source\server\server.prg надо добавить функцию: FUNCTION leto_VolSerial( nUserStru ) RETURN VolSerial() линковать сервер с hbct.lib Вызов с клиента: leto_UDF("leto_VolSerial") Тоже самое можно сделать с mac-адресом, надо только найти такую функцию в харборе. Только в сырцы letodb я это включать не хочу, все-таки другая специфика.
|
|
|
Dima
|
| |
Пост N: 2903
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.03.13 20:48. Заголовок: Pasha Спасибо. Pas..
Pasha Спасибо. Pasha пишет: цитата: | Тоже самое можно сделать с mac-адресом, надо только найти такую функцию в харборе. |
| Уже искал и не нашел. Но есть GetAdaptersInfo в iphlpapi.lib , но одной прилинковки этой библы не достаточно. Видать что то еще надо. Как вариант можно так #include "hbwin.ch" PROCEDURE Main LOCAL nHKey := WIN_HKEY_LOCAL_MACHINE LOCAL cRegPath := "SOFTWARE\Microsoft\Windows Genuine Advantage" LOCAL cRegKey := "MAC" ? GetRegistry( nHKey, cRegPath, cRegKey ) RETURN
|
|
|
Dima
|
| |
Пост N: 2914
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.04.13 12:41. Заголовок: Если EnableFileFunc ..
Если EnableFileFunc = 1 То функция FILE() сможет определять наличие файла на сервере или нужно юзать LETO_FILE () ? Будут ли функции в будущем ? Leto_Fcreate() Leto_Fseek() Leto_Fopen() Как проверить существование папки на сервере ?
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 2816
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.04.13 17:04. Заголовок: Добавлять в letodb э..
Добавлять в letodb эту функциональность как-то не хочется, так как это несвойственные ему задачи, да и дублирование существующих возможностей. File() и прочие файловые функции будут работать: 1. Если есть файловый доступ к данному сетевому ресурсу: сетевой диск или через unc 2. Посредством netio. На сервере должен быть кроме letodb запущен netio-сервер, и тогда можно к нему сконнектиться и использовать файловые операции вида: Local nH := FOpen("net:" + cFileName, ...) Правда, для windows netiosrv работает как приложение, а не как служба, что создаст некоторые трудности. Дополню: конечно, в letodb это можно реализовать посредством udf-функций
|
|
|
Dima
|
| |
Пост N: 2915
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.04.13 17:22. Заголовок: Pasha пишет: File()..
Pasha пишет: цитата: | File() и прочие файловые функции будут работать: 1. Если есть файловый доступ к данному сетевому ресурсу: сетевой диск или через unc |
| Базу предполагалось спрятать от юзеров и папку с базой расшаривать не предполагалось. Спрошу иначе ;) Когда запускается программа (моя) она проверяет наличие баз данных. Если какой то базы нет ,она создается (проверяю с помощью FILE()) Что бы не париться с NET: мне достаточно с RDD LETO проверить существование файла на сервере Leto с помощью File() или надо юзать Leto_File() ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 2817
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.04.13 18:33. Заголовок: Если папка не расшар..
Если папка не расшарена, то file и все остальные файловые функции работать не будут. Надо использовать leto_file leto_file('//127.0.0.1:2812/' + cFile) путь к файлу надо указывать относительно DataPath из letodb.ini Для проверки существования папки можно использовать leto_Directory. Параметры такие же, что и Directory Все существующие файловые функции описаны в разделе 7.6 readme Можно написать свой набор функций, через механизм udf. Пример: На сервере добавляется функция Function leto_FCreate(nUserStru, cFileName, nAttr) Return FCreate(leto_GetAppOptions( 1 ) + cFileName, nAttr) leto_GetAppOptions( 1 ) возвращает DataPath Вызов с клиента: leto_UDF('leto_FCreate', cFileName, nAttr) и так далее
|
|
|
Dima
|
| |
Пост N: 2916
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.04.13 18:35. Заголовок: Pasha Спасибо за ра..
Pasha Спасибо за развернутый ответ.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 199
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.04.13 09:38. Заголовок: Dima пишет:Когда зап..
Dima пишет: цитата: | Когда запускается программа (моя) она проверяет наличие баз данных. Если какой то базы нет ,она создается (проверяю с помощью FILE()) |
| Может будет интересно. Т.к. у нас в прогах на clipper каталоги для баз создаются динамически и их много, то при переводе на letodb сохранили такую же схему работы, добавив в сервер в функцию hs_createtable(...) проверку и создание каталогов. Вот текст: Скрытый текст
FUNCTION hs_createtable( nUserStru, cCommand ) ... IF Lower(cName) = "/mem:" cDataPath := "" cName := Substr(cName, 2) ELSE cDataPath := leto_GetAppOptions( 1 ) ENDIF cFileName := cDataPath + cName IF ! empty(cDataPath) // new _CreateDir( cFileName ) // new ENDIF // new BEGIN SEQUENCE WITH { |e|break( e ) } ... STATIC FUNCTION _CreateDir( cDBF ) LOCAL i, cCt, aCt := {} i := RAt('\', cDBF) cCt := Left( cDBF, i-1) DO WHILE ! hb_DirExists( cCt ) i := RAt('\', cCt) IF i == 0 ; EXIT ENDIF AAdd( aCt , subs(cCt, i+1) ) cCt := Left( cCt, i-1) ENDDO i := Len( aCt ) DO WHILE i > 0 cCt += ('\' + aCt[i--]) MakeDir( cCt ) ENDDO RETURN .T.
|
|
|
|
Dima
|
| |
Пост N: 2917
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.04.13 10:34. Заголовок: SergKis Спасибо !..
SergKis Спасибо !
|
|
|
Dima
|
| |
Пост N: 2918
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.04.13 17:05. Заголовок: Застрял на ерунде. ..
Застрял на ерунде. ? leto_file(pathleto+"\dbf\test.dbf") // .t. set path to (pathleto+"\dbf\") ? leto_file("test.dbf") // почему то .f. с обычным RDD .t. впрочем как и в Clipper Куда копать ?
|
|
|
PSP
|
| постоянный участник
|
Пост N: 858
Зарегистрирован: 27.01.07
|
|
Отправлено: 03.04.13 17:07. Заголовок: Видимо, сервер ничег..
Видимо, сервер ничего не знает про установку SET PATH TO
|
|
|
Dima
|
| |
Пост N: 2919
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.04.13 17:15. Заголовок: PSP пишет: Видимо, ..
PSP пишет: цитата: | Видимо, сервер ничего не знает про установку SET PATH TO |
| Вероятно должен знать Выдержка из доки Для открытия файла dbf на сервере необходимо вставить в оператор SET PATH TO, или в команду USE путь к серверу в стандартной форме: //ip_address:port/data_path/file_name. Правда тут ни чего не сказано насчет файловых функций таких как File() к примеру. Но ведь в Harbour как и в Clipper SET PATH TO распространяется и на функцию File() в том числе.
|
|
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|