:: Главная :: Решения :: Статьи :: Проект "Русский 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


Тема Просмотров Написано Написано
  Работа с данными 6329 Владимир Максимов 01.03.05 22:04
  Выбрать из дочерней таблицы записи с максимальной датой 21176 Владимир Максимов 15.06.05 21:08
  Выбрать записи с повторяющимися (дублирующими) значениями поля 12501 Владимир Максимов 27.06.05 21:21
  Как выполнить восстановление поврежденных индексов 10173 Владимир Максимов 29.06.05 21:04
  Как изменить значения в одной таблице данными из другой 12784 Владимир Максимов 29.06.05 21:40
  Запрос с GROUP BY выдает сообщение о синтаксической ошибке 11914 Владимир Максимов 20.07.05 17:47
  При работе в сети иногда не открывается таблица 5696 Владимир Максимов 20.07.05 18:36
  Как получить программный код создания структуры базы данных 8100 Владимир Максимов 18.09.05 11:14
  Как восстановить поврежденную таблицу 20099 Владимир Максимов 31.08.08 23:02


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

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

01.12.2020 11:32:44 exec: 0.15
Mem: 1.22 Mb

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