Russian Qt Forum
Октябрь 02, 2024, 09:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: заполнение в Qt данными базы из нескольких связанных таблиц  (Прочитано 7025 раз)
samovar7777
Гость
« : Июнь 06, 2009, 18:32 »

Добрый вечер всем!! Помогите, пож-та, разобраться в следующем: База данных создана в MySql. База состоит из нескольких связанных таблиц. Есть форма, с которой должны заносится данные в базу(в разные таблицы)
Во всех рассмотренных источниках мне всреч. вставка данных только в одну таблицу:
QSqlQuery query;
     query.prepare("INSERT INTO employee (id, name, salary)"
                   "VALUES (?, ?, ?)");
     query.addBindValue(1001);
     query.addBindValue("Thad Beaumont");
     query.addBindValue(65000);
     query.exec();
Можно ли модифицировать данный программный код для вставки данных в несколько таблиц (связанных между собой)Непонимающий!!!! Или какие еще существуют пути решения данной задачи. Помогите, пож-та. Заранее Вам спасибо!!!
Записан
ритт
Гость
« Ответ #1 : Июнь 06, 2009, 19:06 »

следует изменить запрос соответствующим образом - вот и вся модификация кода...
Записан
samovar7777
Гость
« Ответ #2 : Июнь 07, 2009, 11:03 »

следует изменить запрос соответствующим образом - вот и вся модификация кода...
Можете подробнее раскрыть фразу "соответствующим образом"Непонимающий!!!!!!!
Буду очень благодарен...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июнь 07, 2009, 11:32 »

В SQL, если мне память не изменяет, запрос вставки/обновления может быть адресован только для одной таблицы.
Следовательно, нужно сделать несколько запросов, каждый для своей таблицы
Записан

Юра.
samovar7777
Гость
« Ответ #4 : Июнь 07, 2009, 12:44 »

Действительно, делая отдельными запросами, заполняет отдельные несвязанные таблицы;)......Большое спасибо Вам!!!! Осталось разобраться в заполнении связанных таблиц....
Записан
VIMSVEI
Гость
« Ответ #5 : Июнь 09, 2009, 21:00 »

Еще можешь сделать хранимую процедуру на стороне БД, в которую параметрами передаешь данные для вставки в таблицы. В теле этой процедуры пишешь SQL-запросы на разнесение данных по таблицам...
Записан
developer
Гость
« Ответ #6 : Июнь 10, 2009, 10:27 »

Если очень много связанных таблиц и нужно вставить сложные данние, я б рекомендовал использовать VIEW. То-есть примерно так:
1. создать view (CREATE VIEW MyFirstView AS SELECT table1.col1, table2.col2, table3.col3 FROM table1, table2, table3);
          Таким образом мы создаем так сказать новою таблицу MyFirstView которою мы можем полноценно использовать как таблицу.
2. Программно делать инсерт, селект, апдейт одной строчкой из кода.
          QSqlQuery query;
          query.prepare("INSERT INTO MyFirstView (col1, col2, col3)"
                   "VALUES (?, ?, ?)");
          query.addBindValue(1001);
          query.addBindValue("Thad Beaumont");
          query.addBindValue(65000);
          query.exec();

Подробнее про виевы читай доку.
Записан
MoPDoBoPoT
Гость
« Ответ #7 : Июнь 10, 2009, 10:59 »

Если очень много связанных таблиц и нужно вставить сложные данние, я б рекомендовал использовать VIEW. То-есть примерно так:
1. создать view (CREATE VIEW MyFirstView AS SELECT table1.col1, table2.col2, table3.col3 FROM table1, table2, table3);
          Таким образом мы создаем так сказать новою таблицу MyFirstView которою мы можем полноценно использовать как таблицу.
2. Программно делать инсерт, селект, апдейт одной строчкой из кода.
          QSqlQuery query;
          query.prepare("INSERT INTO MyFirstView (col1, col2, col3)"
                   "VALUES (?, ?, ?)");
          query.addBindValue(1001);
          query.addBindValue("Thad Beaumont");
          query.addBindValue(65000);
          query.exec();

Подробнее про виевы читай доку.
Так можно делать, если представление обновляемо. Чтобы узнать, в каких случаях представление обновляемо, надо читать доку конкретной СУБД.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 22.