Oracle 데이터베이스에 연결하여 쿼리를 수행하고 출력을 QTableView에 표시하는 QT GUI 응용 프로그램을 작성했습니다.기존 테이블의 설명을 입력으로 데이터베이스에 새 테이블 만들기
QString host_name=ui->lineHostName->text();
QString db_name=ui->lineDatabaseName->text();
QString user_name=ui->lineUserName->text();
QString pass_word=ui->linePassword->text();
QString port_no=ui->linePortNumber->text();
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setHostName(host_name);
db.setDatabaseName(db_name);
db.setUserName(user_name);
db.setPassword(pass_word);
db.setPort(port_no.toInt());
QString MyQuery = ui->lineQuery->text();
db.open();
QSqlQuery query(MyQuery,db);
if(query.exec())
{
this->model=new QSqlQueryModel();
model->setQuery(MyQuery);
ui->tableViewOra->setModel(model);
}
프로그램을 실행 한 후, I는 ---합니다 (DESC의 대체)
SELECT
column_name "Name",
nullable "Null?",
concat(concat(concat(data_type,'('),data_length),')') "Type"
FROM user_tab_columns
WHERE table_name='my_table_number_one';
및 열 이름이 사용하려고 널 파라미터 및 데이터 유형 QTableView에 도시 된
이제 내 질문은 QTableView에서이 정보를 사용하여 동일한 열 이름과 데이터 형식으로 다른 테이블을 만들 수 있습니까 ??? (기본적으로 쿼리 된 테이블 테이블의 복사본 만들기).
복제에 대한 EDIT 내가 함께 ---
지금QString query_to_replicate;
query_to_replicate=QString("CREATE OR REPLACE TABLE %1 AS %2").arg("AJ_REPLACEMENT_TESTING").arg(ui->lineEdit->text());
QSqlQuery query_second(query_to_replicate,db);
if(query_second.exec())
{
ui->r_pop_Button->setStyleSheet("QPushButton {background-color: rgb(0, 255, 0);}");
this->model_relocate=new QSqlQueryModel();
model_relocate->setQuery(query_second);
ui->tableView2->setModel(model_relocate);
while (model_relocate->canFetchMore())
model_relocate->fetchMore();
qDebug()<<QDateTime::currentDateTime()<<"Query SUCCESS ";
db.close();
}
이 오류를 던지고없이, 두 번 근무하고 오라클 데이터베이스의 복제 된 복사본을 만들어 수정 시도 제안 후
는 (나는 다른 이름을 사용 테이블).
하지만 두 번 성공적으로 실행 한 후 복제를 포착했습니다. 상황은 완전히 우둔합니다. 빌드/컴파일하는 동안 오류가 발생하지 않습니다.
여기에 필요한 인수는 무엇입니까 ??? QString sql = ...... 선언의 마지막 구문입니까? – RicoRicochet
QString query_to_replicate; query_to_replicate = QString ("CREATE TABLE % 1 AS % 2"). arg (AJ_REPLICATED) .arg (ui-> lineEdit-> text()); QSqlQuery query2 (query_to_replicate, db); 이 /home/aj/MY_QT_WORK/replicate_populate/mainwindow.cpp:95에 오류가 표시되고 : 오류 : 'AJ_REPLICATED'는 문자열이어야합니다이 범위 – RicoRicochet
AJ_REPLICATED에 선언되지 않았다가, 새 테이블 이름을 포함, 즉 QString AJ_REPLICATED = "myNewTable"; – k0l0b0k