On-line: PSP, tnsr2, гостей 2. Всего: 4 [подробнее..]
АвторСообщение
администратор




Пост N: 2728
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.13 11:27. Заголовок: Leto DB Server (продолжение 10) (продолжение)


Продолжаем тут

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 191 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]


постоянный участник




Пост N: 506
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.03.15 00:10. Заголовок: alkresin, Pasha, а м..


alkresin, Pasha, а можно добавить в letodb аналог функций:
Local date, time // time идет с миллисекундами
hb_fGetDateTime(cPath+"test1"+".dbf", @date, @time)
hb_fSetDateTime(cPath+"test1"+".dbf", @date, @time)
например:
aDateTime := leto_fGetDateTime(cPath+"test1"+".dbf")
leto_fSetDateTime(cPath+"test1"+".dbf", date, time) если data и time не заданы - ставить дату времемя сервера
таким образом можно отслеживаить менялясь таблица или нет без открытия оной


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3248
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.03.15 12:22. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как можно отловить перезагрузку и работоспособность сервера LetoDB ?
Т.е. при обращениях к ЛетоДБ как проверять, доступен он или нет (инет упал, сервер перегрузился и т.д.) -
как обрабатывать ошибки ?



Можно после вызова leto_Conntct (или без него, соединение автоматически будет установлено при первом вызове команды use) опрашивать сервер вызовом функции LETO_MGGETINFO.
Если ответ получен - значит, сервер работает, если нет - упал, тогда надо пробовать переконнектиться.
Конечно, letodb не рассчитан на нестабильное соединение. Если работать с ним в таком режиме, то надо обязательно для любых изменений БД использовать транзакции.


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3249
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.03.15 12:27. Заголовок: SergKis пишет: а мо..


SergKis пишет:

 цитата:
а можно добавить в letodb аналог функций:
Local date, time // time идет с миллисекундами
hb_fGetDateTime(cPath+"test1"+".dbf", @date, @time)
hb_fSetDateTime(cPath+"test1"+".dbf", @date, @time)
например:
aDateTime := leto_fGetDateTime(cPath+"test1"+".dbf")
leto_fSetDateTime(cPath+"test1"+".dbf", date, time) если data и time не заданы - ставить дату времемя сервера
таким образом можно отслеживаить менялясь таблица или нет без открытия оной



Формат dbf предусматривает только хранение даты изменения файла, но не времени. Поэтому стандартными средствами rdd это не сделаешь. Ну а нестандартными - можно создать отдельную таблицу dbf на сервере с полями:
имя файла, дата и время изменения.
Поскольку это нестандартное решение, то включать его в базовую функциональность letodb я смысла не вижу.
Такие функции можно сделать в модуле letoudf.hrb.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4579
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.03.15 15:17. Заголовок: SergKis Можно ведь ..


SergKis
Можно ведь сделать по аналогии

Pasha пишет: (из прошлой темы)

 цитата:

В source\server\server.prg надо добавить функцию:

FUNCTION leto_VolSerial( nUserStru )
RETURN VolSerial()

линковать сервер с hbct.lib

Вызов с клиента:
leto_UDF("leto_VolSerial")

Тоже самое можно сделать с mac-адресом, надо только найти такую функцию в харборе.
Только в сырцы letodb я это включать не хочу, все-таки другая специфика.






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




Пост N: 507
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.03.15 15:18. Заголовок: Pasha пишет:Поэтому ..


Pasha пишет:
 цитата:
Поэтому стандартными средствами rdd это не сделаешь.


Вы правы, но есть стандартные средства windows, хранящие данные о времени создания файла, модификации, последненго использования (с миллисекундами) - почему не воспользоваться этим - это все без открытия файла, что несомненное преимущество по скорости в сравнении с различными таблицами. Давно использую такую методу на cdx и ntx файлах и в двух поточной старой версии letodb (с исп. триггера), конечно, есть особенности применения. Например:
если Share_Tables = 1, то можно цепляться к самой таблице (dbf), dbCommit() и dbCloseArea() меняют дату, время в файле и эти изменения видны с др. клиента.
если Share_Tables = 0, тогда надо использовать файл рядом с таблицей и расширением (например) .dtm (когда создаем dbCreate(...) сразу создаем рядом файл Leto_MemoWrite( cFileName+'.dtm', "for TimeStamp" )) и всегда, когда надо, делаем типа leto_fSetDateTime(cFileName+'.dtm'), с др. клиента читаем leto_fGetDateTime(cFileName+'.dtm') и сравниваем с запомненнным ранее значением ...
на мой взгляд эти функции относятся к файловым как leto_fErase, leto_file, ... сколько было споров о нужности функции Leto_MemoWrite ...
конечно добавить такой функционал в свою версию - это будет, я подумал может еще кому такое надо - потому и предложил



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




Пост N: 508
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.03.15 15:26. Заголовок: Dima пишет:Можно вед..


Dima пишет:
 цитата:
Можно ведь сделать по аналогии


мас адрес и VolSerial никакого отношения к таблице сервера не имеют, я говорю о работе с конкретной таблицой и ее данными

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4580
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.03.15 15:36. Заголовок: SergKis Да согласен..


SergKis
Да согласен.

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




Пост N: 4044
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.03.15 23:41. Заголовок: Pasha пишет: опраши..


Pasha пишет:

 цитата:
опрашивать сервер вызовом функции LETO_MGGETINFO.
Если ответ получен - значит, сервер работает, если нет - упал, тогда надо пробовать переконнектиться.


Спасибо, я про это и спрашивал !

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




Пост N: 4067
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.15 03:01. Заголовок: Всем доброй ночи......


Всем доброй ночи.... Пробовать новое получается только по ночам...
Начал пробовать LetoDB+MiniGui.
Еле запустил простой пример создания базы... По разному пробовал и без letodb.ini и с ним, сообщает об успехе коннекта, а базу создать не может:
Error DBFCDX/1004 Create error: \DATA\test866.dbf
Error DBFCDX/1004 Create error: \DATA\\127.0.0.1:2812test866.dbf
Error DBFCDX/1004 Create error: \DATA\test866.dbf
Error DBFCDX/1004 Create error: ..\DATA\test866.dbf

Решил кардинально, через letodb.ini - указав DataPath=C:\LetoDB\DATA

Установил на сервер в инете, попытался 4000 записей сразу создать, результат 8 минут и AVI-ка ожидания висит...
Ладно, фиг с ней.
Можно как то бегунок отражать на экране, допустим при создании базы ?
Это не критично, но просто для примера, понять как можно делать.
И второй вопрос, а как можно создать/открыть базу на локальном компе одновременно с LetoDB и скопировать записи с сервера, к себе на комп в локальную базу ?


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 101
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 28.03.15 03:46. Заголовок: Здравствуйте! Пытаюс..


Здравствуйте!
Пытаюсь собрать LetoDB 2.09 под Harbour 3.0.0 (Rev. 16951) на CentOS release 6.5 (Final).
Harbour 3.0.0 собрался прекрасно, никаких ошибок нет.
LetoDB вроде тоже нормально собирается, но на стадии линковки выдаёт следующую ошибку:
[root@57461-6 letodb-2.09-win]# make -f Makefile.linux  
gcc obj/linux/server.o obj/linux/common.o obj/linux/hbip.o obj/linux/common_c.o obj/linux/blowfish.o obj/linux/leto_2.o obj/linux/letofunc.o obj/linux/letolist.o obj/linux/letoacc.o obj/linux/letovars.o obj/linux/leto_lnx.o obj/linux/errint.o obj/linux/errorsys.o -obin/letodb -L/apps/harbour/lib -Wl,--start-group -lhbvm -lhbrtl -lhbcpage -lhblang -lhbrdd -lhbrtl -lhbmacro -lhbpp -lgtstd -lrddntx -lrddcdx -lrddfpt -lhbcommon -lhbsix -Wl,--end-group -lm -lpthread
/usr/bin/ld: cannot find -lhbvm
collect2: ld returned 1 exit status

С путями вроде всё нормально, файл /apps/harbour/lib/linux/gcc/libhbvm.a существует.
В чём может быть проблема?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 873
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.15 09:52. Заголовок: Andrey пишет: Устан..


Andrey пишет:

 цитата:
Установил на сервер в инете, попытался 4000 записей сразу создать, результат 8 минут


Естественно, это же 4000 обращений к серверу и 4000 ответов. Оформите это как транзакцию, или серию транзакций по группе записей в пакете - и количество обращений туда-сюда, а, соответственно, и затраченное время в разы уменьшится.


 цитата:
Можно как то бегунок отражать на экране, допустим при создании базы ?


Отражайте, кто вам мешает ? LetoDB тут ни при чем, он предназначен только для операций с БД и не знает, какой интерфейс у вас используется ( консоль, та или иная GUI библиотека ).

 цитата:
а как можно создать/открыть базу на локальном компе одновременно с LetoDB и скопировать записи с сервера, к себе на комп


use (cRemotePath + "db1") new via LETO
use (cLocalPath + "db2") new via DBFCDX
append from db1


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 874
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.15 09:56. Заголовок: SkyNET пишет: gcc ...


SkyNET пишет:

 цитата:
gcc ... -obin/letodb -L/apps/harbour/lib ...
/usr/bin/ld: cannot find -lhbvm



Путь к библиотекам прописан: /apps/harbour/lib, а они у вас, по вашим словам, в /apps/harbour/lib/linux/gcc/libhbvm.a

Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост N: 4615
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.03.15 11:20. Заголовок: alkresin пишет: Ест..


alkresin пишет:

 цитата:
Естественно, это же 4000 обращений к серверу и 4000 ответов. Оформите это как транзакцию



Это как ?
Было к примеру.
 
For J=1 to 4000
dbappend()
Next


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




Пост N: 516
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.15 12:41. Заголовок: Andrey пишет: letodb..


Andrey пишет:
 цитата:
letodb.ini - указав DataPath=C:\LetoDB\DATA


мой letodb.ini :
[Main]
Port = 2812
DataPath = .
EnableFileFunc = 1
каталог DATA создаешь сам, дальше LETO_MAKEDIR( cDirName )
загрузку примерно так делаю:Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 875
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.15 13:03. Заголовок: Dima пишет: Это как..


Dima пишет:

 цитата:
Это как ?
Было к примеру.

For J=1 to 4000
dbappend()
Next


Например, так:
For J=1 to 40
begin transaction
for j1 := 1 to 100
dbappend()
next
end transaction
Next

Все, что между begin transaction ... end transaction отправляется на сервер одним пакетом.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4070
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.15 14:02. Заголовок: SergKis пишет: загр..


SergKis пишет:

 цитата:
загрузку примерно так делаю



alkresin пишет:

 цитата:
Все, что между begin transaction ... end transaction отправляется на сервер одним пакетом.



Спасибо БОЛЬШОЕ !!!

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4616
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.03.15 14:58. Заголовок: alkresin пишет: Все..


alkresin пишет:

 цитата:
Все, что между begin transaction ... end transaction отправляется на сервер одним пакетом



А если вот так , это оптимально будет или нет ?
На других станциях юзеры не испытают проблем с этой базой ?
 
begin transaction
do While !test->(eof())
sum+=test->summa
test->(dbskip())
enddo
end transaction



Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 876
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.15 15:25. Заголовок: Dima пишет: А если ..


Dima пишет:

 цитата:
А если вот так , это оптимально будет или нет ?


Транзакции применяются исключительно для записи данных. После begin transaction все операции добавления/изменения накапливаются в буфере и после end transaction передаются на сервер, где и исполняются - или все, или ни одна.
Операции чтения при транзакциях работают также, как и без них, так что в приведенном вами коде begin transaction, end transaction ничего не изменят.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4617
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.03.15 15:30. Заголовок: alkresin Понял. Спа..


alkresin
Понял. Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 878
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.15 15:45. Заголовок: Для ускорения операц..


Для ускорения операций чтения возможен другой вариант:
LETO_SETSKIPBUFFER( nSkip ) - установить размер буфера чтения. Если, например, вы установили его в 100 ( по умолчанию, кажется 10 ) - то при dbSkip(1), если следующей записи нет в буфере, считываются сразу 100 записей - и, соответственно, следующие 100 dbskip(1) не будут обращаться к серверу.
Потом лучше, наверное, опять уменьшить буфер - если читать помногу записей без надобности, это может затормозить работу.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 191 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 612
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет