Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление записей из других таблиц / 7 сообщений из 7, страница 1 из 1
06.12.2004, 08:12
    #32813656
Nimka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей из других таблиц
Помогите, пожалуйста.
Почему то не срабатывает этот код в VFP 5.0
Есть две таблицы с одинаковой структурой
Пишу:
select table2
append from table1 for table1.adate=date()

в table2 заносятся все записи из table1, а не те которые соответствуют текущей дате. В чем дело?
...
Рейтинг: 0 / 0
06.12.2004, 09:29
    #32813728
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей из других таблиц
Дело в том, что в команде APPEND FROM опция FOR относится к той таблице в которую добавляют записи, а не к той из которой эти новые записи берутся. В приведенном синтаксисе, условие FOR будет наложено только на одну текущую запись таблицы table1

В данном случае надо сделать 2 запроса:

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT * FROM table1 ;
INTO CURSOR curTMP NOFILTER ;
WHERE table1.adate=date()

select table2
APPEND FROM (DBF('curTMP'))
USE IN curTMP
...
Рейтинг: 0 / 0
06.12.2004, 09:42
    #32813747
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей из других таблиц
select table2
append from table1 for adate=date()
...
Рейтинг: 0 / 0
06.12.2004, 10:33
    #32813848
Nimka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей из других таблиц
Огромное спасибо. Теперь понятно.
А я голову сломала
...
Рейтинг: 0 / 0
06.12.2004, 12:37
    #32814199
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей из других таблиц
Извиняюсь. Неправильно объяснил, как именно команад APPEND FROM фильтрует записи по FOR-условию.

Похоже примерно на такую логику:

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

Имя этого куросора формируется случайным образом. Поэтому, если необходимо наложить фильтр на данные (отобрать записи из таблицы-источника по определенному условию), то указывать имя таблицы или ее алиас не имеет смысла, поскольку на момент подачи команды APPEND FROM его имя не известно.

Так что AleksMed правильно написал. Не надо указывать алиас. Это и подразмевает наложение фильтра, поскольку в этом случае фильтр будет наложен на этот временный курсор.
...
Рейтинг: 0 / 0
06.12.2004, 15:30
    #32814679
Nimka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей из других таблиц
ВладимирМ, так что не верно в вашем коде?
Я поняла, что выборка сохранилась в курсор CurTMP, а затем в table2 добавляются записи из этого курсора.
Или я чтото перепутала.


Ошибка моя была в том, что я в книге вычитала
"Если из таблицы CURDROP требуется добавить только те записи, у которых значение поля LInProduction равно .F. используйте следующие строки программы:
SELECT PRODHIST
APPEND FROM CURPROD FOR NOT lInProduction
Т.е. получется выбираются записи ( соответствующие условию) из той таблицы, откуда надо их брать, а это оказалось не так
...
Рейтинг: 0 / 0
06.12.2004, 15:34
    #32814693
Nimka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей из других таблиц
Ах, все дошло до меня. Все сработало.
Я поняла, т.е. не надо было указывать перед adate имя таблицы table2!
Ну кто бы мог подумать,в чем фишка зарыта
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление записей из других таблиц / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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