Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с wxDbTable и wxGrid, wxGrid не отображает повторно запрос 
:(
    Опции темы
T0ohtik
Дата 31.7.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



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

   wxDb*                    m_pDb;
   wxInt64*                m_nDataSourceId;              
   wxChar*                 m_strDataSourceConnectionString;
   wxInt32*                m_nDataSourceTypeId;          
   wxChar*                 m_strDataSourceName;            
   wxChar*                 m_strDataSourceOwnerId;
   wxDbTable*            m_DbTable;
   wxDbGridTableBase*   m_DbGridTableBase;
   wxGrid*                  m_grid;
...
   m_nDataSourceId                    = new wxInt64(2);
   m_strDataSourceConnectionString    = new wxChar[255];
     
   m_DbTable = new wxDbTable(m_pDb, wxT("data_source"), 5);
   m_DbTable->SetColDefs(0 , wxT("data_source_id"), DB_DATA_TYPE_INTEGER, m_nDataSourceId,  SQL_C_LONG, sizeof(wxInt64), true);
   m_DbTable->SetColDefs(1 , wxT("data_source_connection_string"), DB_DATA_TYPE_VARCHAR, m_strDataSourceConnectionString, SQL_C_WXCHAR, sizeof(wxChar) * 255 );
   
   m_DbTable->SetRowMode (wxDbTable::WX_ROW_MODE_QUERY);

      if(m_DbTable->Open() && m_DbTable->Query())
      {
         wxDbGridColInfo *columns;
         columns = new wxDbGridColInfo(0, wxGRID_VALUE_LONG, L"1", NULL);
         columns->AddColInfo (1, wxGRID_VALUE_STRING, L"2");       
         m_DbGridTableBase = new wxDbGridTableBase(m_DbTable, columns, wxUSE_QUERY, false);
                
         m_grid = new wxGrid (this, 10001);
         m_grid->SetTable(m_DbGridTableBase, false);
         m_grid->Fit();
      }

//Далее повторно делаем запрос

         m_DbTable->Refresh();
         m_DbTable->QueryBySqlStmt(L"Select * from data_source");

         assert(m_DbTable->Open() && m_DbTable->Query());

         m_DbGridTableBase->AssignDbTable(m_DbTable, false);
         assert(m_grid->SetTable(m_DbGridTableBase, false));
         m_grid->Fit();

    

Это сообщение отредактировал(а) T0ohtik - 31.7.2008, 12:00
PM MAIL   Вверх
Любитель
Дата 31.7.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Что именно не получается? В чём проблема? Выражаётесь поточнее smile


--------------------
PM MAIL ICQ Skype   Вверх
T0ohtik
Дата 31.7.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



Как отрефрешить wxGrid после изменения запроса?
PM MAIL   Вверх
bilbobagginz
Дата 8.8.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Код

         m_DbTable->Refresh();

запускается ДО запроса.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
T0ohtik
Дата 8.8.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



bilbobagginz, немного не понял вопроса. Постараюсь еще раз описать суть проблемы. Есть БД MS SQL, есть wxGrid. wxGrid корректно отображает данные только при первом запросе.
Т.е. к примеру первы запрос у нас там Select * from id, а потом в программе надо сделать второй запрос Select * from id, так вот второй запрос выполнится нормально в  m_DbTable нужное количество нам строк (к примеру 12), а вот wxGrid выводит какую то фигню или 12 одинаковых строк или 12 строк с квадратиками.... 

Это сообщение отредактировал(а) T0ohtik - 8.8.2008, 12:07
PM MAIL   Вверх
bilbobagginz
Дата 8.8.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



я не помню точно как и при каких условиях, но wxWidgets направление сообщений между окнами не всегда интуитивно.
есть сообщения, идущие от отца к сыну, т.е. от m_grid к m_DbTable (т.е. вниз),
а есть которые идут от сына к отцу.
я думаю проблема именно с этим.
попробуйте в дебаггере посмотреть содержимое данных грида после запроса.
и еще, вы пробовали:
Код

m_grid->ForceRefresh();

после запроса ?





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
T0ohtik
Дата 8.8.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



Да что мы только не пробовали и Force и не Force, насколько я разобрался все происходит из - за того, что кто то в цепочке  wxGrid, wxDbGridTableBase, wxDbTable удаляет объявления колонок. Более менее начинает нормально работать, только при повторном создании колонок. Что не есть гуд. 
PM MAIL   Вверх
bilbobagginz
Дата 9.8.2008, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Цитата(T0ohtik @  8.8.2008,  12:29 Найти цитируемый пост)
Более менее начинает нормально работать, только при повторном создании колонок. Что не есть гуд.  

похоже на то, что вам стоит пообщатья с ребятами из wxwidgets, спросить их вопросы...
вообще-то про wxDbGridTableBase написано:
Цитата

If you need to requery an table object the preferred way is that the client keeps ownership.




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
t_rex
Дата 10.8.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 11.10.2006
Где: Украина, г. Запор ожье

Репутация: 2
Всего: 7



Ээ.. может немного не в тему топика, но от wxODBC потихоньку пора уходить, в 2.9 оно доступно только при включенной совместимости с 2.8, а в 3.0 будет упразднено. Поэтому лучше посмотреть в сторону DatabaseLayer. Подробнее на русском можно почитать здесь:
http://www.wxwidgets.info/wx_accessing_sqlite
--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей
PM MAIL WWW ICQ Skype GTalk   Вверх
T0ohtik
Дата 11.8.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



Цитата(t_rex @  10.8.2008,  14:16 Найти цитируемый пост)
Ээ.. может немного не в тему топика, но от wxODBC потихоньку пора уходить, в 2.9 оно доступно только при включенной совместимости с 2.8, а в 3.0 будет 

А где вы прочитали?smile Просто хочу тоже поглядеть, может что интересного еще нарою....

PM MAIL   Вверх
t_rex
Дата 13.8.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 11.10.2006
Где: Украина, г. Запор ожье

Репутация: 2
Всего: 7



Так а чего читать-то? Я пользуюсь сборкой из официального SVN-репозитория. Там wxODBC уже нету.
Ну а так:

http://trac.wxwidgets.org/timeline?from=20...recision=second

2008-03-29
12:10 Changeset [52910]  by FM

ODBC is not part of wx anymore

--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.