Форум » LetoDB, HbNetio. » LetoDB через интернет » Ответить

LetoDB через интернет

digikv: Почему я не могу создать dbf файл на сервере 178.149.57.133:2812? Я объявил этот сервер должен быть доступен всем через интернет для тестирования.

Ответов - 20

PSP: Порт открыт, хост отвечает. Рассказывайте подробнее. На этапе ip:port всё в порядке.

digikv: letodb_1.log 08.05.2016 19:09:58: Error DBFCDX/1001 Open error: /home/digi/databases/fiskal/vlasnik.dbf

Pasha: Я подключаюсь к серверу с помощью dbedit: dbedit.exe -f -letodb=//178.149.57.133:2812 и вижу 2 файла (по-видимому это папки) Fiskal и sok. Хотя почему-то атрибута "D" - directory нет Если это *nix, то при создании файла надо учитывать регистр, т.е. создавать файл /Fiskal/vlasnik.dbf, а не /fiskal/vlasnik.dbf может быть, проблема в этом.


Andrey: Pasha пишет: Если это *nix, то при создании файла надо учитывать регистр Да, это точно. Я тоже налетал на такую же ошибку.

digikv: LetoDB сервер установлен на linux, и поэтому была проблема с маленькой или большой буквы. Спасибо за помощь.

digikv: Как со стороны клиента я могу узнать, является ли LetoDB сервер установлен на linux или на windows?

Pasha: digikv пишет: Как со стороны клиента я могу узнать, является ли LetoDB сервер установлен на linux или на windows? Увы, средствами letodb сейчас никак

Andrey: digikv пишет: Как со стороны клиента я могу узнать, является ли LetoDB сервер установлен на linux или на windows? Сделай UDF-функцию, которая на сервере запускает команду: ver > ver.txt А потом анализируй содержимое файла ver.txt на наличие слова "Windows" и узнаешь что на сервере установлено. Если файл не создаётся, значит - "установлен на linux" Попробуй тесты https://cloud.mail.ru/public/48Zj/ZDShR5PNj

Softlog86: Функция нужная с точки зрения получения какой-то информации . Не знаю , зачем Юзеру она может быть полезна .... Ему до-фени где и как хранится база к которой он имеет доступ .

Петр: Andrey пишет: Сделай UDF-функцию, которая на сервере запускает команду: ver > ver.txt Я бы выполнял функцию OS() и возвращал результат Softlog86 пишет: Не знаю , зачем Юзеру она может быть полезна .... Продвинутый Юзер называется Админ, а админам иногда дают порулить серверами

digikv: Softlog86 пишет: Не знаю , зачем Юзеру она может быть полезна .... Я хочу, чтобы создать новые индексы. Сначала нужно удалить старые (использую RUN del *.cdx для windows или RUN rm *.cdx для linux). Есть еще примеры.

Andrey: digikv пишет: Я хочу, чтобы создать новые индексы. Сначала нужно удалить старые (использую RUN del *.cdx для windows или RUN rm *.cdx для linux). Для этого (удаления) есть команды: FileDelete(), FErase() #include "Directry.ch" PROCEDURE Main LOCAL aCdxFiles := Directory( "*.CDX" ) AEval( aCdxFiles, { |aFile| FErase( aFile[ F_NAME ] ) } ) RETURN Для Leto есть специальная команда: LETO_FERASE( cFileName ) --> -1 при неудаче Смотри документацию по Leto - Readme.txt

petr707: Przemek рекомендует использовать hb_dbDrop(..) вместо файловых функций click here тут = = = Using generic file io functions to delete index files is not good idea for portable programs. If you know table name then use: hb_dbDrop( cTablePathName, cIndexPathName ) If you do not know table name then use: hb_dbDrop( , cIndexPathName ) ...

Петр: petr707 пишет: Przemek рекомендует И еще м.б. полезной рекомендация The indexes are slightly smaller and faster, i.e. add to your code: hb_rddInfo( RDDI_INDEXPAGESIZE, 1024, "DBFCDX" ) Old indexes will work without any problems but after reindex new ones are created which are not backward compatible so if you would want to make program downgrade to version compiled by old Harbour you will have to create new indexes.

Pasha: Добавил функцию OS() на сервере. Получить платформу версию сервера можно вызовом leto_UDF("OS")

digikv: leto_groupby не очень хорошо работает с параметром scopetop и scopebottom Пример: [pre2] Procedure Main() REQUEST LETO RDDSETDEFAULT( "LETO" ) SET DATE FORMAT "DD.MM.YYYY" set deleted on _cPath := "//digikv.dynu.com:2812/sokdoo/" IF leto_Connect(_cPath)==-1 Alert("NIJE USPOSTAVLJENA VEZA SA SERVEROM LetoDB") QUIT ENDIF USE (_cPath+"robno.dbf") INDEX (_cPath+"robno.cdx") NEW ALIAS robno Robno->( ordSetFocus('PoMagacinima') ) aArr := Robno->( leto_GroupBy( "sifra", "ulaz, izlaz", , STR( 1, 3 ), STR( 1, 3 )+DTOS(CTOD("31.01.2015")) ) ) ASort( aArr,,, {| x, y | x[ 1 ] < y[ 1 ] } ) ? hb_valtoexp( aArr ) RETURN [/pre2] Члены матрицы с первым элементом 239 и 533 не должны быть в этой матрице

digikv: Я сделал свою функцию, которая работает для rddcdx и тогда все ОК [pre2] FUNCTION RDD_GROUPBY( cGroup, cFields, cFilter, xScopeTop, xScopeBottom ) LOCAL aResult := {} LOCAL aFields := hb_RegexSplit( ",", cFields ) LOCAL bFilter := IIF( hb_isstring(cFilter), hb_macroblock( cFilter ), NIL ) LOCAL aBlocks := ARRAY( LEN( aFields ) ) LOCAL bBlock := FieldBlock(cGroup) LOCAL aTemp := ARRAY( LEN( aFields ) + 1 ) aFILL( aTemp, 0 ) aEVAL( aFields, { |cValue, nIndex| aBlocks[nIndex] := IIF(cValue=="#", {|| 1}, FieldBlock( cValue )) } ) IF !hb_isnil( xScopeTop ); ordScope( 0, xScopeTop ); ENDIF IF !hb_isnil( xScopeBottom ); ordScope( 1, xScopeBottom ); ENDIF dbEval( { || ( ; nPos := aSCAN(aResult, {|aVal| aVal[1] == EVAL(bBlock)}), ; IIF( nPos==0, ( aADD( aResult, aCLONE(aTemp) ), nPos := LEN( aResult ), aResult[nPos,1] := EVAL(bBlock) ), NIL ), ; aEVAL( aBlocks, { |bValue, nIndex| aResult[nPos,nIndex+1] += EVAL( bValue ) } ) ) }, bFilter ) IF !hb_isnil( xScopeTop ); ordScope( 0, NIL ); ENDIF IF !hb_isnil( xScopeBottom ); ordScope( 1, NIL ); ENDIF RETURN aResult [/pre2]

Dima: digikv Завернул оба примера в тэг PRE2 , иначе они плохо читаемы.

Pasha: Проблема не с leto_groupBy, а с длинным именем индекса. Если вместо Robno->( ordSetFocus('PoMagacinima') ) использовать Robno->( ordSetFocus( 6 ) ) то все работает нормально. ordSetFocus('PoMagacinima') не находит нужный индекс, поэтому и scope не работает

Dima: digikv пишет: Robno->( ordSetFocus('PoMagacinima') ) Максимальная длина имени тэга 10 символов (для CDX) , если что.



полная версия страницы