Форум » 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

Andrey: Pasha пишет: dbInfo требует открытой рабочей области, вестимо Т.е. не открыв базу, я не могу узнать версию клиента LetoDB ? А если по умолчанию будет стоять драйвер DBFCDX ? Как тогда я узнаю версию клиента LetoDB ? Очень неудобно. А нельзя сделать функцию типа LETO_GETCLIENTVERSION() ?

Pasha: Да, неудобно то, что у функции rddInfo() нет соответствующей команды, и приходится использовать dbInfo. А для dbInfo неважно, какой драйвер стоит по умолчанию. Надо, чтобы вызов был из рабочей области, которая использует нужный rdd Отдельную функцию - конечно, можно добавить

Andrey: Pasha пишет: Отдельную функцию - конечно, можно добавить Спасибо БОЛЬШОЕ ! Проблема при создании индекса. Делаю так: MsgDebug(cIndex,cTag,cFileIndx,cFilterTo) INDEX ON &cIndex TAG(cTag) TO (cFileIndx) FOR &cFilterTo ADDITIVE В окне перед созданием индекса вывожу имя файла cFileIndx -> D:\TEMP\tmp_base_leto_1.cdx А на создании индекса программа рушиться и пишет: Error LETO/1006 Ошибка создания: D:\LETODB.Server\D:\TEMP\tmp_base_leto_1.cdx (DOS Error 123) Как задать создание индекса на локальном компе ? Или на сервере LetoDB, можно как то задавать ? Т.е. база на LetoDB, а индекс строю на локальном компе (он временный, на один раз).


Pasha: Локально индекс не создается. А для создания индекса на сервере надо указать путь относительно DataPath

Andrey: Спасибо Pasha !

Andrey: Создал 3 индекса на сервере. Как переключаться на них ? Вот код который перестал работать: SELECT WTOVAR DBSETORDER(1) GOTO TOP SEEK(nKod) DO WHILE WTOVAR->KOD == nKod .... SKIP ENDDO Подскажите пожалуйста как переделать код для LetoDB !

Pasha: Как бы не видно сам код. Как индекс создается, остается ли он открытым, непонятно.

Andrey: Pasha пишет: Как индекс создается, остается ли он открытым, непонятно. Индексные файлы на сервере создаются (визуально вижу). База и индексы открыты. Может дело еще в одной базе, более подробный код: SELECT WSPISOK // база локальная открыта DBFCDX монопольно DO WHILE !EOF() ProcessMessages() // Чтобы форма НЕ замирала nKod := WSPISOK->KOD SELECT WTOVAR DBSETORDER(1) GOTO TOP SEEK(nKod) // MsgDebug( FOUND() ) DO WHILE WTOVAR->KOD == nKod // расчёт .... SKIP ENDDO SELECT WSPISOK WSPISOK->KOD1 := ... // запись расчётов SKIP ENDDO До переделки под Leto - этот код считал. Нашёл - SEEK(nKod) перестал работать !!! FOUND() Всегда возвращает .F. Почему ? Чем можно заменить ?

Pasha: Понятнее не стало. В цикле: DBSETORDER(1) GOTO TOP SEEK(nKod) DO WHILE WTOVAR->KOD == nKod ... Кстати, go top здесь лишний. Можно проверить, что за индекс открыт. После DBSETORDER(1) выдать ? OrdKey() ? OrdName() ? OrdFor() и тому подобное

Dima: Всего кода я конечно не видел Andrey пишет: SELECT WSPISOK Возможно после нужен WSPISOK->(Dbgotop()) Если это рабочий код а не просто пример его надо переделать. [pre2] WSPISOK->(Dbgotop()) DO WHILE !WSPISOK->(EOF()) ProcessMessages() // надеюсь тут нет смены Алиаса ? nKod := WSPISOK->KOD WTOVAR->(DBSETORDER(1)) // лучше вынести до DO WHILE !WSPISOK->(EOF()) если там где ...не меняется ордер If WTOVAR->(dbSEEK(nKod)) WTOVAR->(dbOrderInfo(DBOI_SCOPEBOTTOM,,,nkod)) DO WHILE !WTOVAR->(eof()) .... WTOVAR->(DbSKIP()) ENDDO WTOVAR->(dbOrderInfo(DBOI_SCOPEBOTTOMCLEAR)) // упс я забыл добавить...забил се мозк Minigui ;) endif WSPISOK->KOD1 := ... // запись расчётов WSPISOK->(DBSKIP()) ENDDO [/pre2]

Andrey: Pasha пишет: Кстати, go top здесь лишний. Согласен. Но на всякий случай... Можно проверить, что за индекс открыт. После DBSETORDER(1) SELECT WTOVAR DBSETORDER(1) SEEK(nKod) lRet := FOUND() MsgDebug(lRet,nMaster,ALIAS(), OrdKey(), OrdName(), OrdFor() ) DO WHILE WTOVAR->KOD == nKod Поставил. И сразу обнаружил фигню: Возвращает: F, 33, WTOVAR, "STR(KOD)+STR(KVIP)", "tovarvip", "!DELETED()" Наверно где то в коде по другому срабатывает... У меня есть в коде "STR(KOD)+STR(KVIP)", но эта выборка идёт после выбора из Tbrowsa oBrw1 после расчета количества KOD ! Там вообще другой prg и строиться новое окно с Tbrowse oBrw3. cFileTag := PATH_TEMP + "tmp_tovar_leto_tag.cdx" DEFINE WINDOW Form_Tov3 ; .... SELECT WTOVAR DBSetOrder( 1 ) goto TOP // файл для SCOPE cTag := 'tovarvip' cKey := 'STR(KOD)+STR(KVIP)' lUnq := .F. //OrdCreate( cFileTag, cTag, cKey, &( '{||'+cKey+'}' ), lUnq) OrdCreate( , cTag, cKey, &( '{||'+cKey+'}' ), lUnq) DEFINE TBROWSE oBrw3 ; ...... cFileTag использовал для локальной отладки, а потом убрал вообще. Ничего не понимаю, как вновь созданный индес может менять своё значение "KOD" на "STR(KOD)+STR(KVIP)"...

Andrey: Dima пишет: Если это рабочий код а не просто пример его надо переделать. Рабочий ! В отдельной программе работает. Dima пишет: ProcessMessages() // надеюсь тут нет смены Алиаса ? Стандартная функция минигуи DO EVENTS Не меняет алиас.

Andrey: Блин..... Нашёл в папке чужой индексный файл, который совпадает с именем базы.... Ларчик открывается вообще просто.... Терпеть не могу это автооткрытие индексов !!! Опять попал на старые Всегда отключал его и делал имена файлов индексов отличные от имени базы! Как для LetoDB отключить открытие индексов автоматом вместе с базой ? На всякий случай....

Andrey: Pasha пишет: выдать ? OrdKey() ? OrdName() ? OrdFor() и тому подобное Приведи пожалуйста еще функции какие можно использовать для Leto... А то от стандартного CDX перестали работать.

Dima: Andrey пишет: Как для LetoDB отключить открытие индексов автоматом вместе с базой ? Ни как , обсуждали уже. И Павел отказался это исправлять.

Andrey: Dima пишет: Ни как , обсуждали уже. И Павел отказался это исправлять. Понял, Спасибо !

Andrey: Как пройтись по папкам на LetoDB и получить список всех файлов вида "/папка/папка/файл" ? Сделал код, но он кривоватый, не учитывает вложенные папки... aDir := {} aDir0 := Leto_Directory( M->cPubPathLeto , "D" ) aFile0 := Leto_Directory( M->cPubPathLeto + "*.*" ) IF LEN(aDir0) > 0 FOR nI := 1 TO LEN(aDir0) cPath := aDir0[nI,1] IF cPath == "." .OR. cPath == ".." ELSE aFile := Leto_Directory( M->cPubPathLeto + cPath + "/*.*" ) FOR nJ := 1 TO LEN(aFile) AADD( aDir, "/"+cPath + "/" + aFile[nJ,1] ) NEXT ENDIF NEXT ENDIF IF LEN(aFile0) > 0 FOR nI := 1 TO LEN(aFile0) AADD( aDir, aFile0[nI,1] ) NEXT ENDIF aFile := ASORT(aDir)

Dima: Andrey http://clipper.borda.ru/?1-4-0-00001051-000-0-0-1427848859

Andrey: Спасибо Dima ! То что надо !

Andrey: Сделал еще 2 проекта-теста на МиниГуи. Копирование файлов через Leto_MemoRead(), Leto_MemoWrit() и создание zip-архива с отправкой на LetoDB. Исправил 2 предыдущих проекта. Общий архив - https://cloud.mail.ru/public/GiWn/cEYHCiBVT Комментарии и критика приветствуются !



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