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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Привязка полей результата по именам  (Прочитано 11243 раз)
CBapor
Гость
« : Январь 12, 2005, 10:28 »

С удивлением обнаружил отсутствие привязки полей результата селекта по именам полей в QSqlQuery.
  В наличие  доступ только по номеру поля с помощью

QVariant QSqlQuery::value ( int i ) const [virtual]

И что действительно нет никакой возможности по имени поля узнать его порядковый номер?

(Конечно такая возможность  присутствует в QSqlCursor  но это же для конкретных view , насколько я понимаю)
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Январь 12, 2005, 11:04 »

Цитата: "CBapor"
С удивлением обнаружил отсутствие привязки полей результата селекта по именам полей в QSqlQuery.


2 ситуации:

1) делаем select * from table

получаем все поля таблицы, и работаем с ними. кк я понял, это твоя ситуация

2) делаем select field1,field2 from table

порядок полей определяешь ты. Значит потом название полей тебе знать не надо. Я пользуюсь всегда этим способом.

Первый подход хорош тем, что писанины меньше. Но ты завись, от структуры базы, если в базу добавляется еще одно поле в середину, ты переписываешь свою программу.

Так что знать порядковый номер, как мне кажентся нафиг не надо
Записан
CBapor
Гость
« Ответ #2 : Январь 12, 2005, 11:31 »

Цитата: "Admin"

1) делаем select * from table

получаем все поля таблицы, и работаем с ними. кк я понял, это твоя ситуация

2) делаем select field1,field2 from table

порядок полей определяешь ты. Значит потом название полей тебе знать не надо. Я пользуюсь всегда этим способом.

Первый подход хорош тем, что писанины меньше. Но ты завись, от структуры базы, если в базу добавляется еще одно поле в середину, ты переписываешь свою программу.

Так что знать порядковый номер, как мне кажентся нафиг не надо


3) SQL-запрос вводится в текстовом поле
  Мы должны определить количество и имена полей и отобразить их в виде таблички Улыбающийся

Ну а более серьезный случай -
 4) результат нам возвращает процедура и порядок полей определяется разработчиком серверной части.
  Договариваться об именах полей гораздо удобнее и надежнее, чем об их порядке.
  Так что отсутствие такой возможности я бы все-таки отнес к недостаткам Qt.
  В ассисте я прочел, что отсутствие привязки по имени сделано ради производительности, но ИМХО это не выдерживает критики. Ведь привязку имен к порядковым номерам можно сделать перед фетчем один раз. а потом фетчь себе и фетчь.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Январь 12, 2005, 11:53 »

Я третий случай вообще не понял
это как в текстовом поле?


а насчет 4 случаю
может быть сделать тогда навесочек
получить структуру таблицы (кажется есть такая SQL команда)
а дальше фетчить и фетчить Улыбающийся

Цитировать
результат нам возвращает процедура и порядок полей определяется разработчиком серверной части


а на счет этого у меня на php процедура возвращает что то типа
array("filed1_name" -> field1_value,"filed2_name" -> field2_value)
может и вам так договорится возращать асациативный массив
Записан
CBapor
Гость
« Ответ #4 : Январь 13, 2005, 10:47 »

Цитата: "Admin"
Я третий случай вообще не понял
это как в текстовом поле?

Это я для изучения qt решил написать небольшую прогу состоящую из виджета TextEdit, в котором вводится произвольный sql-запрос, и виджета Table, в котором выводим результат.
 И вот обломс Улыбающийся

Цитировать

а насчет 4 случаю
может быть сделать тогда навесочек
получить структуру таблицы (кажется есть такая SQL команда)
а дальше фетчить и фетчить Улыбающийся

Ну это же обходные маневры. Я же просто пока изучаю qt, а не решаю конкретную прикладную задачу, поэтому обходные маневры не связанные с qt меня не интересуют, но за советы все равно спасибо Улыбающийся.

Вот QSQLCursor умеет по имени поля результат возвращать.  Значить в принципе qt может это делать. Где-то в глубине зарыта подходящая функцийка!?
   Кто-нибуть копал в этом направлении?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Январь 13, 2005, 11:02 »

Я не большой знако баз данных

но курсор как я помню что то типа временной виртуально таблицы,
созданной из многих других таблиц

так что там это может быть.
Записан
CBapor
Гость
« Ответ #6 : Январь 13, 2005, 11:16 »

Цитата: "Admin"

но курсор как я помню что то типа временной виртуально таблицы,
созданной из многих других таблиц
так что там это может быть.

Имеешь ввиду серверные курсоры? ИМХО QSQLCursor к ним отношения не имеет, насколько я понял.

А вот работа с серверными курсорами это вопрос интересный.
Есть ли QT-шные классы для работы с курсорами Oracle?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Январь 13, 2005, 11:46 »

все я тут пас

что такое серверные курсоры я уже не знаю
и чем они от обчных курсоров отличаются тоже не знаю
Записан
CBapor
Гость
« Ответ #8 : Январь 14, 2005, 09:41 »

Цитата: "Admin"
все я тут пас

что такое серверные курсоры я уже не знаю
и чем они от обчных курсоров отличаются тоже не знаю


Гм.. что ты подразумеваешь под обычными курсорами?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #9 : Январь 14, 2005, 10:20 »

то что я выше написал Улыбающийся
Записан
CBapor
Гость
« Ответ #10 : Январь 17, 2005, 08:43 »

Цитата: "Admin"
то что я выше написал Улыбающийся


Ну описание похоже как раз на серверный курсор, а пишешь, что не знаешь что это такое. Улыбающийся

Фишка в том, что серверные процедуры оракла не умеют возвращать resultset (как , например в MSSQL или SyBase), но зато умеют возвращать курсор, т.е. некую структуру данных, которую можно профетчить и, кроме того,  передавать как обычный параметр как в\из серверную процедуру, так и возвращать курсор как результат функции.
   Наверное стоит создать отдельную тему, а то тут может потеряться вопрос.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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