使用现有表的描述作为输入在数据库中创建新表

里科切

我编写了一个QT GUI应用程序,该应用程序连接到Oracle数据库并执行查询并在QTableView中显示输出。

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);
}

运行该程序后,我尝试使用它(代替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中使用此信息来创建另一个具有相同列名和数据类型的表吗?(基本上是创建我查询的表table的副本)。

编辑

提出建议后,我尝试用---

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();
}

现在它工作了两次,没有引发错误,并且在oracle数据库中创建了复制副本(在构建之前,我为复制表使用了不同的名称)。

但是在成功运行两次之后,它抓住了复制功能。情况完全毫无头绪。在构建/编译期间我没有收到任何错误。

k0l0b0k

您可以使用CREATE TABLE AS SELECT来做到这一点:

QString sql = "CREATE TABLE %1 AS %2"
    .arg(yourNewTableName)
    .arg(ui->lineQuery->text());
// and execute this sql code on your QSqlDatabase as you do it above

它将创建新表,其名称来自“ yourNewTableName”变量,并将数据从选择查询复制到新表。

代码更新:

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); // query will be executed there! weird, but...

if (query_second.lastError().isValid())
{
    qDebug() << query_second.lastError().text(); // error happens
}
else
{
    qDebug() << "Table created successfully";
}

另外,您必须#include <QSqlError>在文件顶部,才能使用QtSql错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数据库中创建表

来自分类Dev

如何使用jQuery在数据库中创建表

来自分类Dev

如何使用sapui5在数据库中创建一个新表?

来自分类Dev

如何使用c#中的现有数据库创建新数据库?

来自分类Dev

从另一个数据库导入表创建新表而不是将数据附加到现有表中

来自分类Dev

新的Grails域类未在数据库中创建表

来自分类Dev

Wordpress 插件开发 - 在数据库中创建新表

来自分类Dev

在现有数据库上创建表

来自分类Dev

使用JPA在数据库中创建唯一的并合并现有行

来自分类Dev

@JoinTable是否在数据库中创建持久表?

来自分类Dev

无法在数据库中创建表

来自分类Dev

工匠,在数据库中创建表

来自分类Dev

Scala Slick在数据库中创建表

来自分类Dev

无法在数据库中创建多个表

来自分类Dev

允许用户在数据库中创建表

来自分类Dev

无法在数据库中创建表

来自分类Dev

Scala Slick在数据库中创建表

来自分类Dev

无法在数据库中创建表

来自分类Dev

无法在数据库中创建表

来自分类Dev

使用数据库优先方法EF将新表添加到现有数据库

来自分类Dev

如何在现有数据库中创建ASP.Net Identity表?

来自分类Dev

如何检查数据库表中的现有行

来自分类Dev

使用实体框架在数据库中创建表

来自分类Dev

与JPA一起使用时,如何让Hibernate在数据库中自动创建表?

来自分类Dev

无法在C中使用libpq在数据库中创建表

来自分类Dev

如何使用wordpress插件在数据库中创建表

来自分类Dev

无法使用 Django oracle12c 在数据库中创建表

来自分类Dev

在数据库中查找表

来自分类Dev

我该怎么做将新表添加到现有数据库或创建新数据库?

Related 相关文章

热门标签

归档