Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Какие таблицы открыты?  [new]
ЕленаШ
Member

Откуда:
Сообщений: 78
Как посмотреть список всех открытых таблиц?
5 авг 04, 08:28    [860185]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
ЕленаШ
Member

Откуда:
Сообщений: 78
Все нашла, извините.
Вопрос другой, мне надо проверить открыта ли таблица, если да - закрыть ее
If USED('TabName')
USE IN TabName
EndIf
никак не хочет работать
5 авг 04, 08:44    [860209]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Возможно, ты работаешь в Private DataSession. В таком синтаксисе USED() проверяет факт открытия таблицы только в текущей DataSession.
5 авг 04, 09:13    [860266]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
oleg_km
Member

Откуда:
Сообщений: 161
А что подразумевается под "открыта таблица". Если - открыта ли таблица в другом приложении (у другого пользователя, на другом компьютере), то только попыткой открыть ее в монопольном режиме. А если в том-же приложении - то должен работать твой код. Единственно - может alias не совпадает с именем файла.
5 авг 04, 09:15    [860276]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
oleg_km
Единственно - может alias не совпадает с именем файла.

Либо есть один странный глюк в VFP:

If USED('TABLENAME')
USE IN TabName
EndIf

Alis - надо писать большими буквами... Но все приведенные советы выше так-же актуальны...
5 авг 04, 11:11    [860723]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
lesha_spb
Member

Откуда: С-Петербург
Сообщений: 401
можно так же использовать
USE IN SELECT("TABNAME")
по сути это то же что и
If USED('TabName')
USE IN TabName
EndIf
5 авг 04, 12:02    [860941]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
lesha_spb
Member

Откуда: С-Петербург
Сообщений: 401
2Sergey: глюк с большими буквами существует во всех версиях фокса и 8 тоже?
5 авг 04, 12:04    [860946]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
ЕленаШ
Member

Откуда:
Сообщений: 78
Название у меня числовое, типа 00, 01
но почему то их командой USED не видно, а вот если указать раб область - то все нормально
5 авг 04, 12:23    [861039]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
lesha_spb
2Sergey: глюк с большими буквами существует во всех версиях фокса и 8 тоже?

Да, обжигался не раз
5 авг 04, 14:28    [861675]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
ЕленаШ
Название у меня числовое, типа 00, 01
но почему то их командой USED не видно, а вот если указать раб область - то все нормально

Так неправильно - добавьте букву в начало...
5 авг 04, 14:32    [861697]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
Commander Хэлл
Member

Откуда: Нижний Новгород
Сообщений: 45
Если глюк с большими буквами - надо посмотреть, что возвращает
SET ("COLLATE")
и
SET ("EXACT")

Ну а насчёт проверки на открытость - алгоритм примерно такой.

1. Таблица открыта этой программой под известным aliasом

Самый простой случай. Проблема решается функцией USED(). Т.е., чтобы проверить, открыта ли таблица, используется примерно такая конструкция:

* Мы знаем, что эта программа всегда открывает
* нужную таблицу под псевдонимом Alias1
IF !USED("Alias1")
  * Таблица не открыта
  USE <имя таблицы> ALIAS Alias1 IN 0
ENDIF
* Теперь таблица открыта
SELECT Alias1

Ну или более короткая запись, как тут уже подсказали:

use in select("Alias1")

Случай применим, когда точно известно, что эта таблица открывается в программе всегда под одним и тем же aliasом и никакая другая программа или пользователь таблицу никогда не открывает.


2. Таблица открыта этой программой под неизвестным заранее aliasом.

Начиная с VFP 3.0 помогут функции AUSED() и ADATABASES(), а в более ранних версиях придется искать среди всех рабочих областей.

* Для ранних версий:
cFullTableName = "C:\KRUTAYA\PROGA\DBF\TEMP.DBF"
nAlias = 0
* Рабочих областей 225
FOR i=1 TO SELECT(1)
  IF USED(i) .AND. UPPER(DBF(i))=cFullTableName
    * Таблица открыта
    nAlias = i
    EXIT
  ENDIF
ENDFOR
SELECT nAlias
IF nAlias=0
  * Таблица не открыта
  USE (cFullTableName)
ENDIF
* Теперь таблица открыта

* Для VFP3+
cFullTableName = "C:\KRUTAYA\PROGA\DBF\TEMP.DBF"
nAlias = 0
nUsed = AUSED(aUsedList)
IF nUsed>0
  * Рабочих областей уже 32767, и перебор первым методом
  * будет довольно затруднителен.
  FOR j=1 TO nUsed
    i=aUsedList[j,2]
    IF USED(i) .AND. UPPER(DBF(i))=cFullTableName
      * Таблица открыта
      nAlias = i
      EXIT
    ENDIF
  ENDFOR
ENDIF
SELECT nAlias
IF nAlias=0
  * Таблица не открыта
  USE (cFullTableName)
ENDIF
* Теперь таблица открыта

Если ищется не таблица, а база данных, то все делается еще проще.

cFullBaseName = "C:\KRUTAYA\PROGA\DBF\BAZA.DBC"
nUsed = ADATABASES (aUsedList)
IF nUsed>0
  nUsed=ascan (aUsedList,cFullBaseName) 
  IF nUsed>0 
    * База уже открыта
    SET DATABASE TO aUsedList[nUsed]
  ENDIF
ENDIF
IF nUsed=0
  * База не открыта
  OPEN DATABASE (cFullBaseName)
ENDIF
* Теперь база открыта
* Теперь для таблиц из этой базы применим случай 1

Случаи применимы, когда точно известно, что никакая другая программа или пользователь параллельно с нашей программой таблицу/базу никогда не открывает.
5 авг 04, 16:47    [862605]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
ЕленаШ
Название у меня числовое, типа 00, 01
но почему то их командой USED не видно, а вот если указать раб область - то все нормально

в этом случае Фокс сам назначает ей альяс состоящий из букофки той рабочей, кот выбрана. 1 это А, 2 это B, 3 - C и т.д. В этом случае слушай советы открытия таблицы с заданием ей своего собственного альяса - либа фпереди букву, а дальше цифры из названия таблицы, либа какими-то осмысленными словами.
5 авг 04, 19:21    [862988]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
ЕленаШ
Member

Откуда:
Сообщений: 78
Всем большущее спасибо,
так и есть, переименовала в А00,А01... - все заработало
Не знала что от имени так много зависит
6 авг 04, 08:08    [863523]     Ответить | Цитировать Сообщить модератору
 Re: Какие таблицы открыты?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
ЕленаШ
Всем большущее спасибо,
так и есть, переименовала в А00,А01... - все заработало
Не знала что от имени так много зависит

Почитайте руководство FoxPro - там очень много сказано об ограничении не первую букву в различных названиях... По этому хорошим стилем будет избегать этого...

Удачи!
6 авг 04, 10:42    [863877]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить