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


Форумы  :: FAQ FoxPro

Как изменить значения в одной таблице данными из другой
Дата: 29.06.05 20: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


Тема Просмотров Написано Написано
  Работа с данными 6009 Владимир Максимов 01.03.05 21:04
  Выбрать из дочерней таблицы записи с максимальной датой 19585 Владимир Максимов 15.06.05 20:08
  Выбрать записи с повторяющимися (дублирующими) значениями поля 11456 Владимир Максимов 27.06.05 20:21
  Как выполнить восстановление поврежденных индексов 9421 Владимир Максимов 29.06.05 20:04
  Как изменить значения в одной таблице данными из другой 11137 Владимир Максимов 29.06.05 20:40
  Запрос с GROUP BY выдает сообщение о синтаксической ошибке 10872 Владимир Максимов 20.07.05 16:47
  При работе в сети иногда не открывается таблица 5339 Владимир Максимов 20.07.05 17:36
  Как получить программный код создания структуры базы данных 7689 Владимир Максимов 18.09.05 10:14
  Как восстановить поврежденную таблицу 18024 Владимир Максимов 31.08.08 22:02


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

On-line: 48 Simple777 Дмитрий Петров  and Guests: 46


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