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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: БД для новичка. Помогите, нужно быстро разобратся  (Прочитано 19406 раз)
niXman
Гость
« Ответ #15 : Декабрь 05, 2009, 23:56 »

Код
SQL
DROP TABLE *
 
Записан
daimon
Гость
« Ответ #16 : Декабрь 05, 2009, 23:59 »

Код
SQL
DROP TABLE *
 
Это вроде удалить таблицу, а как одну ячеку (0,0)?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #17 : Декабрь 06, 2009, 00:04 »

из таблицы в БД, нельзя удалить ячейку. В БД есть понятие "запись" (подобна строке), и манипуляции происходят с записями.

Я взял пример cachedtable и перенёс из демки sqlbrowser (плюс файл connection) несколько методов.
Смотри во вложении (через контекстное меню можешь вставлять и удалять записи)

В коде сделал пометки, куда внесены изменения:
Код
C++ (Qt)
//--->>>-----
так помечено начало изменения
Код
C++ (Qt)
//---<<<-----
так помечено завершение изменения
Записан

Юра.
daimon
Гость
« Ответ #18 : Декабрь 06, 2009, 00:12 »

из таблицы в БД, нельзя удалить ячейку. В БД есть понятие "запись" (подобна строке), и манипуляции происходят с записями.

Я взял пример cachedtable и перенёс из демки sqlbrowser (плюс файл connection) несколько методов.
Смотри во вложении (через контекстное меню можешь вставлять и удалять записи)

В коде сделал пометки, куда внесены изменения:
Код
C++ (Qt)
//--->>>-----
так помечено начало изменения
Код
C++ (Qt)
//---<<<-----
так помечено завершение изменения
Почему в БД нельзя вставлять строки в середину (новые строки добавляются в конец)?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #19 : Декабрь 06, 2009, 00:14 »

>>Почему в БД нельзя вставлять строки в середину (новые строки добавляются в конец)?
так устроены все БД.

Записи всегда добавляются в конец. Ещё раз напомню: БД это не эксель. БД - БАЗА ДАННЫХ!
Записан

Юра.
daimon
Гость
« Ответ #20 : Декабрь 06, 2009, 00:20 »

С помощью чего можна реализовать что-то похожее на ексель
-QTableWidget - сделал (много оперативы жрёт  и тормозит)
-QAbstractTableModel QTableView - (много оперативы жрёт) Вопрос: какой создать вектор для данных 2 ролей
-БД - не поддерживает вставку в середину
Может в БД добавить id integer и сортировать БД по нём (при вставке в модель фиксирую новый id, а старые сдвинаю).

Что посоветуете сделать?
« Последнее редактирование: Декабрь 06, 2009, 01:01 от daimon » Записан
gmorgunov
Гость
« Ответ #21 : Декабрь 06, 2009, 00:28 »

Еще раз проверил пример без model.submit(). Работает точно так же, как и с model.submit().
Lit-uriy - признаю, ошибся я.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #22 : Декабрь 06, 2009, 01:03 »

>>Что делать?
вариантов море.

Если тебе нужно некое подобие электронных таблиц, возьми готовый - QSimpleSheet, и переделай его, если в этом есть нужда
Записан

Юра.
daimon
Гость
« Ответ #23 : Декабрь 06, 2009, 01:49 »

>>Что делать?
вариантов море.

Если тебе нужно некое подобие электронных таблиц, возьми готовый - QSimpleSheet, и переделай его, если в этом есть нужда
Код:
void Table::sort(TableSort tableSort)
{
   QTableWidgetSelectionRange range = tableSort.getRange();
   QList<int> rowsOrColumns; //TODO: can we do it without QList to get higher speed?
   
   if (tableSort.getSortDirection() == TableSort::SortRows)
      for (int i=range.topRow(); i<=range.bottomRow(); i++)
         rowsOrColumns.append(i);
   else
      for (int j=range.leftColumn(); j<=range.rightColumn(); j++)
         rowsOrColumns.append(j);
   
   tableSort.setTable(this);
   qStableSort(rowsOrColumns.begin(), rowsOrColumns.end(), tableSort);
   
   QTableWidgetItem *cells[range.rowCount()][range.columnCount()];
   for (int i=0; i<range.rowCount(); i++)
      for (int j=0; j<range.columnCount(); j++)
         cells[i][j] = takeItem(i+range.topRow(), j+range.leftColumn());
   
   if (tableSort.getSortDirection() == TableSort::SortRows)
   {
      for (int i=0; i<range.rowCount(); i++)
         for (int j=0; j<range.columnCount(); j++)
            setItem(i+range.topRow(), j+range.leftColumn(),
                    cells[ rowsOrColumns[i]-range.topRow() ][j]);
   }
   else
   {
      for (int i=0; i<range.rowCount(); i++)
         for (int j=0; j<range.columnCount(); j++)
            setItem(i+range.topRow(), j+range.leftColumn(),
                   cells[i][rowsOrColumns[j]-range.leftColumn()]);
   }
}
ошибка в  QTableWidgetItem *cells[range.rowCount()][range.columnCount()]
Как исправить?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #24 : Декабрь 06, 2009, 02:02 »

>>QTableWidgetItem *cells[range.rowCount()][range.columnCount()]
А что это значит?
Записан

Юра.
daimon
Гость
« Ответ #25 : Декабрь 06, 2009, 02:04 »

>>QTableWidgetItem *cells[range.rowCount()][range.columnCount()]
А что это значит?
Нашел в проге http://www.qt-apps.org/content/show.php/QSimpleSheet?content=75343, которую вы посоветовали
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #26 : Декабрь 06, 2009, 02:15 »

ошибка при компиляции? что пишет?
Записан

Юра.
daimon
Гость
« Ответ #27 : Декабрь 06, 2009, 02:17 »

ошибка при компиляции? что пишет?
1>------ Build started: Project: QSimplesheet, Configuration: Release Win32 ------
1>Compiling...
1>Table.cpp
1>.\Table.cpp(472) : error C2057: expected constant expression
1>.\Table.cpp(472) : error C2466: cannot allocate an array of constant size 0
1>.\Table.cpp(472) : error C2057: expected constant expression
1>.\Table.cpp(472) : error C2466: cannot allocate an array of constant size 0
1>.\Table.cpp(472) : error C2087: 'cells' : missing subscript
1>.\Table.cpp(472) : error C2133: 'cells' : unknown size
1>Build log was saved at "file://c:\Documents and Settings\Dima\Мои документы\Visual Studio 2008\Projects\QSimplesheet\QSimplesheet\Release\BuildLog.htm"
1>QSimplesheet - 6 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Записан
daimon
Гость
« Ответ #28 : Декабрь 06, 2009, 02:25 »

>>QTableWidgetItem *cells[range.rowCount()][range.columnCount()]
А что это значит?
Нашел в проге http://www.qt-apps.org/content/show.php/QSimpleSheet?content=75343, которую вы посоветовали
надо заменить на  
Код:
QVector<QVector< QTableWidgetItem *>> cells;
 cells.resize(range.rowCount());
 for(int i=0;i<range.rowCount();i++)
 cells[i].resize(range.columnCount());
Вот у меня тогда вопрос: упадёт ли быстродействие и расход памяти в таком случае?
С сортировка есть неточность - она сортирует строки, а не числа 2 20 3 4 не сортирует
« Последнее редактирование: Декабрь 06, 2009, 02:28 от daimon » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #29 : Декабрь 06, 2009, 02:29 »

скачал сырцы, собрал, запустил  - всё работает, никаких ошибок.
Записан

Юра.
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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