Название: Как узнать какой таблице принадлежит поле Отправлено: kandrey от Январь 28, 2014, 11:01 Есть запрос вида
select t1.name, t2.name from t1 left join t2 on t1.t2_id = t2.id После выполнения запроса QSqlRecord будет хранить список QSqlField-ов с одинаковыми именами "name" Как узнать какой таблице, t1 или t2, принадлежит каждый филд ? Название: Re: Как узнать какой таблице принадлежит поле Отправлено: Hellraiser от Январь 28, 2014, 11:31 А что, алиасы уже запретили?
Код
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: Serr500 от Январь 28, 2014, 11:32 1) По индексу. Используем QSqlField QSqlRecord::field(int index) const. t1.name будет иметь меньший индекс, чем t2.name.
2) Задача изначально поставлена неправильно. Если выбираются поля с разными именами, надо использовать псевдонимы: Код: select t1.name as name_t1, t2.name as name_t2 from t1 left join t2 on t1.t2_id = t2.id; Название: Re: Как узнать какой таблице принадлежит поле Отправлено: kandrey от Январь 28, 2014, 11:44 В процессе работы программы значения полей меняются и надо сформировать UPDATE,.. я знаю что обновляемая таблица - t1, но не могу различить какой таблице принадлежат поля,...алиасы в UPDATE я тоже не могу передать
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: Hellraiser от Январь 28, 2014, 12:23 А их и не надо передавать. Программа должна знать, что если изменилось поле t2_name, то и апдейтить надо таблицу t2.
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: kandrey от Январь 28, 2014, 12:31 Откуда же она узнает, она и понятия не имеет какие там будут запросы,..ей надо только пройти по списку филдов, и если они поменялись то затолкать их в UPDATE, но она должна знать какой филд принадлежит t1 а какой нет
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: Hellraiser от Январь 28, 2014, 12:37 Что значит не будет знать? Если текст запроса пишется в коде программы, то программист уже знает все запросы. Если же вся бизнес-логика реализована на стороне сервера, то и обновлять надо на стороне сервера, а не в программном коде. В любом случае, надо пересматривать подход, так как запросы такого типа нормальные сервера БД не признают за обновляемые.
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: kandrey от Январь 28, 2014, 12:42 SELECT пишет программист (или пользователь),..по селекту формируется TableView (через model/view) а UPDATE формируется автоматом,..не писать же на каждый select свой update
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: Hellraiser от Январь 28, 2014, 13:08 Вот пусть каждый и пишет свой апдейт на свой селект. Для программ с фиксированной логикой - программист, а если это что-то типа интерпретатора SQL - пусть пользователь и обновляет свои запросы.
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: kandrey от Январь 28, 2014, 13:12 это да,...это конечно можно,... только не удобно.
Вопрос остается открытым. Название: Re: Как узнать какой таблице принадлежит поле Отправлено: Serr500 от Январь 28, 2014, 15:44 То, что Вы хотите сделать невозможно. Единственный вариант - перехватывать SQL-запрос пользователя и парсить его самостоятельно.
Название: Re: Как узнать какой таблице принадлежит поле Отправлено: ploop от Январь 28, 2014, 23:16 SELECT пишет программист (или пользователь),..по селекту формируется TableView (через model/view) а UPDATE формируется автоматом,..не писать же на каждый select свой update Что-то типа SQL-консоли? То есть, у вас запрос: select t1.name, t2.name from t1 left join t2 on t1.t2_id = t2.id и вы хотите сделать update t2 set name = ..., даже с учётом того, что такой записи, возможно, в t2 не существует (left join)? А если там пользователь такой трёхэтажный запрос навертит, что плохо станет, не думали? :) |