Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

как правильно закрывать базы

 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
Плешивцев Евгений



Joined: 03 Apr 2007
Posts: 95
Location: Плешивцев Евгений

Interests: Волгоград

PostPosted: 14 Sep 2007 09:48    Post subject: как правильно закрывать базы Reply with quote

1. Добрый день, регулярно сталкиваюсь с проблемой закрытия баз. Пример: Б-4, 12.01 пак.39 функция запускается из номенклатурного справочника товаров:
Code:
// проверка закрытия баз
// разработано для Б-4 12.01 Harbour
// запускать из номенклатурного справочника товаров

Function user_proba()

Local cDataBase:=''
Local aStru:={}

Altd()

dbPush()

  aAdd(aStru,{"Sclad","C",6,0})
  aAdd(aStru,{"Kol"  ,"N",9,3})

  cDataBase:=TEMPFILE(GlobalTmpPath,"dbf")
  DBCreate(cDataBase,aStru)
  Use &cDataBase Alias UsDataBase EXCLUSIVE

    SayandWait('закроем базу')
  UsDataBase->(dbClosearea())

dbPop()
return nil


функция выдает такую ошибку:


как правильно?
Back to top
View user's profile Send private message
Behemoth



Joined: 15 Mar 2002
Posts: 155
Location: Новиков Алексей Юрьевич
Occupation: ПБОЮЛ
Interests: Пермь

PostPosted: 14 Sep 2007 10:30    Post subject: Reply with quote

Добрый день.
Всё дело в том, как Вы открываете временную базу. Вы её открываете в рабочей области, в которой находитесь. Эта рабочая область MLABEL. Соответственно MLABEL закрывается и на его месте открывается UsDataBase. То есть, алиаса MLABEL больше нет.
Следовательно, когда управление возвращается в initlist номенклатурного справочника отсутствие MLABEL не прохродит незамеченым.
_________________
С уважением, Новиков Алексей.
Back to top
View user's profile Send private message Send e-mail
Behemoth



Joined: 15 Mar 2002
Posts: 155
Location: Новиков Алексей Юрьевич
Occupation: ПБОЮЛ
Interests: Пермь

PostPosted: 14 Sep 2007 10:35    Post subject: Reply with quote

Воспользуйтесь функцией
DBCREATE( <cDatabase>, <aStruct>, [<cDriver>], [<lOpen>], [<cAlias>] ) --> NIL

Если указать lOpen=.T. и cAlias, то Вы получите тот результат, которого добиваете
_________________
С уважением, Новиков Алексей.
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 14 Sep 2007 10:38    Post subject: Reply with quote

Алексей я с Вами не согласен !!!
Mlabel есть - ведь Евгений закрывает не все алиасы а конкретный.
Я тоже так закрываю и у меня нет таких проблем.

Дело в другом.
Вы при создании временного файла сделали его алиас активным.
А когда вернулись не вернули активную рабочую область
на место.
Один из первых уроков тут начинался с того, что надо стараться
пользоваться функциями
SaveSet в начале программы и RestSet в конце.
Также полезы функции SaveSetKey и RestSetKey
А вот dbpush() и dbpop() я лично в таких программах не применяю.
Нет смысла (не вижу смысла). Если убрать программа будет работать
также.
Тока в конце RestSet() примените и в
Back to top
View user's profile Send private message Send e-mail
Behemoth



Joined: 15 Mar 2002
Posts: 155
Location: Новиков Алексей Юрьевич
Occupation: ПБОЮЛ
Interests: Пермь

PostPosted: 14 Sep 2007 11:19    Post subject: Reply with quote

Добрый день.
nordk wrote:
Алексей я с Вами не согласен !!!
Mlabel есть - ведь Евгений закрывает не все алиасы а конкретный.
Я тоже так закрываю и у меня нет таких проблем.

Костя, Вы часто советуете юзерам прогнать программу в отладчике. Попробуйте сами воспользоваться своим советом. Вы увидите, что MLABEL прекращает своё существование в момент совершения команды
Use &cDataBase Alias UsDataBase EXCLUSIVE
И далее уже не имеет значения, как и что конкретно мы закрываем и пишем ли мы скобки dbpush() - dbpop(). Алиаса MLABEL больше нет. И DBPOP() его не восстанавливает (он не умеет открывать закрытую баз
_________________
С уважением, Новиков Алексей.
Back to top
View user's profile Send private message Send e-mail
Плешивцев Евгений



Joined: 03 Apr 2007
Posts: 95
Location: Плешивцев Евгений

Interests: Волгоград

PostPosted: 14 Sep 2007 11:38    Post subject: Reply with quote

Алексей Юрьевич прав, и его рассуждения привели к такой конструкции, которая работает:
Code:
// проверка закрытия баз
// разработано для Б-4 12.01 Harbour
// вер. 1.1
// запускать из номенклатурного справочника товаров


Function user_proba()

Local cDataBase:=''
Local aStru:={}
Local aSet, aSetKey

Altd()
aSet:=SAVESET()

  aAdd(aStru,{"Sclad","C",6,0})
  aAdd(aStru,{"Kol"  ,"N",9,3})

  cDataBase:=TEMPFILE(GlobalTmpPath,"dbf")
  DBCreate(cDataBase,aStru)
  Use &cDataBase Alias UsDataBase NEW EXCLUSIVE

  SayandWait('закроем базу')
  UsDataBase->(dbClosearea())

RESTSET(aSet)
return nil


Изменена конструкция команды Use, теперь так:
Use &cDataBase Alias UsDataBase NEW EXCLUSIVE

Кстати без указанных Костей конструкций: SAVESET - RESTSET, так же выдается ошибка. Оставляем их.
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 14 Sep 2007 11:49    Post subject: Reply with quote

Женя а теперь попробуй убери NEW - перестанет работать ?
P.S.
Если честно я использую NetUse() NetUseExc() и для терминального
режима не помню еше одна.
А еще есть очень удобная DbOpenBases()
Back to top
View user's profile Send private message Send e-mail
Плешивцев Евгений



Joined: 03 Apr 2007
Posts: 95
Location: Плешивцев Евгений

Interests: Волгоград

PostPosted: 14 Sep 2007 12:13    Post subject: Reply with quote

да, Use без New в данном контексте приводит к вышеуказанной ошибке. У функции NetUse такой проблемы нет, но всю программу нужно окружать скобками dbPush - dbPop
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 14 Sep 2007 12:19    Post subject: Reply with quote

А зачем ?
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru