crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 28.3.2024, 15:39