2011-03-29 7 views
0

Je développe une application Qt où je veux interroger des données à partir de tables dans deux bases de données différentes à la fois. J'utilise Oracle comme base de données, mais mon employeur veut que j'y parvienne sans créer de lien de base de données entre les deux bases de données. J'ai donc pensé à développer un moteur de recherche cross base de données en utilisant les objets du module Qt sql. Mais il ne devrait pas être aussi complexe qu'un analyseur sql. Je veux juste des données de requête à partir de tables dans deux bases de données et les afficher dans une vue et faire ces requêtes en utilisant une interface commune. Mais selon ma connaissance Qt sql modules peuvent être utilisés pour interroger à partir de seulement 1 base de données. S'il y a quelqu'un qui a déjà fait ce genre de programmation ou quelqu'un qui a une idée à ce sujet, vos suggestions sont très appréciées. Merci beaucoup.Moteur de requête de base de données croisée pour base de données Oracle utilisant Qt

+0

différentes bases de données Oracle? Sur des hôtes physiques distincts ou des instances Oracle séparées? [La fonctionnalité de dblink d'Oracle] (http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_5005.htm) est une meilleure idée qu'une installation de roll-your-own. –

+0

Oui, les deux bases de données sont dans le même hôte physique, ce qui signifie que je parle de 2 instances. La raison pour laquelle mon employeur veut que je n'utilise pas dblink est que certains utilisateurs n'ont pas les privilèges pour voir toutes les tables dans ces instances, donc si j'utilise dblink pour interroger et un utilisateur avec moins de privilèges utiliser mon application, ils seront capable de faire des requêtes non désirées. – kasper360

+0

Les bases de données ne sont pas des instances: une instance peut contenir plusieurs bases de données. Pourrait être une question d'accorder l'accès (basé sur le rôle j'espère) à l'autre base de données, pas besoin de dblink mais le vrai problème semble être des subventions –

Répondre

0

J'ai fait quelque chose comme ça il y a quelque temps en ouvrant plusieurs connexions de base de données en utilisant QSqlDatabase.

Ainsi, inspiré de la documentation officielle, vous pouvez essayer quelque chose comme ceci:

//Open database 1: 
QSqlDatabase db1 = QSqlDatabase::addDatabase("QOCI","db1"); 
db.setHostName("acidalia"); 
db.setDatabaseName("tns1"); 
db.setUserName("mojito"); 
db.setPassword("J0a1m8"); 
bool ok = db.open(); 

.. 
//Open database 2: 
QSqlDatabase db2 = QSqlDatabase::addDatabase("QOCI","db1"); 
.. 
db.setDatabaseName("tns2"); 
.. 

Maintenant, les databasese sont ouverts et vous pouvez le les utiliser dans une requête. Prenez note de la portée des variables db selon la doc:

{ 
    QSqlDatabase db = QSqlDatabase::database("db1"); 
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); 
} 

{ 
    QSqlDatabase db = QSqlDatabase::database("db2"); 
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); 
} 

//Clean up 
QSqlDatabase::removeDatabase("db1"); 
QSqlDatabase::removeDatabase("db2"); 

Voir removeDatabase sur le nettoyage

Questions connexes