Название: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 26, 2013, 11:56 Доброго времени суток...
Никогда раньше в qt qreator не работал, задали на нем написать приложение к которому можно подключить базу данных которую я уже сделал в sqlite3... Как в нем подлючается база данных не знаю... посмотрел много разной литературы но толком суть не понял как это делается... у меня база данных называется fox.db , вид допустим такой -приложение должно по нажатию кнопки подключается база и выполняется запрос который допустим в компоненте LineEdit я буду писать... и результат запроса отображается на каком нибудь другом компоненте... подскажите как это реализовать собственно нужен сам код... Нашел такой по подлючению базы... void MainWindow::on_pushButton_clicked() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("fox"); bool b = db.open(); но не понимаю подключилась ли база данных на самом деле или нет... Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: Serr500 от Май 26, 2013, 12:01 но не понимаю подключилась ли база данных на самом деле или нет... Ну так проверьте результат функции QSqlDatabase::open (http://qt-project.org/doc/qt-4.8/qsqldatabase.html#open)Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: thechicho от Май 26, 2013, 13:27 я как раз ща работаю с бд.
такой код использую: Код: QSqlDatabase db = QSqlDatabase::database(); единожды выполнив соединение с бд и ее открытие, до тех пор пока бд явно не закрыта Код: db.close(); можно в любом методе класса работать с бд таким образом: Код: QSqlQuery query; но если вы явно закроете бд, то придется делать так: Код: QSqlDatabase db = QSqlDatabase::database(); я работаю с бд в динамически создаваемом диалоге, поэтому у меня бд открыта пока не закрыт диалог. закрывается ли бд, при уничтожении db, когда тот выходит из области видимости стека, я точно не знаю. универсально, в каждый метод где нужна бд, добавить: Код: QSqlDatabase db = QSqlDatabase::database(); и таким образом делать запросы: Код: QSqlQuery query; Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 26, 2013, 14:58 взял часть из вашего кода объясните мне ее пожалуйста
db.setDatabaseName("cities");\\- эта строчка так понимаю подключение базы? надо указывать весь ее путь? или имя достаточно? сейчас я ее закинул в папку с самим проектом.......... // QSqlQuery query;--- что означает эта строчка и под ней? для чего они служат? если простым и человеческим языком? // query.exec("SELECT * FROM Города;"); Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: thechicho от Май 26, 2013, 15:15 //db.setDatabaseName("cities");\\- эта строчка так понимаю подключение базы? надо указывать весь ее путь? или имя достаточно?
а как вы думаете? //QSqlQuery query; это означает создание объекта класса QSqlQuery с именем query :D //query.exec("SELECT * FROM Города;"); это означает вызов метода exec() класса QSqlQuery с параметром "SELECT * FROM Города;" :D ппц нубы пошли, даешь готовый код, не понимают элементарных вещей :-\ //задали на нем написать приложение к которому можно подключить базу данных которую я уже сделал в sqlite3 https://www.free-lance.ru/ http://www.prog.org.ru/board_67_0.html Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 26, 2013, 16:39 ну как сделать чтоб результат запроса отобразился именно в компаненте каком нибудь? допустим Listviev
Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: LEO от Май 27, 2013, 08:00 прочитай про модели, именно модель ты и засовываешь во вью ;)
Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 28, 2013, 06:28 thechicho у вас в первом коде есть строчка подключения базы выглядит так
QSqlDatabase db = QSqlDatabase::database(); db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("cities"); if (!db.open()) { QMessageBox::warning(this, qApp->applicationName(), QString("Не открывается бд с городами: %1").arg(db.databaseName())); return; } у меня допустим нету базы с именем cities , после запуска программы появляется файл пустой с таким именем... если вписываю свою базу fox, предварительно допавив ее в папку с проектом , то опять же после запуска программы появляется пустой файл с именем fox который я так понимаю программа и подключает к себе... почему она вообще создает файл с таким же именем как моя база? вместо того чтоб подключать мою базу... Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: Serr500 от Май 28, 2013, 08:08 у меня допустим нету базы с именем cities , после запуска программы появляется файл пустой с таким именем... если вписываю свою базу fox, предварительно допавив ее в папку с проектом , то опять же после запуска программы появляется пустой файл с именем fox который я так понимаю программа и подключает к себе... почему она вообще создает файл с таким же именем как моя база? вместо того чтоб подключать мою базу... патамучта дапавив сваю базу в папку с проектом праграмма иё нинайдёт! Если указывать только имя без пути, то поиск ведётся в рабочем (текущем) каталоге, а для Creator'а рабочий каталог обычно не совпадает с папкой исходников проекта, поскольку он создаёт так называемые "теневые сборки". Укажите полный путь к файлу или разместите файл в каталоге с бинарниками.Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: LEO от Май 28, 2013, 08:20 если база в папке где программа то пропиши в подключении к базе
QApplication::applicationFilePath(); т.е. он сам будет искать базу в данной папке Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: thechicho от Май 28, 2013, 10:02 потому, что ты не в тот универ поступил. надо было в школу милиции идти
http://music.yandex.ru/#!/track/1703858/album/168771 (http://music.yandex.ru/#!/track/1703858/album/168771) ты добавляешь так Код: db.setDatabaseName("fox"); Код: //у меня база данных называется fox.db Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 28, 2013, 10:30 прописал весь путь к базе...
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("C:/Users/Алексей/Desktop/sqlite3/fox"); db.open(); так же пробовал и с расширением QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("C:/Users/Алексей/Desktop/sqlite3/fox.db"); db.open(); В итоге в этой папке появляется опять же второй файл с именем fox пустой а рядом с ним моя база fox. Даже если проверять если ли подключение или нет, то не факт что созданное подключение будет именно с моей базой а не тем файлом который появляется при запуске программы... Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 28, 2013, 11:25 вот сам проект с базой, попробуйте сами....
Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: LEO от Май 28, 2013, 11:42 а как вы хотели?!?!?!?!
Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 28, 2013, 11:44 ну всмысле зачем он создает второй файл с таким же именем как у меня только пустой... разве так должно быть??
Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 28, 2013, 11:46 1--- мне надо подключить базу
Код: QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); QSqlQuery query; query.exec("SELECT * from kod"); 3---- вывести результат запроса в какой нибудь компонент желательно на форме размещенный ... вот три этих пункта я не знаю как выполнить... Все мое обучение заочное это получение заданий и решение их только через интернет,тоесть группы у меня нету... лекций нету... полное самообоучение через интернет... может у кого то хорошо полностью самостоятельно получается обучатся у меня ну так как есть... но делать все равно надо... Если кто из вас прям хорошо понимает то поясните наглядно если не лень то попробуйте со мной это задание сделать... Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: Serr500 от Май 28, 2013, 11:54 он создает второй файл с таким же именем как у меня только пустой... В одной папке не может быть двух объектов с одинаковыми именами. У вас файл называется "fox.db;". Уберите точку с запятой в конце имени.Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: LEO от Май 28, 2013, 12:55 ...
Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 28, 2013, 15:15 за подсказу с точкой запятой спасибо большое.... действительно визуально не заметил...
по коду LEO все запускается... только после запуска нажимаю на кнопку и результат запроса на форму не выводится... Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: Serr500 от Май 28, 2013, 15:16 А полный путь кто указывать будет? Если прописать, то всё нормально работает.
Код: db.setDatabaseName("d:\\Temp\\untitled1\\fox.db3"); Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: thechicho от Май 28, 2013, 15:21 //Если кто из вас прям хорошо понимает то поясните наглядно если не лень то попробуйте со мной это задание сделать...
да походу только тебе лень. подумать. головой. Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 28, 2013, 15:30 да мне не лень... все запустилось) дальше с кнопками и синглами попробую по возится... препод по почте час назад практические прислал))) ура))) может из них часть материала возму))) спасибо) не судите строго)
Название: Re: как подключить базу данных и вывести информацию спомощью запроса sql? Отправлено: lexflax от Май 29, 2013, 16:15 И снова здравствуйте))))
зашел еще раз сказать спасибо тем кто помог и просто показать то что получилось ))) Может у кого будет тоже задание такое и ему это поможет))) Остался последний пунк сделать отчет через программу eXaro... С ней наверно придется повозится но по ней завтра почитаю и по разбираюсь) |