Форум » LetoDB, HbNetio. » Вопросы новичка... » Ответить

Вопросы новичка...

Andrey: Взял последнюю версию с "Новая страница с бинарниками", установил на 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" Помню что где то обсуждали, а результат не запомнил...

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

nbatocanin: Лучше удалять при входе, так гарантированно удалится весь мусор если даже прога слетела аварийно. или двойная проверка - при выходе и при входе Это не так просто (хотя и возможно). Если программа позволяет использовать несколько старт на той же рабочей станции (USER-1, USER-2...), как вы знаете, какие таблицы следует исключить?

nbatocanin: А откуда такая инфа про ограничение в около 500-600,000 (я так понял записей) ? Да, 600,000 записей. Я попробовал, а потом подтвердили на Harbour-users. Конечно, зависит от объема доступной памяти.

Haz: nbatocanin пишет: (USER-1, USER-2...), как вы знаете, какие таблицы следует исключить? я обычно времянки делаю в домашнем каталоге пользователя , там же сохраняю настройки персонально под пользователя


Петр: nbatocanin пишет: Это не так просто (хотя и возможно). Если программа позволяет использовать несколько старт на той же рабочей станции (USER-1, USER-2...), как вы знаете, какие таблицы следует исключить? А зачем вам это знать? Пусть программа сама формирует имена временных файлов, сохраняет их и удаляет STATIC aTmpFiles INIT PROCEDURE InitTmpFiles aTmpFiles := {} .. RETURN PROCEDURE Main LOCAL cTmp .. // конечно здесь можно и директорию указать и префикс присвоить, например, привязав его к текущему пользователю, // и расширение для текущего RDD получить автоматом, но в этом случае - это не столь существенно FClose( hb_FTempCreateEx( @cTmp, NIL, "tmp_", ".cdx" ) ) AAdd(aTmpFiles, cTmp) .. FErase(cTmp) INDEX ON &cExp TO (cTmp) .. RETURN EXIT PROCEDURE DeleteAllTmpFile() LOCAL tmpFile .. FOR EACH tmpFile IN aTmpFiles FErase(tmpFile) NEXT .. RETURN

nbatocanin: А зачем вам это знать? Пусть программа сама формирует имена временных файлов, сохраняет их и удаляет Я не уверен, что мы понимаем друг друга - простите, мое знание русского языка очень плохое. Моя программа работает таким образом: создаются автоматически временны файлов и система заботится об их удалении. Вот как выглядят мои программы: [pre2]T_BEGIN T_DEFINE TMP TMP FIELD t_id NUMERIC 10,0 TMP FIELD t_naz CHAR 35 TMP INDEX Upper(t_naz) TAG Tmp T_CREATE TMP ALIAS Tmp T_USE Partneri T_Order ("Par_Naz") T_RELATION TO p_id INTO Kartice T_FLock ("Partneri") ... T_END [/pre2] Когда программа выполнить команду T_END, удаляет все временные файлы, закрывает DBF, возвращает оригинал Order... Если какой-либо из этих команд не выполняется (например T_Flock()), система возвращается в прежнее состояние. Временные файлы создаются/удаляются на рабочей станции. Теперь мне нужно создать временные файлы на сервере (которые LetoDB, к сожалению, не поддерживается). Вот почему мне нужен индекс в другую папку. Если смешать временные файлы и основные данные, могут возникнуть проблемы, например, в случае различных авария.

digikv: Ненаде погледај пример који сам закачио. Сваки клијент креира своје привремене датотеке на серверу које се не поклапају ни са једним другим клијентом и на крају извршавања програма се бришу. Овде сам поставио и питање за грешку у leto_groupby. Цео пример ради са мојим сервером који се налази видљив на интернету. [url=https://drive.google.com/open?id=0B2TAOFowS46iTzg1a3N0Vk9Hdkk[/url]

Andrey: nbatocanin пишет: Теперь мне нужно создать временные файлы на сервере (которые LetoDB, к сожалению, не поддерживается). Да не нужно создавать временный индексы на локальной станции. Создавай в той же папке что и база на Leto. Какая разница где создавать индексы. Это не принципиально для программы. Просто сделай чтобы программа запоминала список индексов, КОТОРЫЕ ПОТОМ НУЖНО УДАЛИТЬ - и всех делов то...

nbatocanin: Да не нужно создавать временный индексы на локальной станции. Создавай в той же папке что и база на Leto. Какая разница где создавать индексы. Это не принципиально для программы. Просто сделай чтобы программа запоминала список индексов, КОТОРЫЕ ПОТОМ НУЖНО УДАЛИТЬ - и всех делов то... Я уже делаю именно так. Почему я хочу отделить мои временные файлы? Если смешать временные файлы и основные данные, могут возникнуть проблемы, например, в случае различных авария. Теперь все временные файлы в //192.168.99.1/Temp. В случае повреждения, я могу легко найти их, анализировать и удалить. Это не так легко, если они находятся между основными данными. Но все это не имеет ничего с командой INDEX которая теперь содержит ошибку, которая должна быть исправлена.

Петр: nbatocanin пишет: Я не уверен, что мы понимаем друг друга - простите, мое знание русского языка очень плохое. Я думаю, что не только язык приводит нас к непониманию nbatocanin пишет: Моя программа работает таким образом: создаются автоматически временны файлов и система заботится об их удалении. Вот как выглядят мои программы: T_BEGIN T_DEFINE TMP TMP FIELD t_id NUMERIC 10,0 TMP FIELD t_naz CHAR 35 TMP INDEX Upper(t_naz) TAG Tmp T_CREATE TMP ALIAS Tmp T_USE Partneri T_Order ("Par_Naz") T_RELATION TO p_id INTO Kartice T_FLock ("Partneri") ... T_END Из этого фрагмента нельзя даже понять зачем вы создали TMP. В harbour для создания временных файлов (таблиц) есть специальная функция hb_dbCreateTemp. От того, что обыкновенную таблицу вы назвали Tmp она временной не стала. Вы можете легко найти свою "временную" таблицу с помощью hb_dbExists() и после анализа удалить с помощью hb_dbDrop(). и т.д. и т.п. nbatocanin пишет: Но все это не имеет ничего с командой INDEX которая теперь содержит ошибку, которая должна быть исправлена. Команду INDEX не правильно обрабатывает препроцессор?

nbatocanin: Из этого фрагмента нельзя даже понять зачем вы создали TMP. Эта программа только показывает как работает моя система для временных файлов. Вместо того: [pre2] cFile := HB_DbCreateTemp() DBCreate (..) ... HB_FErase (cFile) [/pre2] Я пишу: [pre2] T_BEGIN T_DEFINE TMP ... T_CREATE TMP ALIAS Tmp ... T_END [/pre2] И тогда все T_ команды препроцессор переводит в DBCreateTemp, DBCreate... Я надеюсь, что я сейчас лучше объяснить? Команду INDEX не правильно обрабатывает препроцессор? Нет. Препроцессор не может знать содержимое переменной cTmp. Я думаю, что проблема в том, что препроцессор в зависимости от опций TAG транслируется в две команды: [pre2] INDEX ON p_tmp TAG "test" TO (cTmp) => ordCreate( (cTmp), "test", "p_tmp", {|| p_tmp}, ) INDEX ON p_tmp TO (cTmp) => dbCreateIndex( (cTmp), "p_tmp", {|| p_tmp}, if( .F., .T., NIL ) ) [/pre2] OrdCreate работает правильно, DBCreateIndex не работает нормально в этом случае.

Pasha: В letodb.ini добавил: Default_Driver = NTX Сделал простой тест: proc main request leto, DBFCDX Local cPath := "//127.0.0.1:2812/" RddSetDefault ("LETO") Leto_Connect (cPath) USE (cPath + 'account') SHARED NEW index on kors to (cPath+'apt10/a.ntx') retu nil в результате в папке apt10 создался индекс a.ntx, как и заказывали, т.е. все отработало так, как и в DBFNTX

Петр: nbatocanin пишет: OrdCreate работает правильно, DBCreateIndex не работает нормально в этом случае. FUNCTION dbCreateIndex( cOrderBagName, cKeyExpr, bKeyExpr, lUnique, cOrderName ) RETURN ordCreate( cOrderBagName, cOrderName, cKeyExpr, bKeyExpr, lUnique ) nbatocanin пишет: Эта программа только показывает как работает моя система для временных файлов. Вместо того: cFile := HB_DbCreateTemp() DBCreate (..) ... HB_FErase (cFile) ?????????????????? hb_dbCreateTemp( <cAlias>, <aStruct>, <cRDD>, <nConnection> ) -> <lSuccess> Generates and opens a new dbf with a temporary filename in exclusive mode, deletes it automatically when closed. All indexes created for this table, should ideally have the temporary flag on, so those get deleted too, when closed.

nbatocanin: USE (cPath + 'account') SHARED NEW index on kors to (cPath+'apt10/a.ntx') retu nil в результате в папке apt10 создался индекс a.ntx, как и заказывали, т.е. все отработало так, как и в DBFNTX Вы правы, я сделал что-то неправильно :( Извините.

nbatocanin: Петр пишет: ?????????????????? hb_dbCreateTemp( <cAlias>, <aStruct>, <cRDD>, <nConnection> ) -> <lSuccess> Я смешал с командой HB_FTempCreate, извините. Система, которую я использую есть "framework" для таких команд, как dbCreateTemp. Я не использую dbCreateTemp, потому что, когда я делал эту систему команда не существует. Но система работает точно так же, как вы писали, только обеспечивает более чистый код и более простое управление. Система поддерживает несколько команд, а не только временных файлов (FLock, RELATION, Order, FILTER..).

nbatocanin: Я нашел ошибку. Паша, пожалуйста, попробуйте эту программу: [pre2] DBRoot := "//192.168.99.10:2807/xApp" a := {{"t_name", "C", 30, 0}} DBCreate (DBroot + "\test", a) USE Test EXCLUSIVE ALIAS Test NEW Test->(DBAppend()) Test->t_name := "Bbbbbbb" Test->(DBAppend()) Test->t_name := "Aaaaaaa" Test->(DBAppend()) Test->t_name := "Ccccccc" cTmp := DbRoot + "\temp\test02" INDEX ON Upper(t_name) TO (cTmp) GO TOP Browse() // B, A, C ??? cTmp := DbRoot + "\temp\test03" INDEX ON Upper(t_name) TAG "test" TO (cTmp) GO TOP Browse() // A, B, C [/pre2]

Pasha: Поправил

nbatocanin: работает, большое спасибо! NB

Andrey: Сервер LetoDb начал аварийно падать... Прошёл год, не знал ни каких проблем... Падает так, что ручками заново приходиться поднимать... Сервер стоит на CentOS release 6.7 (Final), версия чуть-чуть подправленная. Вот что в логе: Leto DB Server v.2.15b3.1 ! INIT: DataPath=/apps/letodb/data, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10 07/30/16 15:12:59: /apps/letodb/bin/letoudf.hrb has been loaded. 30.07.2016 16:08:47: Error DBFCDX/1011 Write error: /apps/letodb/data/dbasezaivki/18_sklad.dbf ERROR! SETHRBERROR - pUStru not found!!!!!!!!!!!!!!!!!!!! leto_errInternal!!!!!!!!!!!!!!!!!! База 18_sklad.dbf то пишется, то не пишется... Индекс тоже делается через раз. Что за ошибка такая ? Подскажите в чем дело ?

Pasha: Andrey пишет: Сервер LetoDb начал аварийно падать... Прошёл год, не знал ни каких проблем... Падает так, что ручками заново приходиться поднимать... Сервер стоит на CentOS release 6.7 (Final), версия чуть-чуть подправленная. Вот что в логе: Leto DB Server v.2.15b3.1 ! INIT: DataPath=/apps/letodb/data, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10 07/30/16 15:12:59: /apps/letodb/bin/letoudf.hrb has been loaded. 30.07.2016 16:08:47: Error DBFCDX/1011 Write error: /apps/letodb/data/dbasezaivki/18_sklad.dbf ERROR! SETHRBERROR - pUStru not found!!!!!!!!!!!!!!!!!!!! leto_errInternal!!!!!!!!!!!!!!!!!! База 18_sklad.dbf то пишется, то не пишется... Индекс тоже делается через раз. Что за ошибка такая ? Подскажите в чем дело ? Мне практически невозможно ответить на этот вопрос. Сервер судя по всему не пересобирался, раз версия там 2.15b3.1. Что менялось ? Непонятно. Какой код приводит к ошибке ? Фиг его знает. Мне пару месяцев назад товарищ из-за рубежа начал жаловаться на падение сервере с ошибкой leto_errInternal!!!!!!!!!!!!!!!!!! Ничего, кроме этого сообщения в letodb.log я от него так и не добился. Ну и естественно, ничем не смог помочь. Это как раз похожий случай. Помочь я смогу, если буду иметь максимум информации о ситуации, приводящей к ошибке.

Andrey: Pasha пишет: Это как раз похожий случай. Помочь я смогу, если буду иметь максимум информации о ситуации, приводящей к ошибке. Паша, случай у меня оказывается тяжёлый. Третий день прога падает. Юзера задолбали, это еще выходные ... Сайт уже давно не трогал, программу отправки на сайт тоже не трогал. Тестировал прогу и сам сервер на Windows-машине, всё отлично идёт ! Беда оказывается в самой CentOS release 6.7 Она зараза работает даже когда на диске места нет ! Т.е. сервер LetoDB работает, когда приходит время записывать в базу, если десяток байт есть - пишет, нет - то не пишет и "падает" ! Всё просто оказывается - нет места на диске под базы и индекс. На Винде такой проблемы нет (там диски большие), а на CentOS есть (лимит на машину у провайдера). Было бы ОЧЕНЬ хорошо при сваливании такой ошибке в log-файле писалось сколько места на диске есть !!! Тогда хоть понимать будем в чём ошибка. Функции же нет в LetoDB - сколько свободного места на диске. Сделай тогда пожалуйста отладку в лог-файл в следующей версии сервера.



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