Ado 實(shí)現(xiàn)C對(duì)象的存取_第1頁(yè)
Ado 實(shí)現(xiàn)C對(duì)象的存取_第2頁(yè)
Ado 實(shí)現(xiàn)C對(duì)象的存取_第3頁(yè)
Ado 實(shí)現(xiàn)C對(duì)象的存取_第4頁(yè)
Ado 實(shí)現(xiàn)C對(duì)象的存取_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Ado 實(shí)現(xiàn)C+對(duì)象的存取作者:江上飛鳥(niǎo)下載源代碼其實(shí)我最討厭寫(xiě)東西了,最近忙死了,呵呵,前一段時(shí)間在做一個(gè)圖形程序時(shí),需要把C+對(duì)象保存到數(shù)據(jù)庫(kù)里,剛開(kāi)始真讓我頭疼啊,琢磨了一個(gè)下午,終于給做出來(lái)了,廢話不說(shuō)了,還是把自己的一些體會(huì)與各位同任一起分享!一、新建一個(gè)繼承于 CObject 的子類(lèi) CLine;頭文件:Line.h class CLine : public CObject?private :LOGPEN m_logPen; /畫(huà)筆COLORREF m_crBackColor;CArray<CPoint, CPoint &> m_PointArray; /標(biāo)記類(lèi)

2、對(duì)應(yīng)框public:int GetSize();CPoint GetPoint(int pos);void DrawLine(CDC *pDC,CPoint pt1,CPoint pt2,CRect rc);void DrawBackGround(CDC *pDC,CRect rect);void DrawPoint(CDC *pDC, CRect rect);void SetWidth(int iWidth);COLORREF GetColor();void SetColor(COLORREF color);COLORREF GetBkColor();void SetBkColor(COLO

3、RREF color);void AddPoint(CPoint point);void Clear();CLine();virtual CLine();virtual void Serialize(CArchive &ar);CLine& operator=(CLine &src);DECLARE_SERIAL(CLine)?; 實(shí)現(xiàn)文件:Line.cpp / Line.cpp: implementation of the CLine class./#include "stdafx.h"#include "TestAdo.h"#

4、include "Line.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endifIMPLEMENT_SERIAL(CLine,CObject,1)CLine:CLine()Clear();CLine:CLine()/重寫(xiě) =CLine& CLine:operator=(CLine &src)if(this!=&src)m_logPen = src.m_logPen;m_crBackColor = src.m_crBackColor

5、;return *this;?/串行化操作void CLine:Serialize(CArchive &ar)if (ar.IsStoring()ar << DWORD(m_crBackColor);ar.Write(&m_logPen, sizeof(LOGPEN);elseDWORD dw;ar >> dw; m_crBackColor = COLORREF(dw);ar.Read(&m_logPen, sizeof(LOGPEN);m_PointArray.Serialize(ar);void CLine:Clear()m_crBackCo

6、lor = RGB(255,255,255);m_logPen.lopnStyle = PS_SOLID;m_logPen.lopnWidth.x = 1;m_logPen.lopnWidth.y = 1;m_logPen.lopnColor = RGB(0, 0, 0);m_PointArray.RemoveAll();void CLine:AddPoint(CPoint point)m_PointArray.Add(point);void CLine:SetColor(COLORREF color)m_logPen.lopnColor = color;COLORREF CLine:GetC

7、olor()return m_logPen.lopnColor;void CLine:SetBkColor(COLORREF color)m_crBackColor = color;COLORREF CLine:GetBkColor()return m_crBackColor;void CLine:SetWidth(int iWidth)m_logPen.lopnWidth.x = iWidth;m_logPen.lopnWidth.y = iWidth;/繪線條void CLine:DrawPoint(CDC *pDC, CRect rect)int len = m_PointArray.G

8、etSize();if (len <=0) return;CPen pen;pen.CreatePenIndirect(&m_logPen);CPen *pOldPen = pDC->SelectObject(&pen);CPoint pt = m_PointArray.GetAt(0);pDC->MoveTo(pt);for (int i=1; i< len; i+)pt = m_PointArray.GetAt(i);pDC->LineTo(pt);pDC->SelectObject(pOldPen);pOldPen = NULL;pen

9、.DeleteObject();void CLine:DrawBackGround(CDC *pDC, CRect rect)CBrush brushCtl;brushCtl.CreateSolidBrush(GetBkColor();pDC->Rectangle(rect);pDC->FillRect(rect,&brushCtl) ;brushCtl.DeleteObject();void CLine:DrawLine(CDC *pDC,CPoint pt1, CPoint pt2, CRect rc)CPen pen;pen.CreatePenIndirect(&am

10、p;m_logPen);CPen *pOldPen = pDC->SelectObject(&pen);pDC->MoveTo(pt1);pDC->LineTo(pt2);pDC->SelectObject(pOldPen);pOldPen = NULL;pen.DeleteObject();CPoint CLine:GetPoint(int pos)if (pos>=0 && pos<m_PointArray.GetSize()?return m_PointArray.GetAt(pos);return CPoint(0,0);in

11、t CLine:GetSize()return m_PointArray.GetSize(); 二、用Ado接口打開(kāi)數(shù)據(jù)庫(kù)BOOL CTestAdoDlg:OpenDb(CString filename)HRESULT hr=S_OK;hr=m_pCon.CreateInstance("ADODB.Connection");if (hr!=S_OK)return FALSE;try_bstr_t sCon;sCon=_bstr_t(filename); /路徑名sCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&

12、quot;+sCon;hr=m_pCon->Open(sCon,"","",adModeUnknown);if (hr!=S_OK)return FALSE;/hr=m_pSet.CreateInstance("ADODB.Recordset");if (hr!=S_OK)return FALSE;m_pSet->CursorLocation=adUseClient;hr=m_pSet->Open("SELECT * FROM object_table",_variant_t(IDispatch*

13、)m_pCon,TRUE),adOpenStatic,adLockOptimistic,adCmdText);if (hr!=S_OK)return FALSE;return TRUE;/catch(_com_error &e)CString errorMessage;errorMessage.Format("連接數(shù)據(jù)庫(kù)失??!錯(cuò)誤信息:%s",e.ErrorMessage();return FALSE;return FALSE; (注意:在StdAfx.h中要加入:#import "C:Program FilesCommon FilesSYSTEMADOm

14、sado15.dll" no_namespace rename("EOF","adoEOF") 來(lái)引入ado庫(kù),還有在 BOOL CTestAdoApp:InitInstance() 加入 AfxOleInit();/初始化COM庫(kù))三、CLine對(duì)象的保存void CTestAdoDlg:OnButtonSave()/m_Listif (!m_bState) return;UpdateData();trym_pSet->AddNew();m_pSet->PutCollect("name", _variant_t

15、(m_sName);/保存圖形對(duì)象CMemFile memFile;CArchive ar(&memFile, CArchive:store);m_Line.Serialize(ar);ar.Close();DWORD dwSize = memFile.GetLength();LPBYTE lpInfo = memFile.Detach();VARIANT varBLOB;SAFEARRAY *psa;SAFEARRAYBOUND rgsabound1;rgsabound0.lLbound = 0;rgsabound0.cElements = dwSize;psa = SafeArra

16、yCreate(VT_UI1, 1, rgsabound);for (long i = 0; i < (long)dwSize; i+)SafeArrayPutElement (psa, &i, lpInfo+);varBLOB.vt = VT_ARRAY | VT_UI1;varBLOB.parray = psa;m_pSet->GetFields()->GetItem("object")->AppendChunk(varBLOB);m_pSet->Update();m_List.AddString(m_sName);catch(_c

17、om_error &e)CString str=(char *)e.Description();MessageBox(str+"r保存數(shù)據(jù)庫(kù)出問(wèn)題!","提示",MB_OK|MB_ICONWARNING);return ;四、CLine對(duì)象的讀取 void CTestAdoDlg:OnSelchangeListData()int iPos = m_List.GetCurSel();if (iPos<0) return ;m_pSet->MoveFirst();int i=0;while (i< iPos)m_pSet->M

18、oveNext();i+;long lDataSize = m_pSet->GetFields()->GetItem(_variant_t("object")->ActualSize;if(lDataSize <= 0) return;_variant_t varBLOB;VariantInit (&varBLOB);varBLOB = m_pSet->GetFields()->GetItem(_variant_t("object")->GetChunk(lDataSize);if(varBLOB.vt = (VT_ARRAY | VT_UI1)BYTE *pBuf = new BYTElDataSize + 1;if(pBuf)SafeArrayAccessData(varBLOB.parray,(void *)&pBuf);SafeArrayUnaccessData (varBLOB.parray);CMemFile memfile;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論