Автор | Сообщение |
|
| |
Пост N: 2943
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.13 15:03. Заголовок: Cписок алиасов
Как получить список всех открытых баз данных ? Либо в виде алиасов либо номеров рабочих областей. Можно конечно сделать самопал , но вдруг что то готовое есть и эффективное.
|
|
|
Ответов - 32
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 177
Зарегистрирован: 17.06.10
|
|
Отправлено: 06.04.13 19:45. Заголовок: Есть, в FWH.. и выгл..
Есть, в FWH.. и выглядит это так function aGetWorkAreas() // Returns an Array with all available Alias local aAreas := {} local n for n = 1 to 255 if ! Empty( Alias( n ) ) AAdd( aAreas, Alias( n ) ) endif next return aAreas
|
|
|
|
| |
Пост N: 2944
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.13 20:07. Заголовок: fil О таком самопал..
fil О таком самопале я и грил. Такой способ понятен и не очень эффективен. Перебрать надо 255 рабочих областей (кстати в Harbour эта цифра не больше чем 255 ?) Почему вопрос такой возник. При открытии баз в сети (42 базы 105 индексов) , открытие баз происходит быстрее чем закрытие при выходе когда делаю DbCloseAll(). Просто хотел ускорить закрытие баз. Понятно что при открытии баз можно заполнять массив и потом в цикле по нему закрыть базы.
|
|
|
|
| |
Пост N: 2945
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.13 21:23. Заголовок: Хочу добавить что Db..
Хочу добавить что DbCloseAll() с RDD DBFCDX срабатывает быстро а вот с ADSCDX медленновато.
|
|
|
|
| |
Пост N: 64
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.13 10:43. Заголовок: Вместо dbCloseAll() ..
Вместо dbCloseAll() с ADS можно попробовать AdsCloseAllTables()
|
|
|
|
| |
Пост N: 2946
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.13 11:06. Заголовок: Haz пишет: AdsClose..
Haz пишет: Пробовал. Падает прога с GPF Сегодня dbcloseall() работает нормально , хз что было...
|
|
|
|
| |
Пост N: 2948
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.13 11:37. Заголовок: Заметил если в течен..
Заметил если в течении дня часто пересобирать прогу то через какое то время комп начинает тормозить , прога собирается дольше , часов через 5 может даже инет отвалится. Компилятор Mingw +Harbour. Возможно этот тормоз задел каким то боком и ADS который в качестве сервиса крутится на этой же машине.
|
|
|
|
| |
Пост N: 65
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.13 12:26. Заголовок: Странно ... у меня н..
Странно ... у меня не падает при вызове ADSCloseAllTables, но я собираю на BCC и может причина в этом. При закрытии программы в main окне работает ON RELEASE {|| DbCloseAll(), AdsDisconnect(), AdsApplicationExit() } может это поможет. PS Тормоза наблюдаются на машине на которой собираю проект если долго висит в памяти HBIDE
|
|
|
|
| |
Пост N: 66
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.13 12:35. Заголовок: Dima, как вариант по..
Dima, как вариант подцепись к ADServer при помощи ARC32 c REMOTE connection и посмотри состояние сервера после закрытия твоей программы - кажется мне , что после закрытия остается зависшее подключение
|
|
|
|
| |
Пост N: 2949
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.13 12:42. Заголовок: Haz А как ты подклю..
Haz А как ты подключаешься к нему ? ADS.INI [FILES] ; моя фича PATH=//127.0.0.1/sklad$/ [DRIVES] N:=//127.0.0.1/sklad$/ [MYSERVER] LAN_IP=127.0.0.1 LAN_PORT=6262 [SETTINGS] ADS_SERVER_TYPE=7 Подключаюсь так , предварительно считав в прогу установки из ADS.INI AdsSetServerType(_servtype) //_servtype считан из ADS_SERVER_TYPE if !AdsConnect60(disk) // disk считан из [DRIVES] в данном примере будет N: ? "Не могу подключится к Advantage Database Server......" quit endif adshandle:=AdsConnection() // хендл подключения if adshandle==0 ? "Не могу получить хендл подключения к Advantage Database Server......" quit endif Собственно все , далее идут настройки AdsSetCharType(2, .t.) AdsLocking( .t. ) AdsSetDeleted(.T.) rddRegister("ADS",1) AdsRightsCheck(.F.) set optimize on SET AUTOPEN OFF Set delete on AdsSetFileType(ADS_CDX) Set date to german set(_SET_FORCEOPT,.t.) set(_SET_OPTIMIZE,.t.) set(_SET_HARDCOMMIT,.f.) Haz пишет: цитата: | Dima, как вариант подцепись к ADServer при помощи ARC32 c REMOTE connection и посмотри состояние сервера после закрытия твоей программы - кажется мне , что после закрытия остается зависшее подключение |
| Да и по монитору ADS видно что нет зависших подключений
|
|
|
|
| |
Пост N: 67
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.13 13:11. Заголовок: Примерно так же , но..
Примерно так же , но ( к шифрованным базам ) hConnection := NIL IF adsConnect60( cBasePath + "\" + cBase + ".add", 0, "SystemProcess", 'SystemProcess', nServerType, @hConnection ) ELSE MsgExclamation( "Ошибка подключения к словарю данных !" ) END да и формат баз только ADS
|
|
|
|
| |
Пост N: 2950
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.13 13:32. Заголовок: Haz Не в курсе ? Не..
Haz Не в курсе ? Нет ли в ADS похожей фичи как в LetoDB. Что бы можно было объявить из проги переменую на сервере и при выходе ее убить. Ну или флаг какой то на серваке (семафор) поставить из проги. Скажем с одной станции зашел в прогу PETROV , объявили массив (или пополнили) на сервере и добавили него новый элемент "PETROV". Если с другой станции попытается снова зайти PETROV а он уже есть в массиве на сервере , то зайти у него не получится.
|
|
|
|
|
| Администратор
|
Пост N: 2829
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.04.13 14:55. Заголовок: Haz пишет: Вместо d..
Haz пишет: цитата: | Вместо dbCloseAll() с ADS можно попробовать AdsCloseAllTables() |
| Это функция ace, которая закрывает все таблицы для текущего соединения. Но рабочие области харбора - rddads при этом остаются открытыми, и любое обращение к ним приведет к непредсказуемым последствиям, а именно к падению программы. Механизм падения следующий. После AdsCloseAllTables() все равно автоматически будет вызван dbCloseAll. И если в какой-то р/о осталась незавершенная операция: после какого-то изменения не было вызова dbCommit(). это приведет к операции с этой р/о, которую ace уже закрыл и знать о ней не знает. Результат законный - gpf aka access violation. В letodb есть аналогичная функция: Leto_CloseAll(), которая все делает корректно и быстро, тоже одним запросом к серверу, и закрывает все р/о на клиенте.
|
|
|
|
| Администратор
|
Пост N: 2830
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.04.13 15:03. Заголовок: Dima пишет: Не в ку..
Dima пишет: цитата: | Не в курсе ? Нет ли в ADS похожей фичи как в LetoDB. Что бы можно было объявить из проги переменую на сервере и при выходе ее убить. Ну или флаг какой то на серваке (семафор) поставить из проги. |
| Не Haz, но перешерстил доку по ace, и ничего подобного не нашел. Семафоры (в виде служебного файла) сервером ads используются только для того, чтобы отследить, жив клиент или уже нет.
|
|
|
|
| |
Пост N: 2951
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.13 15:16. Заголовок: Pasha пишет: Не Haz..
Pasha пишет: цитата: | Не Haz, но перешерстил доку по ace, и ничего подобного не нашел. Семафоры (в виде служебного файла) сервером ads используются только для того, чтобы отследить, жив клиент или уже нет. |
| Да я тоже покопал и ни чего такого не увидел. На счет семафоров тоже понял. Придется делать по старинке.
|
|
|
|
| Администратор
|
Пост N: 2831
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.04.13 15:22. Заголовок: Dima пишет: Заметил..
Dima пишет: цитата: | Заметил если в течении дня часто пересобирать прогу то через какое то время комп начинает тормозить , прога собирается дольше , часов через 5 может даже инет отвалится. Компилятор Mingw +Harbour. Возможно этот тормоз задел каким то боком и ADS который в качестве сервиса крутится на этой же машине. |
| Современные ОС ведут себя непредсказуемо, и причину этого выяснить трудно. В эту пятницу (позавчера) заметил, причем не первый раз, что у меня что-то повтор нажатия клавиш работает медленно, а именно навигационные клавиши в редакторе. В настойках клавиатуры у меня скорость повтора всегда стоит на максимуме. Проверил - так и есть. Вспомнил древние времена и прерывание 16h. Сделал тест: скорость вместо 30 символов в сек оказалась примерно 10, т.е на минимуме. Поигрался с панелью управления: подергал скорость туда-сюда. Стало как положено. И какая программа гадит - неизвестно. Причем гадит систематически. Непонятно. У меня и программ то установлено по минимуму, только для работы и ни на йоту больше.
|
|
|
|
| |
Пост N: 2952
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.13 15:39. Заголовок: Dima пишет: Придетс..
Dima пишет: цитата: | Придется делать по старинке. |
| А делаю это так. При входе юзера проверяю наличие файла семафора есть ли он и не залочен ли. Если залочен юзер повторно не войдет. Если файла нет , создаю его и блочу. При выходе из проги файл закрываю и удаляю. Если юзер просто отвалился (выпал из проги) файл сам разблочится. Какие еще есть варианты ? Вариант писать все это в базу и лочить запись не подходит , так как не держу все базы открытыми , открываю их по мере необходимости и после выхода из какого то режима делаю Dbcloseall()
|
|
|
|
| |
Пост N: 84
Зарегистрирован: 03.12.08
|
|
Отправлено: 07.04.13 16:43. Заголовок: Dima , похоже это по..
Dima , похоже это пока единственный способ . Я его тоже использую . Единственный минус что попытка приконнектиться в сети занимает некоторое время : Проверка наличия определённого файла + попытка открыть его EXCLUSIVE .....
|
|
|
|
| |
Пост N: 2953
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.13 17:01. Заголовок: Softlog86 а ты его ..
Softlog86 а ты его с каким номером атрибута открываешь ? я с 18 (не помню где вычитал но тормоза нет)
|
|
|
|
| |
Пост N: 85
Зарегистрирован: 03.12.08
|
|
Отправлено: 07.04.13 22:25. Заголовок: Я не использую LETO/..
Я не использую LETO/ADS ..... У меня обычная файл-серверная система . На сетевом диске обычно открывается по USE ("Z:\SKLAD\OP_XX.DBF") .... EXCLUSIVE . Не использую никаких атрибутов ....
|
|
|
|
| Администратор
|
Пост N: 2832
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.04.13 23:08. Заголовок: Dima пишет: Как пол..
Dima пишет: цитата: | Как получить список всех открытых баз данных ? Либо в виде алиасов либо номеров рабочих областей. |
| Оказывается, в харборе есть функция hb_waEval( bBlock ) Блок кода bBlock вызывается для каждой открытой рабочей области. Т.е. массив алиасов или номеров р/о можно получить так: aAlias := {} hb_waEval( {|| AADD(aAlias, Alias())} ) или aSelect := {} hb_waEval( {|| AADD(aSelect, Select())} )
|
|
|
Ответов - 32
, стр:
1
2
All
[только новые]
|
|