Автор | Сообщение |
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
[только новые]
|
|
nbatocanin
|
| |
Пост N: 12
Зарегистрирован: 06.05.14
|
|
Отправлено: 07.12.14 19:14. Заголовок: Спасибо! Проблема р..
Спасибо! Проблема решается, если задания функции через hrb, все работает как надо. Я изменил server.prg (потому что нам нужна функция VolSerial), так что я сделал функцию UDF_VolSerial в server.prg и все работало должным образом. Я не знаю, почему функция UDF_ArtKol не будет работать. Функции также работать нормально при использовании так (как сказал Паша): x := Leto_UdfExist("//192.168.99.1:2807/Udf_ArtKol")
| |
|
nbatocanin
|
| |
Пост N: 13
Зарегистрирован: 06.05.14
|
|
Отправлено: 08.12.14 06:38. Заголовок: Функция сервера, вто..
Функция сервера, второй раз: FUNCTION Udf_ArtKol (nUserStru) LOCAL cLetoMagKol, cLetoArt cLetoArt := leto_Alias (nUserStru, "Artikli") cLetoMagKol := leto_Alias (nUserStru, "MagKol") SELECT (cLetoMagKol) OrdSetFocus ("Mag_AM") SELECT (cLetoArt) IF (x := Leto_TableLock (nUserStru, 1)) GO TOP WHILE !Eof() (cLetoArt)->a_mk := "ABC" SKIP END DO Leto_TableUnlock (nUserStru, 1) END IF RETURN x Эта функция не изменяет файл ARTIKLI и возвращает NIL. Я ожидал, что результате Leto_TableLock будет T или F? Что означает вторые параметр в Leto_TableLock? Readme говорит только, что это число 1-32.
| |
|
Pasha
|
| Администратор
|
Пост N: 3233
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.12.14 08:50. Заголовок: Функция leto_TableLo..
Функция leto_TableLock - это не аналог FLock. Она предназначена для блокировки таблицы при выполнении некоторых действий, к примеру - получения уникального ключа для новой записи. См. пример использования в letoudf.prg, функция UDF_AppendRec Для ваших целей используйте функции leto_RecLock / leto_recUnlock
| |
|
nbatocanin
|
| |
Пост N: 14
Зарегистрирован: 06.05.14
|
|
Отправлено: 08.12.14 22:14. Заголовок: Большое спасибо! Сей..
Большое спасибо! Сейчас все работает. Я сделал функцию, которая указывает, какие записи должны быть отфильтрованы (для замены RELATION TO). Функция работает очень быстро: 110.000 записей завершено в 1,6 секунды! FUNCTION Udf_ArtKol (nUserStru, aMag, nId) LOCAL cLetoMagKol, cLetoArt, i, lImaKol LOCAL nArt, x cLetoArt := leto_Alias (nUserStru, "Artikli") cLetoMagKol := leto_Alias (nUserStru, "MagKol") SELECT (cLetoMagKol) OrdSetFocus ("Mag_AM") x := 0 SELECT (cLetoArt) GO TOP WHILE !Eof() nArt := (cLetoArt)->a_id SELECT (cLetoMagKol) lImaKol := .F. FOR i := 1 TO Len(aMag) SEEK Str(nArt,10) + Str(aMag,10) IF Found() .AND. (cLetoMagKol)->k_kol <> 0 lImaKol := .T. EXIT END IF NEXT IF Leto_RecLock (nUserStru) (cLetoArt)->a_mk := Left((cLetoArt)->a_mk,nId-1) + IIF (lImaKol, "1", " ") + SubStr((cLetoArt)->a_mk,nId+1) Leto_RecUnlock (nUserStru) x++ END IF SELECT (cLetoArt) SKIP END DO RETURN x
| |
|
nbatocanin
|
| |
Пост N: 15
Зарегистрирован: 06.05.14
|
|
Отправлено: 13.12.14 22:54. Заголовок: Я вижу, что есть фун..
Я вижу, что есть функция Leto_MakeDir, но если функция Leto_RemoveDir?
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 158
Зарегистрирован: 15.09.05
|
|
Отправлено: 08.01.15 14:31. Заголовок: Вот такой тест
Вот такой тест: procedure main() local _Server := '//127.0.0.1:2812/' REQUEST DBFCDX REQUEST LETO RDDSETDEFAULT( "DBFCDX" ) use ('file') new copy to ('file1') dbclosearea() RDDSETDEFAULT( "LETO" ) use (_Server+'file1') excl new zap APPEND FROM ('file') VIA "DBFCDX" go top browse() return в первое текстовое поле начинается с пробелом и все текстовые поля смещаются на один символ в право версия LetoDB последняя вроде ! 2014-11-17 17:10 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru) * source/client/leto1.c ! fixed gpf in some functions, that occured with no leto area
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 159
Зарегистрирован: 15.09.05
|
|
Отправлено: 08.01.15 23:15. Заголовок: А если добавлять из LETODB все ОК
А если делаем APPEND FROM из LETODB все ОК :) procedure main() local _Server := '//127.0.0.1:2812/' REQUEST DBFCDX REQUEST LETO RDDSETDEFAULT( "LETO" ) use (_Server+'file') new copy to (_Server+'file1') browse() dbclosearea() RDDSETDEFAULT( "DBFCDX" ) use ('file1') excl new zap APPEND FROM (_Server+'file') VIA "LETO" go top browse() return
| |
|
Pasha
|
| Администратор
|
Пост N: 3240
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.01.15 07:58. Заголовок: Вопрос в том, что бу..
Вопрос в том, что буфер записи leto и dbfcdx несовместим, в leto он не содержит 1-й байт deleted. Думаю, надо в leto сделать такой же формат, как и в dbfcdx
| |
|
Pasha
|
| Администратор
|
Пост N: 3241
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.01.15 19:15. Заголовок: Сделал. Теперь APPEN..
Сделал. Теперь APPEND FROM будет работать
| |
|
alkresin
|
| moderator
|
Пост N: 827
Зарегистрирован: 06.07.06
|
|
Отправлено: 11.01.15 15:13. Заголовок: Сделал небольшое исп..
Сделал небольшое исправление в server.prg, hs_createindex() - добавил строчки после IF !Empty( cBagName ): IF Empty( cTagName ) cTagName := hb_FNameName( cBagName ) ENDIF Это связано с проблемой, изложенной на [url=https://groups.google.com/forum/#!topic/harbour-users/p2f9ffWM0sk]harbour-users[/url]. Когда индекс создавался командой INDEX ON ... TO ... имя тэга было пустое, leto_addTag() его не добавлял и leto_FindTag(), соответственно, потом ничего не находил.
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 160
Зарегистрирован: 15.09.05
|
|
Отправлено: 16.01.15 15:31. Заголовок: Паша !
Паша ! Добавление данных в сторону Letodb опять не работает и при COPY TO и при APPEND FROM если первое поле тип C в нем все ОК но остальных нету если первое поле тип N - остаются оно и второе , а остальные Тю Тю :) **************** procedure main() local _Server := '//127.0.0.1:2812/' REQUEST DBFCDX REQUEST LETO //CDX use ('file') new VIA "DBFCDX" browse() copy to (_Server+'file_leto') VIA "LETO" dbclosearea() //LETO use (_Server+'file_leto') excl new VIA "LETO" go top browse() zap APPEND FROM ('file') VIA "DBFCDX" go top browse() return
| |
|
|
alkresin
|
| moderator
|
Пост N: 828
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.01.15 09:23. Заголовок: Да, действительно, е..
Да, действительно, есть проблема. Попробую разобраться.
| |
|
alkresin
|
| moderator
|
Пост N: 829
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.01.15 10:08. Заголовок: Исправил. Теперь дол..
Исправил. Теперь должно работать.
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 161
Зарегистрирован: 15.09.05
|
|
Отправлено: 27.01.15 23:15. Заголовок: Благодарю г-н Кресин !
Благодарю г-н Кресин ! Извиняюсь за поздний ответ ! Теперь все работает отлично ! Я высоко оцениваю Ваш труд и Пашин тоже ! И думаю, что проекту нужна какая-то финансовая подмога на его дальнейшее развитие . Ребята кто пользуются етим сервером давайте ето обсудим ! у нас в Болгарии говорят , попробую перевести ( Дружба есть дружба , но брынза стоит денег ) :)
| |
|
alkresin
|
| moderator
|
Пост N: 839
Зарегистрирован: 06.07.06
|
|
Отправлено: 28.01.15 09:12. Заголовок: sashaBG пишет: Благ..
sashaBG пишет: Лучше - товарищ :). "Господа" у нас даже через 25 лет после переворота 1991г. как-то не привились.
| |
|
nbatocanin
|
| |
Пост N: 16
Зарегистрирован: 06.05.14
|
|
Отправлено: 08.02.15 15:11. Заголовок: sashaBG пишет: Я вы..
sashaBG пишет: цитата: | Я высоко оцениваю Ваш труд и Пашин тоже ! И думаю, что проекту нужна какая-то финансовая подмога на его дальнейшее развитие . Ребята кто пользуются етим сервером давайте ето обсудим ! |
| Я согласен с этим. Будет хорошо, чтобы открыть счет для помощи. Если вы хотите, я могу зарегистрировать сайт LetoDB.com?
| |
|
alkresin
|
| moderator
|
Пост N: 845
Зарегистрирован: 06.07.06
|
|
Отправлено: 09.02.15 12:47. Заголовок: nbatocanin пишет: Е..
nbatocanin пишет: цитата: | Если вы хотите, я могу зарегистрировать сайт LetoDB.com? |
| Сайтом надо заниматься, чем-то его наполнять, регулярно обновлять, чтобы он жил. На это нужны в первую очередь человеческие ресурсы, которых не хватает. Когда Letodb появился на свет, Patrick Mast зарегистрировал letodb.org, но сайт мы так и не создали - не было времени и мотивации.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 470
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.15 00:02. Заголовок: Режим: RddInfo( RDDI..
Режим: RddInfo( RDDI_TABLETYPE, DB_DBF_VFP ) - работа с новыми полями, сервер делает все ok, а клиент нет. за основу взял test_dbf.prg из tests для CDX: Скрытый текст Function Main( cPath ) Local aNames := { "Petr", "Ivan", "Alexander", "Pavel", "Alexey", "Fedor", ; "Konstantin", "Vladimir", "Nikolay", "Andrey", "Dmitry", "Sergey" } Local i, aStru SET DATE FORMAT "dd/mm/yy" RDDSETDEFAULT( "DBFCDX" ) RddInfo( RDDI_TABLETYPE, DB_DBF_VFP ) cPath := 'temp' MakeDir(cPath) cPath += '\' fErase(cPath+"test1"+".dbf") dbCreate( cPath+"test1", { {"NAME" , "C", 10, 0}, ; {"NUM" , "N", 4, 0}, ; {"INFO" , "C", 32, 0}, ; {"DINFO" , "D", 8, 0}, ; {"TM" , "@", 8, 0}, ; {"TS" , "=", 8, 0}, ; {"VM" , "^", 8, 0}, ; {"ID" , "+", 4, 0} ; } ) ? "File has been created, tabletype", RddInfo( RDDI_TABLETYPE ), rddSetDefault() USE ( cPath+"test1" ) New aStru := dbStruct() ? "Fields:", Len( aStru ) FOR i := 1 TO Len( aStru ) ? i, padr(aStru[i,1], 10), aStru[i,2], aStru[i,3], aStru[i,4], hb_FieldType( i ) NEXT ? 'Press any key ...' inkey(0) FOR i := 1 TO Len( aNames ) APPEND BLANK REPLACE NUM WITH i+1000 dbSkip(0) // modify VM, sets ID, sets TS REPLACE NAME WITH aNames[ i ], ; INFO WITH "This is a record number "+Ltrim(Str(i)), ; DINFO WITH Date()+i-1 dbSkip(0) // modify VM ? str(RecNo(),3), NAME, NUM, TM, TS, str(VM,5), str(ID,5) NEXT ? "Records has been added" inkey(0) dbCloseArea() Return
| для LETO: Скрытый текст
Function Main( cPath ) Local aNames := { "Petr", "Ivan", "Alexander", "Pavel", "Alexey", "Fedor", ; "Konstantin", "Vladimir", "Nikolay", "Andrey", "Dmitry", "Sergey" } Local i, aStru SET DATE FORMAT "dd/mm/yy" RDDSETDEFAULT( "LETO" ) cPath := "//127.0.0.1:2812/temp/" leto_fErase(cPath+"test1"+".dbf") dbCreate( cPath+"test1", { {"NAME" , "C", 10, 0}, ; {"NUM" , "N", 4, 0}, ; {"INFO" , "C", 32, 0}, ; {"DINFO" , "D", 8, 0}, ; {"TM" , "@", 8, 0}, ; {"TS" , "=", 8, 0}, ; {"VM" , "^", 8, 0}, ; {"ID" , "+", 4, 0} ; } ) ? "File has been created, tabletype", RddInfo( RDDI_TABLETYPE ), rddSetDefault() USE ( cPath+"test1" ) New aStru := dbStruct() ? "Fields:", Len( aStru ) FOR i := 1 TO Len( aStru ) ? i, padr(aStru[i,1], 10), aStru[i,2], aStru[i,3], aStru[i,4], hb_FieldType( i ) NEXT ? 'Press any key ...' inkey(0) FOR i := 1 TO Len( aNames ) APPEND BLANK REPLACE NUM WITH i+1000 dbSkip(0) // modify VM, sets ID, sets TS REPLACE NAME WITH aNames[ i ], ; INFO WITH "This is a record number "+Ltrim(Str(i)), ; DINFO WITH Date()+i-1 dbSkip(0) // modify VM ? str(RecNo(),3), NAME, NUM, TM, TS, VM, ID NEXT ? "Records has been added" inkey(0) dbCloseArea() Return
| в LETO: - типы T, @ превращаются в = - пустое поле типа = не заполняется значением TimeStamp - значения VM и ID не отображаются, видим NIL или я что то не так делаю ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 471
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.15 00:05. Заголовок: PS сервер делает все..
PS сервер делает все ok для полей типа ^ и +
| |
|
SergKis
|
| постоянный участник
|
Пост N: 472
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.15 12:40. Заголовок: смотрю в сервере отк..
смотрю в сервере отключены триггера - это специально или нарочно ? Скрытый текст
PROCEDURE StartServer() PUBLIC oApp := HApp():New() REQUEST DBFNTX REQUEST DBFCDX #ifdef __BM REQUEST BMDBFNTX REQUEST BMDBFCDX #endif WrLog( "Leto DB Server has been started." ) leto_InitSet() leto_CreateData() leto_HrbLoad() IF ! leto_Server( oApp:nPort, oApp:nTimeOut ) #if __HARBOUR__ > 0x020100 WrLog( "Socket error " + hb_socketErrorString() ) #else WrLog( "Socket error " ) #endif ENDIF WrLog( "Server has been closed." ) // !!!!!!! уже конец работы IF ! EMPTY( oApp:cTrigger ) HB_RddInfo( RDDI_TRIGGER, oApp:cTrigger, leto_Driver( oApp:nDriver ) ) ENDIF IF ! EMPTY( oApp:cPendingTrigger ) HB_RddInfo( RDDI_PENDINGTRIGGER, oApp:cPendingTrigger, leto_Driver( oApp:nDriver ) ) ENDIF RETURN
|
| |
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|
|