• 8516阅读
  • 14回复

用代码往数据库添加图片 [复制链接]

上一主题 下一主题
离线pan356
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-09
怎么用QT代码实现往SQL Server添加上万张图片
离线XChinux

只看该作者 1楼 发表于: 2011-06-11
QSqlQuery类的addBindValue()的参数要求QVariant()类型的数据。
你将图片数据转化成QVaraint就OK了。

比如:
QPixmap px("/your/pixmap/file.png");


QSqlQuery;
q.prepare("insert into table1(field1) values(?)");
q.addBindValue(QVariant(px));
q.exec();

数据比较多,那就需要加事务处理,看QSqlDatabase里的transaction()、commit()等方法。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线pan356
只看该作者 2楼 发表于: 2011-06-11
版主果然很
离线alexltr

只看该作者 3楼 发表于: 2011-06-11
这个有用! mark and thanks.
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 4楼 发表于: 2011-06-11
回 1楼(XChinux) 的帖子
那读出来又怎么搞呢?thanks.
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线XChinux

只看该作者 5楼 发表于: 2011-06-12
汗一个,读出来的数据是QVariant()类型的,你将它转化成QByteArray类型的(toByteArray()),然后QPixmap的loadFromData()加载。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线alexltr

只看该作者 6楼 发表于: 2011-06-12
谢谢总版主,记下了。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线pan356
只看该作者 7楼 发表于: 2011-06-15
        QString str1 = QString("ImageID='3'");
        model->setFilter(str1);//设置查询约束条件
        model->select();
        QSqlRecord record=model->record(0);
        QByteArray bat=record.value("path").toByteArray ();
        QPixmap pix;
        pix.loadFromData(bat);
        label->setPixmap(pix);

      为什么读出的数据不显示??

离线wb19861202
只看该作者 8楼 发表于: 2011-06-16
请问你的数据库是怎么设计的,特别是存储图片的那个属性?谢谢
离线阿色
只看该作者 9楼 发表于: 2011-06-16
离线XChinux

只看该作者 10楼 发表于: 2011-06-16
blob类型字段。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线fingal
只看该作者 11楼 发表于: 2011-06-16
嗯,按版主的代码好像写入到数据库里的只是一个1。数据不全。当然就显示不出来了。
找到一个老外的demo.是可以用的。
    void Dialog::beforeInsertFoto(QSqlRecord &record)
    {
    //prepare data dor id - generated key
    record.setValue("id", generateId("foto"));
    
    //prepare data for name - get it form the label in the ui
    record.setValue("name", ui->fileNameLabel->text());
    
    //prepare data for image - get it from the label in the ui
    QImage currentImage = ui->foto->pixmap()->toImage();
    QByteArray bytes;
    QBuffer buffer(&bytes);
    buffer.open(QIODevice::WriteOnly);
    currentImage.save(&buffer, "PNG");
    record.setValue("image", bytes);
    }
    
    void Dialog::insertNewRecord()
    {
    int row = modeloFoto->rowCount();
    modeloFoto->insertRow(row);
    modeloFoto->submitAll();
    
    }
    
    void Dialog::getCurrentRecord()
    {
    //get image filename
    QModelIndex index = vistaFoto->currentIndex();
    ui->fileNameLabel->setText(modeloFoto->data(modeloFoto->index(index.row(), foto_name),0).toString());
    
    //get image
    QVariant currentImage = modeloFoto->data(modeloFoto->index(index.row(), foto_image),0);
    QByteArray bytes = currentImage.toByteArray();
    QImage image;
    image.loadFromData(bytes);
    ui->foto->setPixmap(QPixmap::fromImage(image));
    }
离线pan356
只看该作者 12楼 发表于: 2011-06-20
QString sqlString=QString("CREATE TABLE " ) +  
    patientnamelineEdit->text().trimmed() +
    QString( " (ImageID INT PRIMARY KEY , " )+
    QString( "ImageName VARCHAR(10) , ") +
    QString( "fromID INT NOT NULL, " )+
    QString( "path nvarchar(MAX) NOT NULL)");
在此选择存储的是图片的路径,而不是图片数据
存储图片数据时,将nvarchar(MAX)改为:varbinary

离线woshiisp
只看该作者 13楼 发表于: 2011-06-21
大量图片存数据库似乎很影响性能啊
QT~想要爱你不容易啊!不容易 也要 爱 哈哈哈
离线herony

只看该作者 14楼 发表于: 2011-07-15
回 10楼(XChinux) 的帖子
blob?mssql里面木有这个类型啊,varbinary?按照版主的方法试了下,还有image类型的都试了下,不行呢,都为0。
快速回复
限100 字节
 
上一个 下一个