Russian Qt Forum
Июль 14, 2020, 15:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Пошаговая инструкция. Работа с базой данных SQLite на Qt C++  (Прочитано 41988 раз)
8Observer8
Гость
« : Март 13, 2014, 14:46 »

Инструментарий

- SDK Qt 5.2.0
- ОС Windows 7

Примечания
1) Инструкция составлена по видео: http://www.youtube.com/watch?v=cc06D3wuTn4
2) По следующей ссылке написано, как вставлять, редактировать и удалять ряды таблицы базы данных: http://zetcode.com/db/sqlite/datamanipulation/

Внешний вид приложения и описание

Приложение подключается к базе данных, где хранятся имена и пароли пользователей. Если пользователь вводит правильный пароль, то выводится сообщение:



Инструкция

- открываем браузер Mozilla Firefox
- в меню браузера выбираем "Web Developer" -> выбираем "SQLite Manager"

Примечание. Если Вы не нашли у себя "SQLite Manager", то установите: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/?src=

- в меню "SQLite Manager" выбираем "Database" -> выбираем "New Database"
- в открывшемся окне вводим имя базы данных, к примеру: Accounts

Примечание. При выборе пути для сохранения базы данных, нужно учитывать, что этот путь должен совпадать с тем путём, который вернёт статический метод QDir::currentPath()

- в меню выбираем "Table" -> "Create Table"

- заполняем форму, как показано на рисунке:



- заполняем таблицу, как показано на рисунке:



- запускаем Qt Creator
- если у Вас Qt Creator на русском, то я рекомендовал бы переключиться на английский. Для этого выбираем в меню "Инструменты" -> "Параметры..."
- в окне "Параметры" слева выбираем "Среда" -> открываем вкладку "Основные" -> выбираем в выпадающем списке "English" -> нажимаем кнопку "OK" -> перезапускаем Qt Creator
- в меню Qt Creator'а выбираем "File" -> "New File or Project..." (Ctrl+N)
- в разделе "Projects" выбираем "Applications" -> во второй колонке выбираем "Qt Widgets Application"
- нажимаем кнопку "Choose"
- в поле "Name" вводим: DatabaseLoginForm и нажимаем "Next" (2 раза)
- в поле "Base Class" выбираем "QDialog" -> нажимаем "Next" -> нажимаем "Finish"
- скачиваем исходный код проекта (кнопка "Download ZIP" справа-внизу): https://github.com/8Observer8/DatabaseLoginForm
- заменяем файлы текущего проекта на файлы из скаченного
- нажимаем Ctrl+R, чтобы запустить программу

P.S. На всякий случай привожу все файлы проекта здесь

DatabaseLoginForm.pro
Код
C++ (Qt)
QT += core gui sql
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
TARGET = DatabaseLoginForm
TEMPLATE = app
 
 
SOURCES += main.cpp \
          dialog.cpp
 
HEADERS += dialog.h
 
FORMS += dialog.ui
 

main.cpp
Код
C++ (Qt)
#include "dialog.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   Dialog w;
   w.show();
 
   return a.exec();
}
 

dialog.h
Код
C++ (Qt)
#ifndef DIALOG_H
#define DIALOG_H
 
#include <QDialog>
#include <QDebug>
#include <QtSql>
#include <QFileInfo>
#include <QMessageBox>
 
namespace Ui {
class Dialog;
}
 
class Dialog : public QDialog
{
   Q_OBJECT
 
public:
   explicit Dialog(QWidget *parent = 0);
   ~Dialog();
 
private slots:
   void on_btnLogin_clicked();
   void on_btnClear_clicked();
 
private:
   Ui::Dialog *ui;
   QSqlDatabase myDB;
};
 
#endif // DIALOG_H
 

dialog.cpp
Код
C++ (Qt)
#include "dialog.h"
#include "ui_dialog.h"
 
Dialog::Dialog(QWidget *parent) :
   QDialog(parent),
   ui(new Ui::Dialog)
{
   ui->setupUi(this);
 
   myDB = QSqlDatabase::addDatabase("QSQLITE");
 
   QString pathToDB = QDir::currentPath()+QString("/Accounts.sqlite");
   myDB.setDatabaseName(pathToDB);
 
   QFileInfo checkFile(pathToDB);
 
   if (checkFile.isFile()) {
       if (myDB.open()) {
           ui->lblResult->setText("[+] Connected to Database File");
       }
       else {
           ui->lblResult->setText("[!] Database File was not opened");
       }
   }
   else {
       ui->lblResult->setText("[!] Database File does not exist");
   }
}
 
Dialog::~Dialog()
{
   delete ui;
   qDebug() << "Closing the connection to Database file on exist";
   myDB.close();
}
 
void Dialog::on_btnClear_clicked()
{
   ui->txtUser->setText("");
   ui->txtPass->setText("");
}
 
void Dialog::on_btnLogin_clicked()
{
   QString Username, Password;
 
   Username = ui->txtUser->text();
   Password = ui->txtPass->text();
 
   if (!myDB.isOpen()) {
       qDebug() << "No connection to Database";
       return;
   }
 
   QSqlQuery qry;
 
   if (qry.exec("SELECT Username, Password, Role FROM Users WHERE Username=\'" + Username +
                "\' AND Password=\'" + Password + "\'"))
   {
       if (qry.next()) {
           ui->lblResult->setText("[+] Valid Username and Password");
           QString msg = "Username = " + qry.value(0).toString() + "\n" +
                   "Password = " + qry.value(1).toString() + "\n" +
                   "Role = " + qry.value(2).toString() + "\n";
           QMessageBox::warning(this, "Login was successful", msg);
       }
       else {
           ui->lblResult->setText("[-] Wrong Username or Password");
       }
   }
   else {
       ui->lblResult->setText("[-] Wrong query");
   }
}
 

dialog.ui
Код
C++ (Qt)
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
 <property name="geometry">
  <rect>
   <x>0</x>
   <y>0</y>
   <width>306</width>
   <height>106</height>
  </rect>
 </property>
 <property name="windowTitle">
  <string>Dialog</string>
 </property>
 <layout class="QGridLayout" name="gridLayout">
  <item row="0" column="0">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <widget class="QLabel" name="label">
        <property name="text">
         <string>Username:</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLineEdit" name="txtUser"/>
      </item>
     </layout>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_2">
      <item>
       <widget class="QLabel" name="label_2">
        <property name="text">
         <string>Password:</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLineEdit" name="txtPass">
        <property name="echoMode">
         <enum>QLineEdit::Password</enum>
        </property>
       </widget>
      </item>
     </layout>
    </item>
   </layout>
  </item>
  <item row="0" column="1">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QPushButton" name="btnLogin">
      <property name="text">
       <string>Login</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="btnClear">
      <property name="text">
       <string>Crear</string>
      </property>
     </widget>
    </item>
   </layout>
  </item>
  <item row="1" column="0">
   <widget class="QLabel" name="lblResult">
    <property name="frameShape">
     <enum>QFrame::Box</enum>
    </property>
    <property name="frameShadow">
     <enum>QFrame::Raised</enum>
    </property>
    <property name="text">
     <string>[+] Status</string>
    </property>
   </widget>
  </item>
 </layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
 
« Последнее редактирование: Март 14, 2014, 13:37 от 8Observer8 » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1823



Просмотр профиля WWW
« Ответ #1 : Март 13, 2014, 16:15 »

В примерах видел гуи-клиент, который работает с базами данных, причем работает с любыми драйверами Улыбающийся

Нашел Улыбающийся Лежал в демо, называется SQL Browser
« Последнее редактирование: Март 13, 2014, 16:40 от gil9red » Записан

8Observer8
Гость
« Ответ #2 : Март 13, 2014, 16:20 »

В примерах видел гуи-клиент, который работает с базами данных, причем работает с любыми драйверами Улыбающийся

Отлично! Спасибо! Посмотрю в примерах Qt'а Улыбающийся
Записан
OKTA
Житель матрицы
******
Offline Offline

Сообщений: 1223



Просмотр профиля
« Ответ #3 : Март 13, 2014, 16:43 »

А вот еще удобная ссылочка для начинающих http://www.sqlite.org/lang.html
Записан

When in doubt, use brute force - Ken Thompson
8Observer8
Гость
« Ответ #4 : Март 13, 2014, 16:57 »

А вот еще удобная ссылочка для начинающих http://www.sqlite.org/lang.html

Я тоже это находил. Но мне кажется, что для начинающих это сложновато. Я только по простым примерам могу разбираться. Вот эта ссылка мне очень помогла: http://zetcode.com/db/sqlite/datamanipulation/

Я добавил в инструкцию вот такой текст:
Цитировать
Примечания
1) Инструкция составлена по видео: http://www.youtube.com/watch?v=cc06D3wuTn4
2) По следующей ссылке написано, как вставлять, редактировать и удалять ряды таблицы базы данных: http://zetcode.com/db/sqlite/datamanipulation/

Я ещё написал английский вариант этой инструкции. Я плохо знаю английский, поэтому если вы найдёте какие-то грубые ошибки, то, пожалуйста, напишите в этой теме. Ссылка на инструкцию: http://qtobserver.freeoda.com/qt_sqlite.php
« Последнее редактирование: Март 13, 2014, 17:29 от 8Observer8 » Записан
OKTA
Житель матрицы
******
Offline Offline

Сообщений: 1223



Просмотр профиля
« Ответ #5 : Март 13, 2014, 17:51 »

Для меня вот этот клиент удобнее - http://www.sqlabs.com/sqlitemanager.php

А в Мозилле у меня такого редактора кстати нет ))

А насчет инструкции - по мне так крайне не познавательная - лучше бы сделал простой консольный проект, в котором создается бд с одной таблицей, в нее вносятся значения, читаются и удаляются. - Все было бы удобно и понятно - без лишних всяких диалогов, внешних редакторов и лирических отступлений.
Ну это конечно мое мнение))
« Последнее редактирование: Март 14, 2014, 07:46 от OKTA » Записан

When in doubt, use brute force - Ken Thompson
xintrea
Moderator
Супер активный житель
*****
Offline Offline

Сообщений: 748



Просмотр профиля WWW
« Ответ #6 : Март 14, 2014, 07:42 »

Для меня вот этот клиент удобнее - http://rutracker.org/forum/viewtopic.php?t=2810147

SQLiteManager. Ты за него заплатил, или с торента скачал взломанный и другим советуешь?
Записан

Собираю информацию по крупицам
http://webhamster.ru
OKTA
Житель матрицы
******
Offline Offline

Сообщений: 1223



Просмотр профиля
« Ответ #7 : Март 14, 2014, 07:49 »

Поправил ссылку Крутой
Там не обязательно покупать - демо-версия ограничена количеством строк в запросах Крутой
Записан

When in doubt, use brute force - Ken Thompson
carrygun
Гость
« Ответ #8 : Март 14, 2014, 10:14 »

Есть фришный SQLite Database Browser, написан на Qt, всегда им пользовался и был доволен.
Записан
8Observer8
Гость
« Ответ #9 : Март 14, 2014, 11:19 »

Есть фришный SQLite Database Browser, написан на Qt, всегда им пользовался и был доволен.

Спасибо большое! Пока буду пользоваться SQLite Manager из FireFox'a. А если такой возможности не будет, то скачаю SQLite Database Browser Улыбающийся

Добавил в инструкцию внешний вид приложения и описание:

Внешний вид приложения и описание

Приложение подключается к базе данных, где хранятся имена и пароли пользователей. Если пользователь вводит правильный пароль, то выводится сообщение:

Записан
OKTA
Житель матрицы
******
Offline Offline

Сообщений: 1223



Просмотр профиля
« Ответ #10 : Март 14, 2014, 13:06 »

Добавь версию файерфокса. Говорю же - в моем нет мэнэджера. И всякий, кто откроет эту инструкцию, тут же ее закроет, не найдя этот мэнеджер в своей мозилле..
Записан

When in doubt, use brute force - Ken Thompson
8Observer8
Гость
« Ответ #11 : Март 14, 2014, 13:40 »

to OKTA

Добавил в инструкцию вот такой текст:

Примечание. Если Вы не нашли у себя "SQLite Manager", то установите: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/?src=
Записан
OKTA
Житель матрицы
******
Offline Offline

Сообщений: 1223



Просмотр профиля
« Ответ #12 : Март 14, 2014, 13:58 »

much more better)
Записан

When in doubt, use brute force - Ken Thompson
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 858

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #13 : Март 14, 2014, 16:09 »

Было бы неплохо такую же инструкцию по FireBird
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
8Observer8
Гость
« Ответ #14 : Март 15, 2014, 06:15 »

Было бы неплохо такую же инструкцию по FireBird

Я хочу с SQLite сначала освоиться. Мне пока этой базы данных будет достаточно. Потом MySQL. А дальше посмотрим Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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