Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какие таблицы открыты? / 14 сообщений из 14, страница 1 из 1
05.08.2004, 08:28
    #32636109
ЕленаШ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
Как посмотреть список всех открытых таблиц?
...
Рейтинг: 0 / 0
05.08.2004, 08:44
    #32636127
ЕленаШ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
Все нашла, извините.
Вопрос другой, мне надо проверить открыта ли таблица, если да - закрыть ее
If USED('TabName')
USE IN TabName
EndIf
никак не хочет работать
...
Рейтинг: 0 / 0
05.08.2004, 09:13
    #32636164
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
Возможно, ты работаешь в Private DataSession. В таком синтаксисе USED() проверяет факт открытия таблицы только в текущей DataSession.
...
Рейтинг: 0 / 0
05.08.2004, 09:15
    #32636170
oleg_km
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
А что подразумевается под "открыта таблица". Если - открыта ли таблица в другом приложении (у другого пользователя, на другом компьютере), то только попыткой открыть ее в монопольном режиме. А если в том-же приложении - то должен работать твой код. Единственно - может alias не совпадает с именем файла.
...
Рейтинг: 0 / 0
05.08.2004, 11:11
    #32636414
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
oleg_kmЕдинственно - может alias не совпадает с именем файла.
Либо есть один странный глюк в VFP:

Код: plaintext
1.
2.
If USED('TABLENAME')
USE IN TabName
EndIf

Alis - надо писать большими буквами... Но все приведенные советы выше так-же актуальны...
...
Рейтинг: 0 / 0
05.08.2004, 12:02
    #32636535
lesha_spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
можно так же использовать
USE IN SELECT("TABNAME")
по сути это то же что и
If USED('TabName')
USE IN TabName
EndIf
...
Рейтинг: 0 / 0
05.08.2004, 12:04
    #32636539
lesha_spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
2Sergey: глюк с большими буквами существует во всех версиях фокса и 8 тоже?
...
Рейтинг: 0 / 0
05.08.2004, 12:23
    #32636584
ЕленаШ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
Название у меня числовое, типа 00, 01
но почему то их командой USED не видно, а вот если указать раб область - то все нормально
...
Рейтинг: 0 / 0
05.08.2004, 14:28
    #32636931
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
lesha_spb2Sergey: глюк с большими буквами существует во всех версиях фокса и 8 тоже?
Да, обжигался не раз
...
Рейтинг: 0 / 0
05.08.2004, 14:32
    #32636948
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
ЕленаШНазвание у меня числовое, типа 00, 01
но почему то их командой USED не видно, а вот если указать раб область - то все нормально
Так неправильно - добавьте букву в начало...
...
Рейтинг: 0 / 0
05.08.2004, 16:47
    #32637406
Commander Хэлл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
Если глюк с большими буквами - надо посмотреть, что возвращает
Код: plaintext
1.
2.
SET ("COLLATE")
и
SET ("EXACT")

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

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

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

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

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

Код: plaintext
use in select("Alias1")

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


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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
* Для ранних версий:
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
* Теперь таблица открыта

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
* Для 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
* Теперь таблица открыта

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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 

Случаи применимы, когда точно известно, что никакая другая программа или пользователь параллельно с нашей программой таблицу/базу никогда не открывает.
...
Рейтинг: 0 / 0
05.08.2004, 19:21
    #32637591
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
ЕленаШНазвание у меня числовое, типа 00, 01
но почему то их командой USED не видно, а вот если указать раб область - то все нормально
в этом случае Фокс сам назначает ей альяс состоящий из букофки той рабочей, кот выбрана. 1 это А, 2 это B, 3 - C и т.д. В этом случае слушай советы открытия таблицы с заданием ей своего собственного альяса - либа фпереди букву, а дальше цифры из названия таблицы, либа какими-то осмысленными словами.
...
Рейтинг: 0 / 0
06.08.2004, 08:08
    #32637919
ЕленаШ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
Всем большущее спасибо,
так и есть, переименовала в А00,А01... - все заработало
Не знала что от имени так много зависит
...
Рейтинг: 0 / 0
06.08.2004, 10:42
    #32638118
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какие таблицы открыты?
ЕленаШВсем большущее спасибо,
так и есть, переименовала в А00,А01... - все заработало
Не знала что от имени так много зависит
Почитайте руководство FoxPro - там очень много сказано об ограничении не первую букву в различных названиях... По этому хорошим стилем будет избегать этого...

Удачи!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какие таблицы открыты? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]