Автор | Сообщение |
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Ответов - 148
, стр:
1
2
3
4
5
6
7
8
All
[только новые]
|
|
|
| |
Пост N: 415
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.15 11:38. Заголовок: Andrey пишет: если..
Andrey пишет: цитата: | если раз 10 - колёсиком мышки покрутить, |
| минут 10 крутил колесиком , палец уже устал а база никак не хочет отсоединяться и все работает как положено Andrey пишет: смотреть чего понаписал в исходнике
|
|
|
|
| постоянный участник
|
Пост N: 3920
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 11:54. Заголовок: Haz пишет: смотреть..
Haz пишет: цитата: | смотреть чего понаписал в исходнике |
| Отдельно программа работает КАК ЧАСЫ (ни как не убивается....) ! Занимает 2,5 Мб - на диске и в памяти. Включаю эту же программу в свою систему (5.5Мб на диске и 4.8 Мб в памяти) и на этой же базе получаю вылет. Колесиком вверх-вниз секунд 20 и вылет. Я понимаю, что не каждый юзер так будет делать, но у меня и быстрей иногда сваливается с такой же ошибкой: Error DBCMD/2001 Файл не открыт: При создании TBROWSE открываю всю базу. Потом по кнопке делаю условную индексацию (этой базы) по городу и уменьшаю список показа записей. Может в этом дело ? При большом ехе-нике перестает работать ?
|
|
|
|
| |
Пост N: 416
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.15 12:06. Заголовок: Andrey пишет: Включ..
Andrey пишет: цитата: | Включаю эту же программу в свою систему (5.5Мб) и на этой же базе получаю вылет |
| 1 Возможно в большой системе другие установки или есть конфликт имен .. от размера исполняемого модуля это точно не зависит 2 Смотреть что висит на ON CHANGE и ON DRAW твоего справочника Andrey пишет: цитата: | При создании TBROWSE открываю всю базу. Потом по кнопке делаю условную индексацию (этой базы) по городу и уменьшаю список показа записей. Может в этом дело ? |
| Может и в этом , нужно как минимум oBrw:Reset() после того как была изменена рабочая область PS/ а если не делать условную индексацию - эффект отключения наблюдяется ?
|
|
|
|
| постоянный участник
|
Пост N: 3921
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 12:36. Заголовок: Haz пишет: 1 Возмож..
Haz пишет: цитата: | 1 Возможно в большой системе другие установки или есть конфликт имен .. |
| А какие другие установки ? Конфликта имен точно нет. Переменные все переискал в других исходниках - таких нет. Были, уже удалил. Haz пишет: цитата: | 2 Смотреть что висит на ON CHANGE и ON DRAW твоего справочника |
| ON GOTFOCUS ( MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus) ; ON CHANGE (CorrectionFirstLast("oBrw_1"),MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus) Функция MyChangeBrowse(cAlias) Скрытый текст //////////////////////////////////////////////////////////// STATIC FUNCTION MyChangeBrowse(cAlias) LOCAL nI, cVal nI := INDEXORD() IF nI == 0 cVal := NTOC(Recno()) + '/' + NTOC(RecCount()) ELSE cVal := NTOC(OrdKeyNo()) + '/' + NTOC(OrdKeyCount()) ENDIF Form_Spr.Label_StatusBar2.Value := " Запись: " + cVal Form_Spr.oBrw_1.Setfocus RETURN Nil
| Функция CorrectionFirstLast("oBrw_1") не моя, брал и примеров: Скрытый текст *--------------------------------------------------------------------------------* Static procedure CorrectionFirstLast(oBrw) *--------------------------------------------------------------------------------* IF &oBrw:nRowCount() == &oBrw:nRowPos() &oBrw:Refresh( .F. ) ENDIF IF &oBrw:nLogicPos() > 0 .and. &oBrw:nRowPos() == 1 &oBrw:Refresh( .F. ) ENDIF RETURN
| Haz пишет: цитата: | Может и в этом , нужно как минимум oBrw:Reset() после того как была изменена рабочая область |
| Да я рабочую область и не меняю. Алиас тот же самый. Скрытый текст cBaseMain := "STREET" nSel := SELECT(cBaseMain) IF nSel > 0 DBCLEARINDEX() // Удаление временного индексного файла myDelTmpIndex(cFileIndexTemp) MyIndexOpenRestore(aStaticMemIndexOpen) // Восстановить открытые индексы nOrder := INDEXORD() // Результат: NUMBA BuildIndex( cBaseMain, "STREET00",,, cFileIndexTemp , ; "KCITY=="+HB_NtoS(nCity)+".AND.!DELETED()", ; "UPPER(STREET)" ) // { "Идет индексация БД-справочника",,, "15/2", "2/15" } ) DBSetOrder( nOrder + 1 ) // переключится на новый индекс RefreshBrowse() goto TOP oBrw_1:Reset() oBrw_1:Refresh(.T.) ELSE MsgDebug("Нет открытой базы:", cBaseMain, "Тек.база:", ALIAS(), SELECT() ) ENDIF ENDIF Form_Spr.oBrw_1.Setfocus RETURN NIL
|
|
|
|
|
| |
Пост N: 417
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.15 13:17. Заголовок: ОТКЛЮЧИ ON CHSNGE и ..
ОТКЛЮЧИ ON CHANGE и попробуй без него Andrey пишет: Это что делает ?
|
|
|
|
| постоянный участник
|
Пост N: 3922
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 13:55. Заголовок: Haz пишет: Это что ..
Haz пишет: Поиск по введенным буквам: Скрытый текст //////////////////////////////////////////////////////////// STATIC FUNCTION RefreshBrowse() LOCAL cSeek := Alltrim( Form_Spr.Text_1.Value ) LOCAL cStrSeek := '('+Alias()+')->'+cStPole_DbSetFilter LOCAL cExp := "'" + UPPER(cSeek) + "' $ UPPER(MASTER->MASTER)" cExp := "'" + UPPER(cSeek) + "' $ UPPER("+cStPole_DbRelation+")" //MsgDebug(cExp, cStrSeek) IF !Empty(cSeek) ( Alias() )->( DbSetFilter( &("{||" + cExp + "}"), cExp ) ) ELSE ( Alias() )->( DbClearFilter() ) END oBrw_1:Reset() Form_Spr.oBrw_1.Setfocus RETURN Nil
|
|
|
|
|
| постоянный участник
|
Пост N: 3923
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 13:59. Заголовок: Haz пишет: ОТКЛЮЧИ ..
Haz пишет: цитата: | ОТКЛЮЧИ ON CHANGE и попробуй без него |
| Так же вылетает после 20-30 секундного мышка-колёсико.... Error DBCMD/2001 Файл не открыт:
|
|
|
|
| |
Пост N: 418
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.15 15:03. Заголовок: Andrey пишет: Так ж..
Andrey пишет: цитата: | Так же вылетает после 20-30 секундного мышка-колёсико.. |
| после каждого "мышка-колёсико" вызывается ON CHANGE, можно предположить что проблема в нем. Отключи и проверь Явно база нигде не закрывается , может уперся в максимальное число открытых баз/индексов ?
|
|
|
|
| постоянный участник
|
Пост N: 3925
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 15:20. Заголовок: Haz пишет: может уп..
Haz пишет: цитата: | может уперся в максимальное число открытых баз/индексов ? |
| Да там только эти справочники и открываются. Еще только оболочку сделал и менюшку справочники. И десяти баз открытых не будет.... Haz пишет: цитата: | после каждого "мышка-колёсико" вызывается ON CHANGE, можно предположить что проблема в нем. Отключи и проверь |
| Проверил, только что еще раз. Убрал вообще ON CHANGE и ON GOTFOCUS Так же вылетает после 20-30 секундного мышка-колёсико.... Error DBCMD/2001 Файл не открыт: Может неправильно написал, хотя из примеров брал: // создать объект TBROWSE SprCreateBrowse( cSection, "oBrw_1", 'Form_Spr', nBrwTop+2, nBrwLeft, nBrwWdth, nBwrHght-2-nHB, ALIAS() ) ниже в программе: PUBLIC &cBrw DEFINE TBROWSE &cBrw ; AT nRow, nCol ; ALIAS cAlias ; OF &cParent ; WIDTH nWidth ; HEIGHT nHeight ; COLORS { CLR_BLACK, CLR_BLUE } ; BACKCOLOR aBackColor ; FONT 'Tahoma' SIZE ModeSizeFont() //ON GOTFOCUS ( MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus) //ON CHANGE (CorrectionFirstLast("oBrw_1"),MyChangeBrowse(cAlias), Form_Spr.oBrw_1.Setfocus) END TBROWSE Есть какая нибудь функция показывающая открытые базы ? Или самому писать надо ? У меня такая в терминалке была...
|
|
|
|
| |
Пост N: 419
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.15 15:49. Заголовок: Andrey пишет: Или с..
Andrey пишет: имеется ввиду список Алиасов ? готовой нет или бровс по алиасу - такая есть внутри h_tbrowse.prg Function SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql ) можно вызвать с одним параметром uAlias // создать объект TBROWSE SprCreateBrowse( cSection, "oBrw_1", 'Form_Spr', nBrwTop+2, nBrwLeft, nBrwWdth, nBwrHght-2-nHB, ALIAS() ) PS попробуй Alias() явно задать ввиде символьного значения. такое впечатление что бровс его забывает PPS проверь чему равно значение &cBrw:cAlias
|
|
|
|
| |
Пост N: 4423
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.01.15 15:53. Заголовок: Haz пишет: имеется ..
Haz пишет: цитата: | имеется ввиду список Алиасов ? |
| Pasha пишет: цитата: | Оказывается, в харборе есть функция hb_waEval( bBlock ) Блок кода bBlock вызывается для каждой открытой рабочей области. Т.е. массив алиасов или номеров р/о можно получить так: aAlias := {} hb_waEval( {|| AADD(aAlias, Alias())} ) или aSelect := {} hb_waEval( {|| AADD(aSelect, Select())} ) |
|
|
|
|
|
|
| постоянный участник
|
Пост N: 466
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.01.15 15:57. Заголовок: Andrey может так на..
Andrey может так надо: DEFINE TBROWSE &cBrw ; AT nRow, nCol ; ALIAS &cAlias ; OF &cParent ; a := {}; AEval(array(50), {|x,e| iif( (e)->( used() ), aAdd(a, (e)->( alias() ), nil) }) msgDebug(a)
|
|
|
|
| постоянный участник
|
Пост N: 3926
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 16:34. Заголовок: SergKis пишет: може..
SergKis пишет: цитата: | может так надо: DEFINE TBROWSE &cBrw ; AT nRow, nCol ; ALIAS &cAlias ; |
| Делал и так тоже. у Григория пример брал из \MiniGUI\SAMPLES\Advanced\Tsb_filter\demo.prg
|
|
|
|
| постоянный участник
|
Пост N: 3927
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 16:45. Заголовок: SergKis пишет: AEva..
SergKis пишет: цитата: | AEval(array(50), {|x,e| iif( (e)->( used() ), aAdd(a, (e)->( alias() ), nil) }) |
| Error E0030 Syntax error "syntax error at '}'"
|
|
|
|
| постоянный участник
|
Пост N: 3928
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 16:58. Заголовок: Haz пишет: PS попро..
Haz пишет: цитата: | PS попробуй Alias() явно задать ввиде символьного значения. такое впечатление что бровс его забывает PPS проверь чему равно значение &cBrw:cAlias |
| Для проверки сделал отдельное меню: MENUITEM "Алиас этой БД" ACTION { || MyGetUse("oBrw_1") } SEPARATOR MENUITEM "Список открытых БД" ACTION { || MyGetAllUse() } После потери связи с базой выдает что база открыта: "STREET" А если опросить все базы то показывает что 3 базы открыты !!! Получается TBROWSE сам теряет связь с базой.... Что делать ?
|
|
|
|
| |
Пост N: 420
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.15 17:19. Заголовок: Andrey пишет: Получ..
Andrey пишет: цитата: | Получается TBROWSE сам теряет связь с базой.... Что делать ? |
| Скорре всего слетат ( а точнее становится невыполнимым ) условие в блоке выборки/записи по колонке( или колонкам ) и уверен слетает не само а какой то кусок кода ему помогает. нужно проверить до слета и сразу после 1. oBrw:cAlias - должно быть "STREET" 2. oBrw:aColumns[x]:cData должно быть что то типа "STREET->имя поля или FieldGet(). " 3. Eval( oBrw:aColumns[x]:bData) должно вернуть значение из текущей записи для колонки х ЗЫ в функции RefreshBrowse() есть вызов Alias() ? Андрей ты уверен в том что при выполнении RefreshBrowse() ВСЕГДА Alias() == "STREET" ? и что там с тассировкой ошибки - на какую строку из h_browse.prg ругается ?
|
|
|
|
| постоянный участник
|
Пост N: 3930
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 18:14. Заголовок: Слетает всегда в одн..
Слетает всегда в одном месте, когда редактировать начинаешь. После того как колёсиком поездишь, кол-во записей становится 0/0 и начинаешь редактировать. Я назначил свою функцию обработки и в зависимости условий, разрешаю/запрещаю редактировать ячейки или вызываю справочник (отдельный): For nI := 1 to Len(aPoleField) ADD COLUMN TO TBROWSE &cBrw // добавить новую колонку в TBROWSE ..... IF cTypeField # "+" // кроме - автоинкремент поля &cBrw:aColumns[nI]:lEdit := .T. oBrw_1:aColumns[nI]:bPrevEdit := {|| MyFieldEdit( oBrw_1:aColumns[oBrw_1:nCell]:Cargo ) } ENDIF Next Вылет всегда в: Error DBCMD/2001 Файл не открыт: RLOCK Called from RLOCK(0) Called from RECLOCK(31) // это моя функция Called from MYFIELDEDIT(1471) // это моя функция Called from (b)SPRCREATEBROWSE(964) Called from TSBROWSE:KEYDOWN(6329) Called from TSBROWSE:HANDLEEVENT(7084) Called from EVENTS(76) RECLOCK(31) // это моя функция из терминалки Скрытый текст FUNCTION RecLock( nRetry ) // nRetry == 3 - кол-во попыток захватить запись LOCAL lForever LOCAL lRet := .T. nRetry := IF(nRetry == NIL, MAX_NOF_ATTEMPTS, nRetry) lForever := (nRetry == 0) WHILE !RLOCK() .AND. ((nRetry > 0 .OR. lForever)) // строка - 31 IF Msg( MSG_TRY_LOCK_REC ) == K_ESC EXIT ENDIF nRetry-- END IF !RLOCK() Msg( MSG_LOCK_NO_SUCCESS ) lRet := !lRet ENDIF RETURN (lRet)
|
|
|
|
|
| |
Пост N: 421
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.01.15 18:25. Заголовок: Andrey пишет: Calle..
Andrey пишет: цитата: | Called from TSBROWSE:KEYDOWN(6329) |
| похоже что то с блоком выборки не алё вот тут спотыкается при редактировании TSBROWSE:KEYDOWN(6329 проверив что есть bPrevEdit и бровс не по массиву пытается выполнить блок и вылетает с ошибкой If ::aColumns[ nCol ]:bPrevEdit != Nil If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays Else // GF 16-05-2008 uVal := Eval( ::aColumns[ nCol ]:bData ) uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal ) If ValType( uVal ) == "L" .and. ! uVal Return 0 EndIf EndIf EndIf ЗЫ MYFIELDEDIT в студию ЗЫЫ И все же мне кажется что где то меняется рабочая область ! в bPrevEdit тыкни MsgDebug( Alias() )
|
|
|
|
| постоянный участник
|
Пост N: 3931
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 18:31. Заголовок: Сделал новый тест в ..
Сделал новый тест в функции MyFieldEdit() до начала редактирования при слёте базы: MsgDebug(oBrw_1:nLen, ALIAS(), oBrw_1:cAlias ) MsgDebug( "RLock()=", (oBrw_1:cAlias)->(RLock()) ) Т.е. колёсиком подергал вверх-вниз на 5 записях, функция MyChangeBrowse(cAlias) показывает 0/0 начинаю редактировать: 1. MsgDebug показывает 5, "", "STREET" 2. MsgDebug показывает "RLock()=" .T. Т.е. АЛИАС по всей задачи ALIAS() = "" - убит !!! Кем ? На экране таблица есть (в объекте) а все связи разорваны ! Еще раз пишу, отдельная задача работает как часы, а в сборке с другими (там только еще один TBROWSE есть) начинает вылетать.
|
|
|
|
| |
Пост N: 4425
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.01.15 18:39. Заголовок: Haz пишет: MYFIELDE..
Haz пишет: +1
|
|
|
Ответов - 148
, стр:
1
2
3
4
5
6
7
8
All
[только новые]
|
|