转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
通过COM使用ADO         ★★★★

通过COM使用ADO

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1818 更新时间:2009/4/23 10:50:36

在Visual C++或C++ Builder中,我们可以通过访问ADO的COM对象来将对ADO的操作封装成一个类。首先,我们需要对MSADO15.DLL进行导入,让它生成类型库。在C++ Builder中,用TLIBIMP.EXE来生成ADODB_TLB.h,ADODB_TLB.cpp等文件,然后我们通过阅读类型库中的信息,从而可以写成这个类:
.h File
#ifndef ADOH
#define ADOH
#include "ADODB_TLB.h"
#include "utilcls.h"
#include <dstring.h>
class CValue
{
public:
     CValue();
     ~CValue();
     Variant m_value;
     BOOL AsBool();
     String AsString();
     int AsInt();
     float AsFloat();
     TDateTime AsDate();
};

class ADOConnection
{
public:
 ADOConnection();
 virtual ~ADOConnection();
public:
 _ConnectionPtr m_pConnection;
 BOOL  m_bConnectionOpen;
   BOOL  m_bInstance;
   int m_nOpenMode;
 BOOL  Open(BSTR dsn,BSTR uid,BSTR pwd);
};
class ADOrecordset
{
public:
 ADOrecordset();
 virtual ~ADOrecordset();
public:
   _ConnectionPtr m_pConnection;
 _RecordsetPtr  m_recordset;
 BOOL    m_bOpen;
 BOOL    SetConnect(_ConnectionPtr _pConnection);
 BOOL Open(WideString sql);
 HRESULT GetFieldValue(Variant idx,Variant * newVal);
 CValue GetFieldValue(String sName);
 CValue GetFieldValue(long index);
 HRESULT GetFieldCount(long &Count);//added by chenbin
 HRESULT GetFields(long index,String& sFieldList);//added by chenbin
 HRESULT GetFieldType(FieldPtr pField,String& strMsg,long& nResult);//added by chenbin
 HRESULT GetFieldType(String FieldName,String& strMsg,long& nResult);//added by chenbin
 BOOL    get_BOF();
 BOOL    get_EOF();
 HRESULT Prev();
 HRESULT Last();
 HRESULT Next();
 HRESULT First();
 HRESULT CloseRecordset(void);
};
#endif


.cpp File
#ifdef __BORLANDC__
#include <vcl.h>
#pragma hdrstop
#endif
#include "ADO.h"
file://----------Class CValue-------------------
CValue::CValue()
{

   file://If necessary,you may add codes here......
}
CValue::~CValue()
{
   file://If necessary,you may add codes here.........
}
BOOL CValue::AsBool()
{
   if(m_value.IsEmpty()) return false;
   else return m_value.AsType(varBoolean);
}
String CValue::AsString()
{
   if(m_value.IsEmpty()) return "";
   else return m_value.AsType(varString);
}
int CValue::AsInt()
{
   int m_int;
   if(m_value.IsEmpty()) return 0;
   else
   {
      switch(m_value.Type())
      {
         case varSmallint:
            m_int=m_value.AsType(varSmallint);
            break;
         case varInteger:
            m_int=m_value.AsType(varInteger);
            break;
         default:
            m_int=0;
      }
   }
   return m_int;
}
float CValue::AsFloat()
{
   float m_float;
   if(m_value.IsEmpty()) return 0;
   else
   {
      switch(m_value.Type())
      {
         case varSingle:
            m_float=m_value.AsType(varSingle);
            break;
         case varDouble:
            m_float=m_value.AsType(varDouble);
            break;
         default:
            m_float=0;
            break;
      }
   }
   return m_float;
}
TDateTime CValue::AsDate()
{
   file://1970-01-01 12:00:00 is invalid datetime
   TDateTime dt=StrToDateTime("1970-01-01 12:00:00");
   if(m_value.IsEmpty()) return dt;
   else return m_value.AsType(varDate);
}

file://----------------Class ADOConnection------------
ADOConnection::ADOConnection()
{
   m_bConnectionOpen= FALSE;
   m_bInstance=FALSE;
 file://If necessary,you may add codes here....
}
ADOConnection::~ADOConnection()
{
   m_bInstance=FALSE;
   m_bConnectionOpen=FALSE;
   file://If necessary,you may add codes here....
}
BOOL ADOConnection::Open(wchar_t* dsn,wchar_t* uid,wchar_t* pwd)
{
   HRESULT hr;
   if(!m_bInstance)
   {
      try
      {
         hr=m_pConnection.CreateInstance(__uuidof(Connection));
      }
      catch(Exception &e)
      {
         ::MessageBox(::GetActiveWindow(),e.Message.c_str(),"Error",MB_OK+MB_ICONERROR);
         return FALSE;
      }
      m_bInstance=true;
   }
   if(m_bConnectionOpen) return TRUE;
   try
   {
      hr=m_pConnection->Open(dsn,uid,pwd,adModeUnknown);
      m_nOpenMode=2;
   }
   catch(Exception &e)
   {
      ::MessageBox(::GetActiveWindow(),e.Message.c_str(),"Error",MB_OK+MB_ICONERROR);
      return FALSE;
   }
   m_bConnectionOpen=TRUE;
   hr=S_OK;
   return TRUE;
}
file://-------Class ADORecordset------------
ADOrecordset::ADOrecordset()
{
}
ADOrecordset::~ADOrecordset()
{
}
BOOL ADOrecordset::SetConnect(_ConnectionPtr _pConnection)
{
   if(_pConnection)
   {
      HRESULT hr=m_recordset.CreateInstance(__uuidof(Recordset));
      m_pConnection=_pConnection;
      if(SUCCEEDED(hr)==S_OK) return TRUE;
      else return FALSE;
   }
   else return FALSE;
}
BOOL ADOrecordset::Open(WideString sql)
{
   try
   {
      _CommandPtr m_Cmd("ADODB.Command");
      m_Cmd->_set_ActiveConnection(m_pConnection);
      m_Cmd->set_CommandText(sql);
      m_Cmd->set_CommandType(adCmdText);
      m_recordset=m_Cmd->Execute(NULL,NULL,adCmdText);
      m_bOpen=true;
   }
   catch(Exception &e)
   {
      m_bOpen=FALSE;
      return FALSE;
   }
   return TRUE;
}
HRESULT ADOrecordset::GetFieldValue(Variant idx,Variant * newVal)
{
   FieldsPtr *Fields=0;
   FieldPtr *Field=0;
   HRESULT hr=m_recordset->get_Fields(Fields);
   if(hr==S_OK)
   {
      hr=(*Fields)->get_Item(idx,Field);
      if(hr==S_OK)
      {
         hr=(*Field)->get_Value(*newVal);
      }
   }
   return hr;

}
CValue ADOrecordset::GetFieldValue(String sName)//Get Field''''s value according to the field''''s name
{
   FieldsPtr *Fields=0;
   FieldPtr *Field=0;
   CValue v;
   Variant idx=sName;
   if(m_recordset->get_Fields(Fields)==S_OK)
   {
      if((*Fields)->get_Item(idx,Field)==S_OK)
      {
         v.m_value=(*Field)->get_Value();
      }
   }
   return v;
}
CValue ADOrecordset::GetFieldValue(long index)
{
   FieldsPtr* Fields=0;
   FieldPtr* Field=0;
   CValue v;
   if(m_recordset->get_Fields(Fields)==S_OK)
   {
      if((*Fields)->get_Item(index,Field)==S_OK)
      {
         v.m_value=(*Field)->get_Value();
      }
   }
   return v;
}
HRESULT ADOrecordset::GetFieldCount(long &Count)
{
   FieldsPtr* Fields;
 &nbs

[1] [2]  下一页


[VB.NET程序]ADO 在informix的 Addnew  [VB.NET程序]ADO 的测试
[VB.NET程序]ADO 揭密 1  [Web开发][ADO]如何修改ADO的线程模型
[Web开发]Delphi7下仿Ado.Net类的实现  [Web开发]ADO & ADO.NET中使用存储过程的两个共用的函数
[Web开发]Binding a DataGrid to an ADO Recordset  [Web开发]ADOCE for ADO Programmers
[Web开发]Delphi多线程下的ADO编程  [Web开发]在delphi.net的VCL.net里使用Ado.net
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台