:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Как изменить значения в одной таблице данными из другой
Дата: 29.06.05 21:40:45 ОтветитьЦитировать

Задача

Есть две таблицы связанные отношением один-к-одному по содержимому ключевых полей. Как можно изменить значения в поле главной таблицы на значение поля подчиненной таблицы из соответствующей записи?

Решение

Исходные данные

* Главная таблица
CREATE CURSOR tabMain (tabMainID I, Summa N(18,2))
INDEX ON tabMainID TAG tabMainID
SET ORDER TO 0
INSERT INTO tabMain (tabMainID, Summa) VALUES (1, 0)
INSERT INTO tabMain (tabMainID, Summa) VALUES (2, 0)
INSERT INTO tabMain (tabMainID, Summa) VALUES (3, 0)
* Подчиненная таблица
CREATE CURSOR tabChild (tabChildID I, tabMainID I, Qty I, Price N(18,2))
INDEX ON tabMainID TAG tabMainID
SET ORDER TO 0
INSERT INTO tabChild (tabChildID, tabMainID, Qty, Price) VALUES (1, 1, 10, 0.25)
INSERT INTO tabChild (tabChildID, tabMainID, Qty, Price) VALUES (2, 2, 15, 10.05)
INSERT INTO tabChild (tabChildID, tabMainID, Qty, Price) VALUES (3, 3, 30, 5.00)

Способ решения отличается для версии Visual FoxPro 9 и младших версий, поскольку в 9 версии значительно расширены возможности команды Select-SQL

* Для версии младше Visual FoxPro 9
SELECT tabMain
REPLACE FOR SEEK(tabMain.tabMainID,"tabChild","tabMainID") ;
Summa WITH tabChild.Qty*tabChild.Price
* Или через команду UPDATE
UPDATE tabMain SET Summa = tabChild.Qty*tabChild.Price ;
WHERE SEEK(tabMain.tabMainID,"tabChild","tabMainID")
* Для Visual FoxPro 9
UPDATE tabMain ;
SET Summa =tabChild.Qty*tabChild.Price ;
FROM tabChild ;
WHERE tabMain.tabMainID=tabChild.tabMainID

Если дочерняя таблица не имеет нужного индекса, то для версии младше Visual FoxPro 9 остается только сканирование главной таблицы с поиском нужной записи в подчиненной таблице через команду LOCATE
Ratings: 0 negative/0 positive


Тема Просмотров Написано Написано
  Работа с данными 6674 Владимир Максимов 01.03.05 22:04
  Выбрать из дочерней таблицы записи с максимальной датой 22058 Владимир Максимов 15.06.05 21:08
  Выбрать записи с повторяющимися (дублирующими) значениями поля 13048 Владимир Максимов 27.06.05 21:21
  Как выполнить восстановление поврежденных индексов 10756 Владимир Максимов 29.06.05 21:04
  Как изменить значения в одной таблице данными из другой 13383 Владимир Максимов 29.06.05 21:40
  Запрос с GROUP BY выдает сообщение о синтаксической ошибке 12371 Владимир Максимов 20.07.05 17:47
  При работе в сети иногда не открывается таблица 5956 Владимир Максимов 20.07.05 18:36
  Как получить программный код создания структуры базы данных 8396 Владимир Максимов 18.09.05 11:14
  Как восстановить поврежденную таблицу 21646 Владимир Максимов 31.08.08 23:02


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 2 (Гостей: 2)

© 2006 Fox Club 
Яндекс.Метрика