2011-03-29 2 views
0

두 개의 다른 데이터베이스에있는 테이블의 데이터를 한 번에 쿼리 할 Qt 응용 프로그램을 개발 중입니다. 저는 Oracle을 데이터베이스로 사용하고 있지만 고용주는 2 개의 데이터베이스 사이에 데이터베이스 링크를 만들지 않고이 작업을 수행하기를 원합니다. 그래서 Qt SQL 모듈 객체를 사용하여 교차 데이터베이스 쿼리 엔진을 개발할 생각이었습니다. 그러나 그것은 SQL 파서만큼 복잡하지 않아야합니다. 두 개의 데이터베이스에있는 테이블의 쿼리 데이터를 하나의 뷰에 표시하고 공통 인터페이스를 사용하여 이러한 쿼리를 수행하면됩니다. 하지만 내 지식에 따르면 Qt SQL 모듈은 단 하나의 데이터베이스에서 쿼리하는 데 사용할 수 있습니다. 전에 이런 종류의 프로그래밍을 해 본 사람이나 이것에 대한 아이디어를 가진 사람이 있다면, 당신의 제안은 많은 것을 인정합니다. 고맙습니다.Qt를 사용하는 Oracle 데이터베이스 용 교차 데이터베이스 쿼리 엔진

+0

다른 Oracle 데이터베이스를 정리에 removeDatabase를 참조하십시오? 별도의 물리적 호스트 또는 별도의 Oracle 인스턴스에 있습니까? [오라클의 dblink 기능] (http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_5005.htm)은 자신 만의 롤업보다 더 좋은 아이디어입니다. –

+0

예, 두 데이터베이스가 동일한 물리적 호스트에 있습니다. 즉, 약 2 개의 인스턴스를 말하는 것입니다. 고용주가 dblink를 사용하지 않기를 원하는 이유는 일부 사용자가 해당 인스턴스의 모든 테이블을 볼 수있는 권한이 없기 때문에 dblink를 쿼리에 사용하고 권한이 적은 사용자가 내 애플리케이션을 사용하면 원하지 않는 쿼리를 만들 수 있습니다. – kasper360

+0

데이터베이스는 인스턴스가 아닙니다. 인스턴스는 여러 데이터베이스를 보유 할 수 있습니다. 다른 데이터베이스에 액세스 권한을 부여하는 문제 일 수 있습니다. dblink가 필요하지 않지만 실제 문제는 보조자로 표시됩니다. –

답변

0

이전에 QSqlDatabase을 사용하여 여러 데이터베이스 연결을 열어서 그런 작업을했습니다.

따라서, 공식 문서에 의해 영감을이 같은 시도 할 수 있습니다 :

//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"); 
.. 

는 이제 databasese가 열려을 당신은 쿼리에서 사용할 수 있습니다. 같은 문서 당 DB 변수의 범위에주의하십시오 :

{ 
    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"); 

관련 문제