Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQLITE+QSqlTableModel+QTableView как шифровать БД 
V
    Опции темы
Alca
Дата 31.10.2011, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Qt 4.7.3

Использую SQLITE + QSqlTableModel + QTableView. 
Как осуществить шифрование БД? 
Т.е. чтоб при вставке данные шифровались, а при выборке расшифровывались?



--------------------
PM WWW ICQ Skype Jabber   Вверх
borisbn
Дата 31.10.2011, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Если с чтением более или менее понятно - наследоваться от QSqlTableModel, переписать ф-цию data, вызвать в ней QSqlTableModel::data, полученные данные расшифровать и вернуть - то с записью - не очень. Как у тебя производится запись в БД ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Alca
Дата 31.10.2011, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Цитата

Как у тебя производится запись в БД ?

Код

model->setEditStrategy(QSqlTableModel::OnFieldChange);



Вот весь код:
Код

#ifndef CMAIN_H
#define CMAIN_H
//---------------------------------------------------------------------------
#include <QtGui/QWidget>
#include <QtGui/QMessageBox>
#include <QtSql>
#include <QImage>

#include "ui_CMain.h"
//---------------------------------------------------------------------------
class CMain :
    public QWidget
{
        Q_OBJECT

    public:
        CMain(QWidget *parent = 0);
        ~CMain();

    private:
        Ui::CMainClass  ui;

        QSqlTableModel *model;

        QSqlDatabase    _m_dbDatabse;

        void            setupModel();
};
//---------------------------------------------------------------------------
#endif // CMAIN_H


Код

#include "CMain.h"
//---------------------------------------------------------------------------
CMain::CMain(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

    setupModel();

    QImage imgPhoto;
    imgPhoto.load("./image.png");

    QImage img1 = imgPhoto.scaled(QSize(120 * 2, 90 * 2), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

    ui.lblPhoto->setPixmap(QPixmap::fromImage(img1));
    //ui.lblPhoto->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
//---------------------------------------------------------------------------
CMain::~CMain()
{
    _m_dbDatabse.close();
}
//---------------------------------------------------------------------------
void
CMain::setupModel() {
    bool bRes = false;

    _m_dbDatabse = QSqlDatabase::addDatabase("QSQLITE");

    _m_dbDatabse.setDatabaseName("./base.db");
    if (!_m_dbDatabse.open()) {
        QMessageBox::critical(0, tr(""), tr("Unable to establish a database connection."), QMessageBox::Cancel);
        return;
    }

    //Set up the main table
    QSqlQuery query;

    bRes = query.exec("CREATE TABLE T_PERSON (F_ID INT PRIMARY KEY, F_NAME VARCHAR(20), F_ADGE INT)");
    if (false == bRes) {
        //QMessageBox::critical(0, tr(""), tr("Can't create table."), QMessageBox::Cancel);
    }

    bRes = query.exec("INSERT INTO T_PERSON VALUES(1, 'Alice',  20)");
    if (false == bRes) {
        //QMessageBox::critical(0, tr(""), tr("Can't insert record."), QMessageBox::Cancel);
    }

    bRes = query.exec("INSERT INTO T_PERSON VALUES(2, 'Bob',    30)");
    bRes = query.exec("INSERT INTO T_PERSON VALUES(3, 'Carol',  19)");
    bRes = query.exec("INSERT INTO T_PERSON VALUES(4, 'Donald', 40)");
    bRes = query.exec("INSERT INTO T_PERSON VALUES(5, 'Emma',   25)");

    //QSqlTableModel
    model = new QSqlTableModel(this, _m_dbDatabse);
    model->setTable("T_PERSON");
    model->setEditStrategy(QSqlTableModel::OnFieldChange);
    model->select();
    //model->removeColumn(0); // don't show the ID

    model->setHeaderData(0, Qt::Horizontal, tr("Id"));
    model->setHeaderData(1, Qt::Horizontal, tr("Name"));
    model->setHeaderData(2, Qt::Horizontal, tr("Address"));

    ui.tabvInfo->setModel(model);
    ui.tabvInfo->show();

    model->select();
}
//---------------------------------------------------------------------------



Это сообщение отредактировал(а) Alca - 31.10.2011, 18:06


--------------------
PM WWW ICQ Skype Jabber   Вверх
borisbn
Дата 31.10.2011, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



С записью может помочь сигнал beforeUpdate
как видишь ссылка там не константная


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Alca
Дата 1.11.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Сделал через  QSqlTableModel::data + QSqlTableModel::setData.


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0967 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.