Russian Qt Forum

Qt => Базы данных => Тема начата: CBapor от Январь 12, 2005, 10:28



Название: Привязка полей результата по именам
Отправлено: CBapor от Январь 12, 2005, 10:28
С удивлением обнаружил отсутствие привязки полей результата селекта по именам полей в QSqlQuery.
  В наличие  доступ только по номеру поля с помощью

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

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

(Конечно такая возможность  присутствует в QSqlCursor  но это же для конкретных view , насколько я понимаю)


Название: Re: Привязка полей результата по именам
Отправлено: Admin от Январь 12, 2005, 11:04
Цитата: "CBapor"
С удивлением обнаружил отсутствие привязки полей результата селекта по именам полей в QSqlQuery.


2 ситуации:

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

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

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

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

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

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


Название: Re: Привязка полей результата по именам
Отправлено: CBapor от Январь 12, 2005, 11:31
Цитата: "Admin"

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

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

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

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

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

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


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

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


Название: Привязка полей результата по именам
Отправлено: Admin от Январь 12, 2005, 11:53
Я третий случай вообще не понял
это как в текстовом поле?


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

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


а на счет этого у меня на php процедура возвращает что то типа
array("filed1_name" -> field1_value,"filed2_name" -> field2_value)
может и вам так договорится возращать асациативный массив


Название: Привязка полей результата по именам
Отправлено: CBapor от Январь 13, 2005, 10:47
Цитата: "Admin"
Я третий случай вообще не понял
это как в текстовом поле?

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

Цитировать

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

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

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


Название: Привязка полей результата по именам
Отправлено: Admin от Январь 13, 2005, 11:02
Я не большой знако баз данных

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

так что там это может быть.


Название: Привязка полей результата по именам
Отправлено: CBapor от Январь 13, 2005, 11:16
Цитата: "Admin"

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

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

А вот работа с серверными курсорами это вопрос интересный.
Есть ли QT-шные классы для работы с курсорами Oracle?


Название: Привязка полей результата по именам
Отправлено: Admin от Январь 13, 2005, 11:46
все я тут пас

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


Название: Привязка полей результата по именам
Отправлено: CBapor от Январь 14, 2005, 09:41
Цитата: "Admin"
все я тут пас

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


Гм.. что ты подразумеваешь под обычными курсорами?


Название: Привязка полей результата по именам
Отправлено: Admin от Январь 14, 2005, 10:20
то что я выше написал :)


Название: Привязка полей результата по именам
Отправлено: CBapor от Январь 17, 2005, 08:43
Цитата: "Admin"
то что я выше написал :)


Ну описание похоже как раз на серверный курсор, а пишешь, что не знаешь что это такое. :)

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