BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Неясно как использовать NetErr()
 
БЭСТ-5 СП 9
Проведем небольшой тест. Для теста создадим Таблицу и пару записей в ней, спец-я UCREATETETABLE:
Код
UCreateAdditionalBase()
#define cAmounts LoadPath()+"REAL\UTest.dbf"
#define cIndex LoadPath()+"REAL\UTest.cdx"
PROCEDURE UCreateAdditionalBase()
Local nExist:=3
Local aAmounts:=     {{"ID", "C", 22, 0}, ;
                     {"Grup", "C", 5,0},;
                     {"NNUM", "C", 13,0},;
                     {"BOM", "C", 30,0},;
                     {"DATE", "D", 8,0}}

nExist:=CheckIfBasesAlreadyExist()
DO CASE 
  CASE (nExist==1)
      SayAndWait("Какая-либо из таблиц (или все) уже существует. Создание невозможно!!!")
  CASE (nExist==0)
    //Ветка создания баз данных
    dbPush()
    DbCreate (cAmounts,aAmounts)
    Use (cAmounts) NEW
    INDEX ON UPPER(AllTrim(Grup)+AllTrim(NNUM)+AllTrim(BOM))+ID TAG BOM TO (cIndex)
    INDEX ON UPPER(AllTrim(Grup)+AllTrim(NNUM)+AllTrim(BOM))+Dtos(Date) TAG Date TO (cIndex)
    Append Blank
    UTEST->ID:=StepPlus()
    UTEST->Grup:="00004"
    UTEST->NNUM:="0000000000001"
    UTEST->BOM:="0000000102"
    UTEST->Date:=STod("20080810")
    Append Blank
    UTEST->ID:=StepPlus()
    UTEST->Grup:="00004"
    UTEST->NNUM:="0000000000001"
    UTEST->BOM:="0000000102"
    UTEST->Date:=STod("20080811")
    DBCLOSEAREA()
    DbPop()
    //Проверка ошибок
  CASE (nExist==3)
        SayAndWait("Неопознанная ошибка")
  ENDCASE
return

Function CheckIfBasesAlreadyExist()
Local nAlreadyExist:=3
//Local cFormuls:=LoadPath()+sPathToFormuls
If (File(cAmounts))
  nAlreadyExist:=1
else
  nAlreadyExist:=0
endif
//f:=2
return nAlreadyExist


Теперь создаем тестовую ситуацию, в которой используется таблица в режиме Shared, по нажатию ОК тестовая ситуация окончиться, спец-я UCreateTestSituation:
Код
CreateTest()
#define cAmounts LoadPath()+"REAL\UTest.dbf"
Procedure CreateTest()
DbPush()
USE (cAmounts) NEW Shared
SayAndWait("Нажмите ОК после теста")
DbCloseArea()
DbPop()
return

Далее собственно тест, где и будем использовать функцию NetErr(), которая описана в Хелпе. Ниже приведенный код будем запускать из другой копии программы, но той же самой БД, сп-я USTARTTEST:
Код
StartNettr()
#define cAmounts LoadPath()+"REAL\UTest.dbf"
Procedure StartNettr()
DBPUSH()
USE (cAmounts) Exclusive NEW
If NetErr()
  SayAndWait("Ошибка сети")
else
  DbCloseArea()
endif
DbPop()
return


Итак, в одном окне у нас запущена Спец-я №2, там висит сообщение "Нажмите ОК по окнончанию теста" мы естественно пока не нажимаем, а переходим ко 2му окну с БЕСТ-5.
Теперь здесь запускаем последнюю спецфункцию. По описанию, приведенному в хелпе по функции NetErr() при неудачной попытке исполнить
"USE (cAmounts) Exclusive NEW"
Функция должна возвратить .T. и тогда на экране мы увидим сообщение:
"Ошибка сети".
Запускаем. Видим ошибку БЕСТ-5:
"Ошибка открытия", как раз на строке "USE (cAmounts) Exclusive NEW"...

Подскажите, пожалуйста описание и пример, приведенные в справочном руководстве ошибочны??? Или я что-то неверно делаю?
Изменено: Саак Шахламджян - 05.08.2008 14:08:46
 
Посмотрите в описании функции NETUSE() и NetUseExc()
Что касается ошиьки - все верно. Вы наталкиваеетесь на системную ошибку открытия уже открытой в share таблицы.
Вы уже итак знаете что таблица открыта share какой смысл ее проверять на эксклюзивное открытие ?
 
Цитата
nordk пишет:
Посмотрите в описании функции NETUSE() и NetUseExc()Что касается ошиьки - все верно. Вы наталкиваеетесь на системную ошибку открытия уже открытой в share таблицы.Вы уже итак знаете что таблица открыта share какой смысл ее проверять на эксклюзивное открытие ?


Хотелось бы знать, как пользователь, использующий последнюю спецфункцию, "итак" знает, что она открыта?
Я, естесственно, в курсе, т.к. я и придумал такой тестик.
Насколько я понял (как раз таки из описания) NetErr() предназначена для того, чтобы проверить открылся ли файл или нет, вернее сказать успешность выполнения команд.
Приведу её назначение из описания:
Цитата
Функция NetErr() проверяет успешность выполнения команд USE, USE...EXCLUSIVE или APPEND BLANK в приложениях сетевой среды.
Изменено: Саак Шахламджян - 06.08.2008 09:02:40
 
Не знаю насчет пользователя а программист, который пишет задачу точно знает что у него открыто.
Для начинающих советую в первую очередь знакомиться с функциями самого БЭСТа, они сделаны не просто так.
Не стоит заниматься изобретениями велосипедов.
 
Цитата
nordk пишет:
Не знаю насчет пользователя а программист, который пишет задачу точно знает что у него открыто.Для начинающих советую в первую очередь знакомиться с функциями самого БЭСТа, они сделаны не просто так.Не стоит заниматься изобретениями велосипедов.


Т.е. Вы всегда заранее знаете что именно и когда будет делать тот или иной пользователь!?
Если БЕСТ строился исходя из такой концепции, тогда становиться ясно почему в том или ином месте возникают глюки.
А разве справочник, который я процитировал и не является ли справочником по функциям БЕСТ'а?
И конкретно данная функция не относится ли к ним?
Изменено: Саак Шахламджян - 06.08.2008 11:45:46
 
Это спрачоник функций харбора а не БЭСТа.
Если вы хотите досконально их изучить - быстро у Вас это не получится
Опытными людьми сделан специальный инструментарий, чтобы тратить время на решение Вопроса более рационально. Это во-первых а во-вторых именно этот инструмент поддерживается разработчиком в первую очередь.

Что касается работы пользователя - программист описывает все события,которыми он собирается пользоваться а значит планирует какие таблицы будут открываться.
Еще раз объясню (в последний раз) все таблицы БЭСТа открываются SHARE и ходить с проверкой вокруг этого не серъезно. Если речь идет о ваших таблицах - проектируйте задачу так, чтобы этим тоже не надо было заниматься. Изучать обработчик ошибок стоит уже после того, как вы умеете сделать саму задачу. Тем более что штатные функции БЭСТа обеспечивают Вас решением Вашего Вопроса. Они уже написаны так, чтобы это было - а вы пытаетесь их повторить методом тыка.

И самое главное правило - не надо спешить с выводами об ошибках у кого-то, всегда надо тщательно в первую очередь пересматривать свое на предмет ошибок по несколько раз.
 
Цитата
Саак Шахламджян пишет:
Т.е. Вы всегда заранее знаете что именно и когда будет делать тот или иной пользователь!?


Все нужные мне таблицы в задаче я открываю сам и разумеется знаю, что они открыты и в каком они состоянии. От того что собирается делать пользователь это не зависит - нет никакой связи..
 
Цитата
nordk пишет:
Все нужные мне таблицы в задаче я открываю сам и разумеется знаю, что они открыты и в каком они состоянии. От того что собирается делать пользователь это не зависит - нет никакой связи..

Т.е. Вы разработчик БЭСТ-5?
Если нет, то, наверное все таблицы, с которыми работают пользователи на Ваших разработках также Вашей разработки? Т.е. Ваши программы не затрагивают стандартные таблицы БЕСТ'а? И Вы всегда уверены, что у пользователя не запущена Ваша программа (сп-я, что угодно) дважды? Поделитесь секретом как Вы это знаете?
И знаете, что по сети другой пользователь не открыл Вашу таблицу?
 
Цитата
nordk пишет:
Это спрачоник функций харбора а не БЭСТа.

Так дайте справочник функций БЕСТ! Где он? Получается я зря читал то, что уже есть(справочник по харбору)?
 
Вы ПУТАЕТЕ !!!!
Прочитайте что такое алиас и что такое открывать таблицу.
Я открываю ВСЕ таблицы и свои и БЭСТа со своими именами алиасов и работаю с ними так как мне надо.
Да хоть трижды будет запущена моя программа...мне не надо задумываться над тем работает ли кто-то еще в моей таблице по сети. Пускай работает на здоровье для такого и SHARE. Я изначально предполагаю многопользовательскую работу а значит моя задача будет запущена много раз.........
 
Цитата
Саак Шахламджян пишет:



Цитата

nordk пишет:
Это спрачоник функций харбора а не БЭСТа.
Так дайте справочник функций БЕСТ! Где он? Получается я зря читал то, что уже есть(справочник по харбору)?

Вы не зря читали - надо понимать суть языка. А функции тамже. В соседнем разделе....
А еще здесь есть ссылка на старый форум.
Там есть темы-уроки, Там все наглядно и на примерах рассматриваем.
 
Цитата
nordk пишет:
Вы ПУТАЕТЕ !!!!
Прочитайте что такое алиас и что такое открывать таблицу.
Я открываю ВСЕ таблицы и свои и БЭСТа со своими именами алиасов и работаю с ними так как мне надо.
Да хоть трижды будет запущена моя программа...мне не надо задумываться над тем работает ли кто-то еще в моей таблице по сети. Пускай работает на здоровье для такого и SHARE. Я изначально предполагаю многопользовательскую работу а значит моя задача будет запущена много раз.........

Если Shared-вопросов нет!!! И разницу эту прекрасно понимаю.
И даже согласен, что Exclusive, в принципе не нужен (пока необходимости не было). Но Вопрос опять же по конкретной NetErr(), зачем, зачем она!!!!????
 
В вашем случае незачем.

Если Вам нужен обработчик ошибок
Используйте вот такую технологию

Цитата
begin sequence
recover oErr
saynadwait()
endsequence

Болле подробно рекомендацию по применению давали на примере поиска ошибок в QINPUT в одной из соседних тем.
Изменено: nordk - 06.08.2008 13:09:21
 
Цитата
nordk пишет:
В вашем случае незачем.

Если Вам нужен обработчик ошибок
Используйте вот такую технологию

Цитата begin sequence
recover oErr
saynadwait()
endsequence
Болле подробно рекомендацию по применению давали на примере поиска ошибок в QINPUT в одной из соседних тем.

Я TRY ... CATCH уже использовал, а затем и вовсе убрал EXLUSIVE.
Да и интересовался я уже не из-за того, что она мне нужна!!! А действительно потому, что мне было интересно зачем она, если она БЕСТ'у бесполезна, а если она не к БЕСТ'у (а просто от харбора), то где описаны функции БЕСТ'а? Только и всего...
 
В таком случае надо понимать следующее:
БЭСТ сделан на ядре харбора определенной версии.
Основные необходимые для работы функции включены.
Отдельные не используются и если она очень нужна лучше задавать Вопрос предметно.
По каждому конкретному Вопросу всегда готовы работать и подсказывать. Составить очень детальный хелп пока возможности нет. Но то, что есть сейчас гораздо лучше, чем его отсутствие.
Изменено: nordk - 06.08.2008 13:23:58
 
Цитата
nordk пишет:
В таком случае надо понимать следующее:
БЭСТ сделан на ядре харбора определенной версии.
Основные необходимые для работы функции включены.
Отдельные не используются и если она очень нужна лучше задавать вопрос предметно.
По каждому конкретному вопросу всегда готовы работать и подсказывать. Составить очень детальный хелп пока возможности нет. Но то, что есть сейчас гораздо лучше, чем его отсутствие.

Ясно. Мне показалось, что она бесполезна, поэтому и спросил.
Страницы: 1
Читают тему (гостей: 1)