crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Qt + SQLite
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Dimix Дата 13.12.2010, 2:07
  Возникла проблема такого характера. Нужно изменить запись в базе данных. Пример.
ID | NAME | LOOK
1 | TOM | 1
2 | JON | 0
Поле LOOK это типо просматривался пользователь или нет
Мне нужно чтоб когда я посмотрю пользователя JON его LOOK стал 1
Я думал просто забирать все данные и записывать их по новому а удалять типо по ID но если я удалю TOM то ID JON останется всеравно 2.
Помогите!
512es Дата 10.12.2010, 22:14
  Dimix, почитай доки про склайт. совершенно безопасно сохранять постоянное подключение к бд. мало того, база данных умеет работать и с несколькими пользователями одновременно.
это тебе не xml-ки.
кроме того, что то мне подсказывает что создание множества баз данных в твоём случае тоже не обосновано.

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

советую пересмотреть концепцию)
Dimix Дата 10.12.2010, 17:55
 
Цитата
В БД существует поле Дата. Как сделать фильтр по заданному пользователем диапазону.
Пример:
___Дата____|К-во|_Чего_
01, 01, 2010 | 100 | литров
06, 02, 2010 | 200 | литров
01, 01, 2011 | 300 | литров

Вывести с 01, 02, 2010 по 01, 06, 2010 года

Тип данных у поля date DATA.

QString ddBegin, mmBegin, yyBegin, ddEnd, mmEnd, yyEnd;
ddBegin="01";mmBegin="02";yyBegin="2010";
ddEnd="01";mmEnd="06";yyEnd="2010";
QSqlQueryModel* model = new QSqlQueryModel;
model->setQuery("SELECT * FROM coming WHERE date >='"+ddBegin+", "+mmBegin+", "+yyBegin+"'and date <='"+ddEnd+", "+mmEnd+", "+yyEnd+"';");

Dimix Дата 10.12.2010, 13:17
 
Цитата
Мне показалось или ты и правда пытаешься создавать и удалять соединения с бд каждый раз? почитай мой пример ещё раз внимательнее

Я и вправде создаю и удаляю каждый раз драйвер БД. Почему я так решил! У меня работа с данными пользователь может заполнять и удалять их (я сделал как 100% вариант сохранения данных так как соединение и драйвер БД являются отруюленными ошибки при аварийном завершении не будет) Я новичек и еще несильно понимаю как правильно...
У меня срочный вопрос.
В БД существует поле Дата. Как сделать ильтр по заданному пользователем диапазону.
Пример:
___Дата____|К-во|_Чего_
01, 01, 2010 | 100 | литров
06, 02, 2010 | 200 | литров
01, 01, 2011 | 300 | литров

Вывести с 01, 02, 2010 по 01, 06, 2010 года
512es Дата 8.12.2010, 21:05
  1) склайту не нужно указывать HostName, UserName и Password

2) в чём суть функции maindbCreate()? по сути она вообще ничего не делает

3) maindbCreate.lastError().text() в maindbCreate() это вообщем то возвращаемая переменная. в твоём примере не используется.

4) не правильно:
queryMaindbInsert.exec("INSERT INTO (name) VALUES ('"+editCreateName->text()+"');");

Для подстановки значений в запрос есть специальная функция prepare():
queryMaindbInsert.prepare("INSERT INTO (name) VALUES (?);");
queryMaindbInsert.addBindValue(ui->editCreateName->text());
if (!queryMaindbInsert.exec()) {qDebug() << queryMaindbInsert.lastError().text(); return;}


5)
CREATE TABLE user (id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(20));

инсертить так как ты делаешь в эту таблицу не получится. id при вставке не задаёшь. возможно ты хотел сделать так:
id INTEGER PRIMARY KEY AUTOINCREMENT


6) создаёшь базу QSqlDatabase::addDatabase("QSQLITE"); а удаляешь QSqlDatabase::removeDatabase("QSQLITE"); -- так нельзя. при создании не указываешь имя соединения, только драйвер. а удаляешь по неизвестному имени соединения "QSQLITE". по имени драйвера то нельзя удалять. должно ругаться на ошибки.

7) мне показалось или ты и правда пытаешься создавать и удалять соединения с бд каждый раз? почитай мой пример ещё раз внимательнее
Dimix Дата 8.12.2010, 20:55
  Почему не соотвецтвует вопросу :mellow: . Я же не говорил для чего мне нужно узнать выделенную строку. А по коду вроде ясно что view это аргумент QTableView.
view->currentIndex().row()

Незнаю я не вижу в коде ненужных действий.
P. S. Все время програмировал на Delphi поэтому я новичек в Qt да и впринципе в С++.
Может логика и неправильная но во всяком случае я другого решения не нашел.
А текущий пример работает (ну пока проблем небыло :) ).
512es Дата 8.12.2010, 20:40
  Dimix, если честно вообще ничего в твоём примере не понял.. советую перечитать его (код) ещё раз самому и попытаться представить логику. что и как делается. очень много противоречий и ненужных действий..
Litkevich Yuriy Дата 8.12.2010, 20:30
 
Цитата(Dimix @ 8.12.2010, 18:57) *
Разобрался
QSqlTableModel model;
model.setTable("coming");
model.select();
model.removeRow(view->currentIndex().row());
это не соответствует вопросу. так ты удалишь выделенную строку.

Dimix Дата 8.12.2010, 16:57
 
Цитата(Dimix @ 8.12.2010, 15:56) *
Вопрос возник такого плана. Как получить выделенную строку в QTableView?

Разобрался
QSqlTableModel model;
model.setTable("coming");
model.select();
model.removeRow(view->currentIndex().row());
Dimix Дата 8.12.2010, 15:56
 
Цитата(Алексей1153 @ 7.12.2010, 22:09) *
наверное, не зря ругается, и так оно и есть :) Попробуй

ui->editCreateName->text()


Я эту проблему решил вот так
void maindbCreate();
void maindbCreateTable();

и т.п.

Вопрос возник такого плана. Как получить выделенную строку в QTableView?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 22:41