【发布时间】:2021-09-27 13:29:21
【问题描述】:
这是我的代码:
QSqlRelationalTableModel *model = new QSqlRelationalTableModel(this, db1);
model->setTable("syllabi");
model->setRelation(3, QSqlRelation("activity_types", "activity_type_id", "activity_type_name"));
model->select();
ui->tableView->setModel(model);
ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));
组合框中的值显示正确,但是当我更改值并选择表格的另一个单元格时,该单元格显示的是 ID(外键)而不是其值。 另外,当我使用此代码插入另一个值时
model->insertRow(model->rowCount());
model->setData(model->index(model->rowCount()-1, 0), teacherName);
有一个错误:
QODBCResult::exec: 无法执行语句:“[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'default' 转换为数据类型 int 时转换失败。”
表格没有正确连接?
编辑:
好的,现在当我更改组合框中的值时,它会删除整行。可能是什么原因?
【问题讨论】:
-
底层组合框的源字段和源表是什么?如果该值正在消失,则表示组合框中没有与更改的值匹配的键。 ODBC 错误还告诉您将teacherName 作为nvarchar 而不是ID 字段插入。显示所有字段及其类型,以便我们准确调试。
-
@EmacsUser 对于我尝试连接的每个表都是一样的。现在是 activity_type 表。外键是activity_type_id,它被替换为带有activity_name 的组合框。必须有一个键,因为我从组合框中选择它,它就在那里!我尝试插入teacher_id 而不是teacher_name,它有效,谢谢!但是第一个问题仍然存在:我在一个单元格中看到activity_type_name,单击它,它显示一个组合框,我选择任何值,整行都消失了(它仍然存在但单元格是空的)
-
我注意到,当我添加一个新行并更改其中的某些内容时,它不会立即被删除,只有当我填充所有单元格并将其发送到 db 时(不能在有空字段时发送到数据库),在此之前我无法访问表中的任何字段,只能访问最后一行。当我在组合框中选择值时,它们成为整数索引。在我填写所有字段后,所有行都被删除(尽管它已插入数据库)。好像我错过了一些非常明显的东西。
标签: c++ sql sql-server qt