开始一个项目并添加代码演示了添加图片或删除图像BLOB字段的数据库文件:
首先创建一个数据库文件(DB1.MDB)与下面列出的字段,在运行本教程之前。
| 字段名 | 类型 |
|---|---|
| 图像 | OleObject |
| 大小 | 数量 |
开始一个新项目如下:运行Microsoft Visual Studio,选择新项目文件,并执行以下操作:
在overview窗口点击Next。
在应用程序类型步对话框中,执行以下操作:
4步骤2的对话框中,执行以下操作:
4步骤3的对话框中,单击Finish:
# include语句添加到您的程序可以访问的c++类库常量和类:
将下面几行添加到文件的末尾(记住,你可能不得不改变头文件所在的路径):
# include“. . \ \ . \ \ . . \ \ . \ \ . . \ \ \ \ ClassLib \ \ ltWrappr.h包括“
静态文本控件添加到主窗口如下:
# import语句添加到您的程序可以访问Microsoft ActiveX数据对象2.6库:
将下面几行添加到文件的末尾(记住,你可能需要改变文件名为. tlb所在的路径):
#进口< C: \ \ \ \ Windows \ \ \ \ system32系统\ \ \ \ msado26。tlb >重命名(“EOF”,“ADOEOF”)使用名称空间ADODB;
单击资源视图选项卡。在视图菜单中,选择工具箱,然后添加六个命令按钮的表单和名称如下:
| ID | 标题 |
|---|---|
| IDC_CONNECT | 相距到数据库 |
| IDC_DISCONNECT | 从数据库断开连接 |
| IDC_ADDRECORD | 添加记录 |
| IDC_DELETERECORD | D&elete记录 |
| IDC_MOVENEXT | 移动下一个 |
| IDC_MOVEPREVIOUS | 移动之前 |
保存的资源文件。
执行以下步骤添加m_btnAddRecord CImageBlobDlg类变量和链接到CButton控制使用动态数据交换:
重复步骤11其他按钮,使用下面的变量名:
| ID | 成员变量名 |
|---|---|
| IDC_MOVEPREVIOUS | m_btnMovePrevious |
| IDC_MOVENEXT | m_btnMoveNext |
| IDC_DISCONNECT | m_btnDisconnect |
| IDC_DELETERECORD | m_btnDeleteRecord |
| IDC_CONNECT | m_btnConnect |
添加以下CImageBlobDlg类的成员变量:
_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;LBitmapWindow m_LBitmapWnd;
去OnInitDialog()函数如下:
编辑OnInitDialog()函数来添加以下代码行后说/ / TODO:添加额外的初始化:
LBase: LoadLibraries (LT_KRN);LBase: LoadLibraries (LT_DIS);LBase: LoadLibraries (LT_FIL);矩形钢筋混凝土;GetDlgItem (IDC_STATIC) - > GetWindowRect (rc);ScreenToClient (rc);HWND HWND = m_LBitmapWnd.CreateWnd (这- > GetSafeHwnd () 0 WS_VISIBLE | L_BS_CENTER | L_BS_PROCESSKEYBOARD, rc。离开了,rc。rc。对,rc.bottom);m_LBitmapWnd.EnableAutoScroll(真正的);m_LBitmapWnd。SetFileName (MAKE_IMAGE_PATH(文本(“image1.cmp”)));intnRet = m_LBitmapWnd。负载(0 ORDER_BGR 1);HRESULT人力资源;CoInitialize(空);hr = m_pConnection。调用CreateInstance (__uuidof(连接));m_pRecordset.CreateInstance (__uuidof(记录集));m_btnMoveNext.EnableWindow(假);m_btnMovePrevious.EnableWindow(假);m_btnAddRecord.EnableWindow(假);m_btnDeleteRecord.EnableWindow(假);
执行以下操作将事件处理程序添加到吗连接到数据库按钮:
HRESULT人力资源;_bstr_t bstrConnection (”提供者= Microsoft.Jet.OLEDB.4.0;数据源= d: \ \ temp \ \ DB1.mdb;“);_bstr_t bstrQuery (“SELECT * FROM图像”);_variant_t vNull;vNull。vt = VT_ERROR;vNull。范围= DISP_E_PARAMNOTFOUND;如果(m_pConnection - >状态= = adStateClosed){hr = m_pConnection - >打开(bstrConnection _bstr_t (L”“),_bstr_t (L”“),adModeUnknown);}如果(成功(人力资源){m_pRecordset - > PutRefActiveConnection (m_pConnection);hr = m_pRecordset - >打开(_variant_t (bstrQuery) vNull, adOpenKeyset, adLockOptimistic, adCmdText);如果(成功(人力资源){如果(! m_pRecordset - > GetBOF ()){m_pRecordset - > MoveFirst ();}如果(! m_pRecordset - > GetADOEOF ()){m_btnMoveNext.EnableWindow(真正的);m_btnMovePrevious.EnableWindow(真正的);m_btnDeleteRecord.EnableWindow(真正的);}m_btnAddRecord.EnableWindow(真正的);}}
执行以下操作将事件处理程序添加到吗断开数据库按钮:
如果(m_pConnection - >状态= = adStateOpen){m_pConnection - > Close ();}如果(m_pRecordset - >状态= = adStateOpen){m_pRecordset - > Close ();}m_btnMoveNext.EnableWindow(假);m_btnMovePrevious.EnableWindow(假);m_btnAddRecord.EnableWindow(假);m_btnDeleteRecord.EnableWindow(假);
执行以下操作将事件处理程序添加到吗添加记录按钮:
L_SIZE_T nSize;intnRet;LMemoryFile LeadMemFile;LBuffer LeadMemBuffer;如果(m_pConnection - >状态= = adStateClosed){对话框(文本(“连接关闭”));返回;}LeadMemFile。SetBitmap ((LBitmapBase *) &m_LBitmapWnd);nRet = LeadMemFile.Save (QS &LeadMemBuffer FILE_LEAD, 24日);nSize = LeadMemBuffer.GetSize ();字节* pData =(字节*)LeadMemBuffer.Lock ();varBLOB变体;BlobToVariant (varBLOB pData(长)nSize);LeadMemBuffer.Unlock ();LeadMemBuffer.Free ();m_pRecordset - > AddNew ();m_pRecordset l[0] - > - >字段项- > AppendChunk (varBLOB);m_pRecordset - >字段- >项目[1 l] - > PutValue((长)nSize);m_pRecordset - >更新();VariantClear (&varBLOB);如果(m_pRecordset - > RecordCount > = 0){m_btnMoveNext.EnableWindow(真正的);m_btnMovePrevious.EnableWindow(真正的);m_btnDeleteRecord.EnableWindow(真正的);}
执行以下操作将事件处理程序添加到吗删除记录按钮:
如果(m_pConnection - >状态= = adStateClosed){对话框(文本(“连接关闭”));返回;}如果(! m_pRecordset - > GetBOF () | | ! m_pRecordset - > GetADOEOF ()){m_pRecordset - > MoveLast ();m_pRecordset - > Delete (adAffectCurrent);m_pRecordset - >更新();如果(m_pRecordset - > RecordCount < = 0){m_btnMoveNext.EnableWindow(假);m_btnMovePrevious.EnableWindow(假);m_btnDeleteRecord.EnableWindow(假);}}
执行以下操作将事件处理程序添加到吗移动下一个按钮:
如果(m_pConnection - >状态= = adStateClosed){对话框(文本(“连接关闭”));返回;}如果(! m_pRecordset - > GetADOEOF ()){m_pRecordset - > MoveNext ();}如果(m_pRecordset - > GetADOEOF ()){对话框(文本(“从db无法获得的图像”));m_pRecordset - > MovePrevious ();}其他的{ReadImage ();}
执行以下操作将事件处理程序添加到吗移动之前按钮:
如果(m_pConnection - >状态= = adStateClosed){对话框(文本(“连接关闭”));返回;}如果(! m_pRecordset - > GetBOF ()){m_pRecordset - > MovePrevious ();}如果(m_pRecordset - > GetBOF ()){对话框(文本(“从db无法获得的图像”));m_pRecordset - > MoveNext ();}其他的{ReadImage ();}
去ImageBlobDlg。h文件然后添加以下函数声明:
afx_msg无效OnClose ();无效BlobToVariant(变体&varArray字节* pData,长lSize);无效ReadImage ();
去ImageBlobDlg。cpp文件然后添加以下行BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间:
ON_WM_CLOSE ()
ImageBlobDlg.cpp添加以下功能:
无效CImageBlobDlg: OnClose (){如果(m_LBitmapWnd.IsAllocated ()){m_LBitmapWnd.Free ();}LBase: UnloadLibraries (LT_KRN);LBase: UnloadLibraries (LT_DIS);LBase: UnloadLibraries (LT_FIL);CoInitialize(空);CDialog: OnClose ();}无效&varArray CImageBlobDlg:: BlobToVariant(变种,字节* pData,长lSize){字节* pByte;SAFEARRAY远* psa;SAFEARRAYBOUND rgsabound [1];rgsabound [0]。lLbound = 0;rgsabound [0]。cElements = lSize;/ /创建一个单一空间的字节数组psa = SafeArrayCreate (VT_I1 1 rgsabound);/ /设置数组的数据编辑框中的数据如果(SafeArrayAccessData (psa (无效* *)&pByte) = = NOERROR)memcpy (pByte(值),(值)pData lSize);SafeArrayUnaccessData (psa);varArray。vt = VT_ARRAY | VT_UI1;varArray。parray = psa;}无效CImageBlobDlg: ReadImage (){长nSize;字节* pData =零;LMemoryFile LeadMemFile;intnRet;_variant_t varSize;varSize = m_pRecordset - - > >字段项[1 l] - >价值;nSize = varSize.intVal;/ /免费的旧图片m_LBitmapWnd.Free ();对话框(文本(“老形象释放”));如果(nSize){_variant_t varBLOB;VariantInit (&varBLOB);/ /获得数据的一部分varBLOB = m_pRecordset - - > >字段项l [0] - > GetChunk (nSize);pData =(字节*)malloc (nSize);memset (pData 0 nSize);如果(varBLOB。vt = = (VT_ARRAY | VT_UI1)){字节* pBuf =零;SafeArrayAccessData (varBLOB.parray, (无效* *)pbuf);LeadMemFile。SetBitmap ((LBitmapBase *) &m_LBitmapWnd);LBuffer LeadMemBuffer (pBuf nSize);nRet = LeadMemFile。负载(ORDER_BGR LeadMemBuffer, 24日,NULL);SafeArrayUnaccessData (varBLOB.parray);}}}
创建一个新文件Imports.cpp它在你的项目文件。
# include“StdAfx.h”#如果定义(WIN64)# pragma评论(自由,“. . \ \ . \ \ . . \ \ . \ \ . . \ \ Lib \ \ CDLLVC10 \ \ x64 \ \ Ltwvc_x.lib”)#其他的# pragma评论(自由,“. . \ \ . \ \ . . \ \ . \ \ . . \ \ Lib \ \ CDLLVC10 \ \ Win32 \ \ Ltwvc_u.lib”)# endif/ / #如果定义(WIN64)
在主菜单中,选择构建- >构建ImageBlob。exe构建项目。
在主菜单中,选择建立ImageBlob - >执行。exe运行项目。
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗Web查看器net
188宝金博怎么下载
支持的平台上
net, Java, Android和iOS / macOS组件
C / c++类库的API
HTML5 JavaScript库
你的邮件已经发送到支持!有人应该联系!如果你的问题是紧急请回到聊天。
聊天时间:
周一——周五,上午6点等
谢谢你的反馈!
请填写表单重新开始一个新的聊天。
所有代理目前离线。
聊天时间:
周一-周五
早上8:30 - 6点
联系我们请填写这张表格,我们将通过电子邮件联系你。
