Połączenie z dwoma bazami

0

Hej,

na potrzeby swojego projektu, w którym będzie potrzeba połączenia się z dwoma bazami danych jednocześnie, stworzyłem swoją klasę do łączenia się z bazami:

 #ifndef SQL_FUNKCJE_H
#define SQL_FUNKCJE_H

#include <QSqlQuery>
#include <QSqlDatabase>
#include <QString>
#include <QMessageBox>
#include <QCoreApplication>
#include <QSqlQueryModel>

class Sql_funkcje
{
public:
    Sql_funkcje();

    Sql_funkcje(int x);

    QSqlDatabase db;
    QSqlQueryModel *model;

    void connect(QString nazwa_bazy);
    QString select(QString tabela, QString wartosci, QString warunek = "1=1");
    void insert(QString tabela, QString values, QString zmienne);
    void update(QString tabela, QString set, QString warunek);
    void delet(QString tabela, QString warunek);
    void close();
    int isOpen();

    int poziom_uprawnien;


};


#endif // SQL_FUNKCJE_H

Klasa nie jest statyczna, więc każda inicjalizacja nowego obiektu o nazwie Sql_funkcje w której uruchomiona została metoda connect, powinna przetrzymywać tylko wybrane dla siebie połączenie z bazą. Ale tak nie jest.

Przykładowo mam dwa pliki w programie o nazwach:
pierwszy.cpp
pierwszy.h
drugi.cpp
drugi.h

Jeśli w pierwszym pliku stworzę sobie obiekt Sql_funkcje baza i połączę się w niej z jakąś bazą, to inicjując nowy obiekt w pliku drugi.cpp o nazwie Sql_funkcje baza2, ma ona juz na samym początku zainicjowane połączenie do bazy takiej, jak w pliku pierwszy.cpp. Co więcej, kiedy w drugi.cpp wykonam connecta dla zmiennej baza2, to automatycznie połączenie ze zmiennej baza zostanie nadpisane.
Niestety w moim programie wymagane jest, aby móc się połączyć z dwoma bazami jednocześnie. Moje pytanie, czy jestem w stanie to jakoś obejść? Czy da się łączyć jednocześnie z dwoma bazami w programie?

0

Spróbuję odnowić wątek.

Zrobiłem sobie nowy program, w którym próbuję wykonać to, co zamierzałem. Czyli połączyć program z dwoma bazami jednocześnie:

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    Sqle db1;
    db1.connect_db2("baza_wiedzy.db3");
    Sqle db2;
    db2.connect_db2("baza_inz");




}

MainWindow::~MainWindow()
{
    delete ui;
}
 

Sqle.h

 
#ifndef SQLE_H
#define SQLE_H

#include <QSqlQuery>
#include <QDebug>
#include <QSqlDatabase>
#include <QString>
#include <QCoreApplication>

class Sqle :public QSqlDatabase
{
public:
    Sqle();

    void connect_db2(QString nazwa_bazy);

    void select();

};

#endif // SQLE_H

Sqle.cpp

#include "sqle.h"

Sqle::Sqle()
{
}

void Sqle::connect_db2(QString nazwa_bazy)
{
    this->addDatabase("QSQLITE");
    this->setDatabaseName(QCoreApplication::applicationDirPath()+"/db/"+nazwa_bazy);
    qDebug() << QCoreApplication::applicationDirPath()+"/db/"+nazwa_bazy;

    if(!this->open()) {
        qDebug() << "Err 01: Brak podłączenia do bazy danych";
    }
    else
    {
        qDebug() << "Nawiązano połączenie z bazą danych";
    }
}


 

Niestety przy uruchomieniu programu otrzymuję takie komunikaty:

ruchamianie C:\Qt\Qt5.1.1\Tools\QtCreator\bin\build-nienazwany2-Desktop_Qt_5_1_1_MinGW_32bit-Debug\debug\nienazwany2.exe...
"C:/Qt/Qt5.1.1/Tools/QtCreator/bin/build-nienazwany2-Desktop_Qt_5_1_1_MinGW_32bit-Debug/debug/db/baza_wiedzy.db3"
QSqlDatabasePrivate: duplicate connection name 'qt_sql_default_connection', old connection removed.
"C:/Qt/Qt5.1.1/Tools/QtCreator/bin/build-nienazwany2-Desktop_Qt_5_1_1_MinGW_32bit-Debug/debug/db/baza_inz"

Czy jest w ogóle możliwość podłączenia dwóch baz do jednego programu nie wymieniając naprzemiennie połączeń między nimi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1