[수미수의 개발 브로구]

[QT] QT 데이터 베이스 접속하기 본문

Language & Framework/Qt

[QT] QT 데이터 베이스 접속하기

수미수 2023. 9. 25. 15:42
반응형

오라클 접속 하기 샘플 코드

QSqlDatabase::removeDatabase("test");
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI", "test");
    db.setHostName("localhost");
    db.setDatabaseName("test");
    db.setUserName("test");
    db.setPassword("test");
    // 알림 창 띄우기
    QMessageBox::warning(this, tr("DataBase Open Error"), tr("%1  %2  %3  %4 Driver %5").arg(parser->getDatabase()).arg(parser->getDbUser()).arg(parser->getDbPass()).arg(parser->getHost()).arg(parser->getDriver()));
    
    if (!db.open()) {
        //QMessageBox::critical(this, QObject::tr("DataBase Open Error"), QObject::tr("DataBase Open Error!"));
        //QDialog::reject();
        qDebug()<<"Database Open Error!";
    }
}

Select 샘플 코드

...................
QString sql;

sql  = " SELECT                                             ";
sql += "        ID, NM                            ";
sql += "   FROM TB_TABLE                                 ";
if (searchField->count() >  0) {
	sql += " WHERE ID = '"+searchField->at(0).toUpper()+"' ";
}
sql += " ORDER BY ID ASC, NM ";

model->setQuery(sql, QSqlDatabase::database(UserInfo::getInstance().getDbname()));
if (model->lastError().type() != QSqlError::NoError) {
	QMessageBox::critical(this, tr("SQL Error"), model->lastError().text());
}

model->setHeaderData(0,  Qt::Horizontal, tr("ID"));
model->setHeaderData(1,  Qt::Horizontal, tr("Name"));
proxyModel->setSourceModel(model);
tableWidget->setModel(proxyModel);

while(model->canFetchMore()) {
	model->fetchMore();
}

QString sql;
QSqlQuery *query = new QSqlQuery(QSqlDatabase::database(UserInfo::getInstance().getDbname()));
QString tmpNodeName = "";
if(chkNodes->isChecked() == true)	tmpNodeName = "allnode";
else tmpNodeName = cboName->currentText();

sql = "SELECT COUNT(*) FROM TB_MON WHERE NODE_NM = '" + tmpNodeName +"'" +" AND MON_NM = '" + txtPTUName->text() +"'";

query->prepare(sql);
query->exec();
if (query->next()) {
	int cnt = query->value(0).toInt();
	if (cnt > 0) {
		QMessageBox::warning(this, tr("Input the data error"), tr("Monitoring data already exists."));
		cboName->setFocus();
		return;
	}
}

...................

 

Insert 샘플 코드

.....................

QSqlQuery * query = new QSqlQuery(QSqlDatabase::databse(UserInfo::getInstance().getDb());
sql = "INSERT INTO TB_MON VALUES(?,?,?,?,?)";
	query->prepare(sql);
	query->addBindValue(tmpNodeName);
	if(rdoProcess->isChecked() == true){
		query->addBindValue("1");
	}
	if(rdoTcp->isChecked() == true){
		query->addBindValue("2");
	}
	if(rdoUdp->isChecked() == true){
		query->addBindValue("3");
	}
	query->addBindValue(txtPTUName->text());
	query->addBindValue(txtPath->text());
	query->addBindValue(txtPort->text());
	query->exec();
	if (query->lastError().type() != QSqlError::NoError) {
		QMessageBox::critical(this, "SQL Error", query->lastError().text());
	}else {
		QMessageBox::information(this, tr("Success message"), MSG0002);
		emit changedTable(tr("success"));
	}
	delete query;
    
.....................

Update 샘플 코드

.....................

QSqlQuery * query = new QSqlQuery(QSqlDatabase::databse(UserInfo::getInstance().getDb());

sql = "UPDATE TB_MON SET 1 = ?, 2 = ?, 3 = ? WHERE 1 = ? AND 1 = ?";
query->prepare(sql);
if(rdoProcess->isChecked() == true){
	query->addBindValue("1");
}
if(rdoTcp->isChecked() == true){
	query->addBindValue("2");
}
if(rdoUdp->isChecked() == true){
	query->addBindValue("3");
}
query->addBindValue(txtPath->text());
query->addBindValue(txtPort->text());
query->addBindValue(tmpNodeName);
query->addBindValue(txtPTUName->text());
query->exec();
if (query->lastError().type() != QSqlError::NoError) {
	QMessageBox::critical(this, "SQL Error", query->lastError().text());
}else {
	QMessageBox::information(this, tr("Success message"), MSG0003);
	emit changedTable(tr("success"));
}
delete query;

.....................
반응형

'Language & Framework > Qt' 카테고리의 다른 글

[QT] QT F/W 기록 하기  (0) 2023.09.25