powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Использование таблиц в запросе
3 сообщений из 3, страница 1 из 1
Использование таблиц в запросе
    #32168108
РусланVFP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа профессионалы, как написать следующий запрос?

Мне нужно выбрать из таблицы personnel поля personnel.c_name, i_id которых
не совпадают с существующими i_idpersonnel таблицы peoplesessions.

Я написал так:

LOCAL ARRAY source_personnel[2,1]
USE personnel IN 0
USE peoplesessions IN 0 && т.к. не понимает что за таблица
SELECT personnel.c_name, personnel.i_id FROM personnel WHERE;
peoplesessions.i_idpersonnel != personnel.i_id;&&исключение уже выбранных записей
into array source_personnel

В принципе все работает. Но когда мне понадобилось использовать теже самые таблицы в другом участке программы Фокс выдает ошибку : "File in use"
Короче ругается на то, что я использую снова эту таблицу. Может ее нужно как нибудь закрывать(команда противоположная USE)?
Помогите начинающему :)
Заранее благодарен.
...
Рейтинг: 0 / 0
Использование таблиц в запросе
    #32168161
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная проблема имеет очень большое количество решений.
Вот только одно решение, которое применяю я:

1. Создайте простую процедуру по открытию таблицы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Procedure openfile
Parameters FName, FOrder
If Not Used ( FName )
  Select  0 
  Use ( m.gcdat+FName ) Share
Endif
Select ( FName )
If Not Empty ( FOrder )
  Set Order To Tag ( FOrder )
Endif
Return


2. Далее вызывайте данную процедуру, если хотите открыть таблицу с индесом или без:

Код: plaintext
openfile('personnel')
...
Рейтинг: 0 / 0
Использование таблиц в запросе
    #32168606
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрывается таблица той же командой USE только без указания имени таблицы.

Открыть таблицу с имененм MyTab в первой свободной рабочей области

USE MyTab IN 0

При таком синтаксисе, таблица будет открыта с алиасом совпадающием с именем собственно таблицы.

Закрыть таблицу в рабочей области, где используется алиса MyTab

USE IN MyTab

Если опция IN не указана, то предполагается, что все происходит в текущей рабочей области.

По поводу собственно запроса. Тебе нужен запрос типа:

Код: plaintext
1.
2.
3.
4.
5.
SELECT ;
personnel.c_name, personnel.i_id FROM personnel ;
FROM personnel ;
LEFT JOIN peoplesessions ON peoplesessions.i_idpersonnel=personnel.i_id ;
HAVING IsNull(peoplesessions.i_idpersonnel) ;
INTO ARRAY source_personnel 


В составленном тобой запросе, всегда сравнение будет происходить только с текущей записью из таблицы peoplesessions. Впрочем, может быть тебе именно это и надо.

Для команды Select-SQL нет необходимости предварительно открывать таблицы источники. Она сама их откроет.

Чтобы предотвратить массу недоразумений, обязательно делай предварительную настройку SET EXCLUSIVE OFF. Причем, если используешь Private DataSession, то эту настройку следует повторять и непосредственно перед открытием таблиц.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Использование таблиц в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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