• 6233阅读
  • 2回复

QSqlTableModel保存BLOB [复制链接]

上一主题 下一主题
离线ychwn
 

只看楼主 倒序阅读 楼主  发表于: 2010-07-27
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我用Qt 4.4.3连接Oracle数据库,使用QTableView显示QSqlTableModel中的内容。

但是当我修改了BLOB字段的值,然后保存时失败,报上述错误,请问该怎么解决啊?

谢谢!

/* BlobItemDelegate从QItemDelegate继承
* 当QSqlTableModel的字段为BLOB是调用setItemDelegateForColumn(column, new BlobItemDelegate(this)); */
void BlobItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    if(_read_only)
        return;

    /* BlobEditer是自定义的一个控件,用来显示修改特定的二进制数据 */
    BlobEditer * edit = qobject_cast<BlobEditer*>(editor);
    /* edit->getData()返回修改后的数据,是QByteArray对象 */
    model->setData(index, edit->getData(), Qt::EditRole);
}

报错:
QOCIResult::exec: unable to execute statement: ORA-00932: inconsistent datatypes : expected - got BLOB
离线ychwn

只看该作者 1楼 发表于: 2010-07-27
刚试了下,即使不设置QItemDelegate,在QTableView中修改数据后保存,只要当前表有BLOB字段,就无法保存成功
离线ychwn

只看该作者 2楼 发表于: 2010-07-29
已经找到原因:Oracle的SQL语句查询条件(where)部分不能有BLOB。

重写QSqlTableModel的updateRowInTable(int row, const QSqlRecord & values)就可以了

谢谢了~
快速回复
限100 字节
 
上一个 下一个