5390|8

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

EVC怎么读取SQLCE数据库中Image字段的数据,并通过一系列处理在控件上画出图形。 [复制链接]

已经通过RDA将SQL SERVER2000 上的一个表数据下载到SQLCE 中,现在需要在应用程序中将表中的Image字段读出,并经过转化,转化为图像,显示出来。这个跟VC 中的好像不大一样,VC有getchunk等函数,EVC好像没有啊,还是我没找到?用EVC4.0开发,求助。

最新回复

用C#做好程序了。崩溃。  详情 回复 发表于 2007-12-3 16:53
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
再顶一下
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
终于找到_record 的Getchunk函数了。好像读出了数据,不知道怎没验证数据的正确性。VC中有CreateDIBitmap(),EVC里面好像不支持,用哪个函数代替,把那串数据转换为一个HBITMAP呢?
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
达人给看下下面代码的错误:
         HRESULT hr ;
        CString sql = L"select * from userphoto";
        long lFieldsCount=0;//字段个数
        long bmpSize;//图像数据长度
        VARIANT        varData,varFieldSelect;       
        VariantInit(&varData);
        VariantInit(&varFieldSelect);
        hr = db.m_pRecordSet->Open(sql);//db为一个数据库操作的类。m_pRecordSet为一个CVORecordSet对象
         //里面有_Recordset指针变量
        if(SUCCEEDED(hr))
                MessageBox(_T("获取数据成功"));
        if(FAILED(hr))
                MessageBox(_T("获取数据失败!"));
         hr=db.m_pRecordSet->m_rsRecordSet->get_Fields(&m_Fields);//m_Fields为Fields *对象
        hr=m_Fields->get_Count(&lFieldsCount);
        varFieldSelect.uiVal = 2;//字段2为image 类型的photo
        varFieldSelect.vt = VT_UI2;
        hr=m_Fields->get_Item(varFieldSelect,&m_Field);//m_Field为Field*对象
        m_Field->get_ActualSize(&bmpSize);//获取数据长度
        char *m_pBuffer;
        if(bmpSize>0)
        {
                VARIANT varBLOB;
                VariantInit(&varBLOB);
                hr=m_Field->GetChunk(bmpSize,&varBLOB);//获取数据
                if(varBLOB.vt==(VT_ARRAY | VT_UI1))
                {
                    if(m_pBuffer=new char[bmpSize+1])
                    {
                        MessageBox(_T("fen pei cheng gong "));
                        TCHAR*pBuf=NULL;
                        hr=SafeArrayAccessData(varBLOB.parray,(void  **)&pBuf);
                        MessageBox(pBuf);//输出的是串看不懂的乱码
                        memcpy(m_pBuffer,pBuf,bmpSize);
                        MessageBox((TCHAR*)m_pBuffer);
                        SafeArrayUnaccessData(varBLOB.parray);
                    }
                }
        }
        LPSTR hDIB;
        LPVOID lpDIBBits;
        //用于保存BMP头文件信息,包括类型大小位置
        BITMAPFILEHEADER bmpHeader;
        DWORD bmpHeaderLen;
        bmpHeaderLen=sizeof(bmpHeader);
        //将m_pBuffer文件头复制到bmpHeader中
        strncpy((LPSTR)&bmpHeader,(LPSTR)m_pBuffer,bmpHeaderLen);
        //MessageBox(_T("chenggong"));
        if(bmpHeader.bfType!=(*(WORD*)"BM"))
        {
                MessageBox(_T("bmp 格式不正确"));
                return;
        }
        else
                MessageBox(_T("BMP格式正确"));
        hDIB=m_pBuffer+bmpHeaderLen;//将指针移至头文件后面
        //读取BMP文件的图像数据
        //包括坐标及颜色格式等信息到BITMAPINFOHEADER对象
        BITMAPINFOHEADER &bmiHeader=*(LPBITMAPINFOHEADER)hDIB;
        //读取BMP文件的图像数据,包括颜色坐标及格式信息到BITMAPINFO对象
        BITMAPINFO &bmInfo=*(LPBITMAPINFO)hDIB;
        //根据bfOffBits属性将指针移至文件头后
        lpDIBBits=(m_pBuffer)+((BITMAPFILEHEADER*)m_pBuffer)->bfOffBits;
        CClientDC cdc(this);
        //m_hPhotoBitmap=CreateDIBitmap(cdc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,
         //                             &bmInfo,DIB_RGB_COLORS);     
           //VC中用的函数。EVC中没有。EVC只有下面的函数
        m_hPhotoBitmap=CreateDIBSection(cdc,&bmInfo,DIB_RGB_COLORS,(void**)lpDIBBits,NULL,0);
        if(m_hPhotoBitmap==NULL)
                MessageBox(_T("创建位图失败"));
        else
                MessageBox(_T("创建位图成功"));
     
        //绘制图形到客户区
         HBITMAP OldBitmap;
        CDC MemDC;
        MemDC.CreateCompatibleDC(pDC);
        OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBitmap);
        pDC->BitBlt(x,y,100,130,&MemDC,0,0,SRCCOPY);
        MemDC.SelectObject(OldBitmap);



        以上是自己写的获取SQLCE 数据库图像数据并显示的代码。m_hPhotoBitmap为HBITMAP对象。
         但绘制出来时一个黑框。把数据转化为图像的代码是参考VC6.0写的。VC中能正确显示。EVC不能。
          也读出了数 据,不知道读的是否正确。两天了,不知道哪个地方有错误。贴出来大家讨论下。
        先不说代码对错, 这种思路应该没什么问题吧?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
。。。排好版的。提交后怎么就成这样了。
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

7
 
只有自己顶了
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

8
 
..........
N 天了。
N 天了。
转C#。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

9
 
用C#做好程序了。崩溃。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表