Russian Qt Forum
Ноябрь 24, 2024, 11:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание базы данных  (Прочитано 7240 раз)
vallic
Гость
« : Апрель 25, 2010, 22:43 »

Привет всем,я новичек в программировании...
задача следующая создать sqlite базу со связанными таблицами.
проблема следующая создается текстовый файл вместо базы и файлик пустой...я строил проект основываясь на примерах qt.Прошу указать мои ошибки.Заранее благодарю.
sqlitebase.pro
Код:
HEADERS += connect.h
QT += sql
SOURCES += main.cpp
connect.h
Код:
#ifndef CONNECT_H
#define CONNECT_H

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("sqlitebook");

    if (!db.open())  {
        qDebug() << "Cannot open database:" << db.lastError();
        return false;
    }
    QSqlQuery query;
    query.exec(
    "create table DirInfo (id int primary key,"
                                             "idDir int,"
                                             "tag text(30),"
                                             "Value text(20),"
                                             "constraint fk_DirInfo_BookDir"
                                             "foreign key (idDir) references BookDir (idDir) on update cascade on delete cascade)"
    "create table BookDir (idDir int primary key,"
                                              "name text(20))"
    "create table FileDir (name text,"
                                             "idDir int,"
                                             "idFile int,"
                                             "constraint pkFileDir"
                                             "primary key (idDir, name),"
                                             "constraint fk_FileDir_BookDir"
                                             "foreign key (idDir) references BookDir (idDir) on update cascade on delete cascade,"
                                             "constraint fk_FileDir_BookFile"
                                             "foreign key (idFile) references BookFile (idFile) on update cascade on delete cascade)"
    "create table Bookfile (idFile int primary key, "
                                              "format text(20),"
                                              "md5 text(100), "
                                              "mainname text(20))"
    "create table BookAnnot (idAnnot int primary key,"
                                             "idBook int,"
                                             "annotType varchar(1),"
                                             "txt text(20),"
                                             "constraint fk_BookAnnot_Book_ins"
                                             "foreign key (idBook) references Bookinsr (idBook) on update cascade on delete cascade)"
    "create table Bookinsr (idBook int primary key,"
                                             "format text(20),"
                                             "md5 text(100),"
                                             "idFile int,"
                                             "origId int,"
                                             "constraint fk_Bookinsr_BookFile"
                                             "foreign key (idFile) references BookFile (idFile) on update cascade on delete cascade,"
                                             "constraint fk_Bookinsr_Book"
                                             "foreign key (origId) references Book (origId) on update cascade on delete cascade)");
return true;
}

#endif
main.cpp
Код:
#include <QtGui>
#include <QtSql>

#include "connect.h"

void initializeModel(QSqlTableModel *model)
{
    model->setTable("Book");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel lbl("Database create");
    lbl.show();
    if (!createConnection())
        return 1;

    QSqlTableModel model;

    initializeModel(&model);

    return app.exec();
}
Записан
jack_r
Гость
« Ответ #1 : Апрель 25, 2010, 23:38 »

Лучше разделите запрос создание таблиц на несколько. Так будет проще искать ошибки в запросах. Затем проверяйте результат выполнения запроса и выводите сообщения о возможные ошибках выполнения запроса.
Код:
QSqlQuery query;
if (!query.exec("create table DirInfo (id int primary key,"
                                             "idDir int,"
                                             "tag text(30),"
                                             "Value text(20),"
                                             "constraint fk_DirInfo_BookDir " // здесь пропущен пробел
                                             "foreign key (idDir) references BookDir (idDir) on update cascade on delete cascade)")
  qWarning() << query.lastError();
Записан
vallic
Гость
« Ответ #2 : Апрель 25, 2010, 23:48 »

Лучше разделите запрос создание таблиц на несколько. Так будет проще искать ошибки в запросах. Затем проверяйте результат выполнения запроса и выводите сообщения о возможные ошибках выполнения запроса.
Код:
QSqlQuery query;
if (!query.exec("create table DirInfo (id int primary key,"
                                             "idDir int,"
                                             "tag text(30),"
                                             "Value text(20),"
                                             "constraint fk_DirInfo_BookDir " // здесь пропущен пробел
                                             "foreign key (idDir) references BookDir (idDir) on update cascade on delete cascade)")
  qWarning() << query.lastError();

спасибо,кстати пробела в синтаксисе не нашел!
на одном из форумов мне было сделано замечание:
Код:
в файлах с расширением .h (headers) пишутся заголовки (объявления) функций и классов. Определения (тела) функций и классов пишутся в файлах с расширением cpp.
вроде бы у меня описано правильно или нет?
Записан
Marat(Qt)
Гость
« Ответ #3 : Апрель 26, 2010, 00:30 »

То что вы выложили - баловство, а не программа. Если будете писать программу - пишите ее иначе. А именно - создавайте классы, их заголовки храните в .h файлах, а описания методов в .cpp
Записан
vallic
Гость
« Ответ #4 : Апрель 26, 2010, 00:43 »

То что вы выложили - баловство, а не программа. Если будете писать программу - пишите ее иначе. А именно - создавайте классы, их заголовки храните в .h файлах, а описания методов в .cpp
уже яснее, но для начала подчеркиваю я новичек...и я основывался на примерах qt!
можете привести пример описания?
Записан
crossly
Гость
« Ответ #5 : Апрель 26, 2010, 12:40 »

епть.... нельзя начинать учить язык с QT.... познакомьтесь для начала с с++ ....
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Апрель 26, 2010, 16:09 »

>>можете привести пример описания?
открой пример examples\sql\cachedtable\
там два файла:
tableeditor.cpp
tableeditor.h
В h-файле (заголовочнике) находится объявление класса TableEditor
А в cpp-файле - реализация (описание) класса TableEditor
Записан

Юра.
vallic
Гость
« Ответ #7 : Апрель 26, 2010, 19:24 »

епть.... нельзя начинать учить язык с QT.... познакомьтесь для начала с с++ ....
С++ я учил, основная работа моя была администрирование. Я забыл C++, пытаюсь вспомнить!
>>можете привести пример описания?
открой пример examples\sql\cachedtable\
там два файла:
tableeditor.cpp
tableeditor.h
В h-файле (заголовочнике) находится объявление класса TableEditor
А в cpp-файле - реализация (описание) класса TableEditor
ещё яснее стало,спасибо!
Записан
vallic
Гость
« Ответ #8 : Апрель 26, 2010, 21:38 »

получается сделать надо не много наоборот!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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