当前位置: 传客网 > VC 操作ACCESS的创建数据库,表,添加\修改\删除记录等

VC 操作ACCESS的创建数据库,表,添加\修改\删除记录等

2017-01-12 作者:诺谩_453_429

#import "C:\Program Files\Common Files\System\ado\msadox.dll"
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\
 rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库


class ADO 
{
public:
    _ConnectionPtr m_pConnection;     //连接对象指针
 _RecordsetPtr  m_pRecordset;     //记录集对象指针

public:
 ADO();
 virtual ~ADO();
 BOOL CreateDB(LPCTSTR lpszFileName);
 void OnInitADOConn();       //连接数据库
 _RecordsetPtr&  OpenRecordset(CString sql);  //打开记录集
 void CloseRecordset();       //关闭记录集
 void CloseConn();        //关闭数据库连接
 UINT GetRecordCount(_RecordsetPtr pRecordset); //获得记录数 
};

ADO::ADO()
{
 CoInitialize(NULL);
}

ADO::~ADO()
{
 CoUninitialize();
}
BOOL ADO::CreateDB(LPCTSTR lpszFile)
//{
// BOOL CPassportDoc::CreateDB(LPCTSTR lpszFile)
{
 
 _ConnectionPtr tempConnn;
 ADOX::_CatalogPtr pCatalog = NULL;
 ADOX::_TablePtr  pTable = NULL;
 ADOX::_IndexPtr pIndexNew  = NULL;
 ADOX::_IndexPtr pIndex  = NULL;
 _variant_t d;
 HRESULT hr;
 CString strConnect;
 CString strDBPath=lpszFile;
 strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"),strDBPath);
 COleVariant Connect(strConnect);
 try{
  
  hr = pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
   if (FAILED(hr))
  {
   _com_issue_error(hr);
  // return FALSE;
  }
  if (GetFileAttributes(lpszFile) == INVALID_FILE_ATTRIBUTES)  
  {
   
   hr = pCatalog->Create((LPCTSTR)strConnect);//创建数据库
  }
  tempConnn.CreateInstance(_T("ADODB.Connection"));
  tempConnn->PutCommandTimeout(30);
  tempConnn->PutConnectionTimeout(30);
  tempConnn->put_CursorLocation(adUseClient);
  tempConnn->Open(_bstr_t(strConnect),_bstr_t(),_bstr_t(),adConnectUnspecified);
  pCatalog->PutActiveConnection(_variant_t((IDispatch *) tempConnn));
  pTable.CreateInstance(_T("ADOX.Table"));
  pTable->ParentCatalog =pCatalog;
  pTable->Name="Passport1";
  ADOX::ColumnsPtr pCols =pTable->Columns;
  pCols->Append(_T("RecordID")  ,ADOX::adInteger,0);//自动编号字段
  pCols->Append(_T("Name")   ,ADOX::adWChar,255);//文本字段
  pCols->Append(_T("DateOfBirth")  ,ADOX::adDate,0);//日期字段
  pCols->Append(_T("OtherInfo"),ADOX::adLongVarWChar,0);//备注字段
  pCatalog->Tables->Refresh();
  long lCount=pCols->Count;
  for(long i=0;i<lCount;i++)
  {
   pCols->GetItem(i)->ParentCatalog =pCatalog;//重要!设置Catalog,参见Q201826 PRB: Error 3265 When You Access Properties Collection
   ADOX::PropertiesPtr pProperties=pCols->GetItem(i)->Properties;
   if(pProperties)
   {//这里是用于调试的属性显示代码
    long lp=pProperties->Count;
    TRACE("Properties for Col %s\r\n",(LPCTSTR)pCols->GetItem(i)->Name); 
   }
  }
  //设置说明
  pCols->GetItem(_T("RecordID"))->Properties->GetItem(_T("Description"))->Value=_T("记录编号");//注释
  pCols->GetItem(_T("RecordID"))->Properties->GetItem(_T("AutoIncrement"))->Value=true;//自动编号
  pCols->GetItem(_T("Name"))->Properties->GetItem(_T("Jet OLEDB:Compressed UniCode Strings"))->Value=true;
  pCols->GetItem(_T("Name"))->Properties->GetItem(_T("Description"))->Value=_T("姓名");
  pCols->GetItem(_T("DateOfBirth"))->Properties->GetItem(_T("Description"))->Value=_T("出生日期");
  pCols->GetItem(_T("OtherInfo"))->Properties->GetItem(_T("Jet OLEDB:Compressed UniCode Strings"))->Value=true;
  pCols->GetItem(_T("OtherInfo"))->Properties->GetItem(_T("Description"))->Value=_T("其他信息");
  //--
  pCatalog->Tables->Append(_variant_t ((IDispatch*)pTable));//添加表
  pCatalog->Tables->Refresh();//刷新
  pIndexNew.CreateInstance(_T("ADOX.Index"));
  pIndexNew->Name = "RecordID";//索引名称
  pIndexNew->Columns->Append("RecordID",ADOX::adInteger,0);//索引字段
  pIndexNew->PutPrimaryKey(-1);//主索引
  pIndexNew->PutUnique(-1);//唯一索引
  pTable->Indexes->Append(_variant_t ((IDispatch*)pIndexNew));//创建索引
  pIndexNew=NULL;
  pCatalog->Tables->Refresh();//刷新
  tempConnn->Close();
  return TRUE;
 }
 catch(_com_error &e)
 {
  AfxMessageBox(e.Description()); //弹出错误处理
  return FALSE;
 }
 catch(...)
 {
 }
 return FALSE;
}

 
// return TRUE;
//}

void ADO::OnInitADOConn()
{
 ::CoInitialize(NULL);
 try
 {
       m_pConnection.CreateInstance("ADODB.Connection");  //创建连接对象实例
    _bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
   uid=;pwd=;DBQ=DataBase.mdb;";
    m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库
 }
 catch(_com_error e)
 {
  AfxMessageBox(e.Description()); //弹出错误处理
 }
}

_RecordsetPtr&  ADO::OpenRecordset(CString sql)
{
 ASSERT(!sql.IsEmpty());          //SQL语句不能为空
 try
 {
  m_pRecordset.CreateInstance(__uuidof(Recordset)); //创建记录集对象实例
  m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),
   adOpenDynamic, adLockOptimistic, adCmdText);  //执行SQL得到记录集
 }
 catch(_com_error e)           //捕获可能的异常
 {
  AfxMessageBox(e.Description());
 }
 return m_pRecordset;
}

void ADO::CloseRecordset()
{
 if(m_pRecordset->GetState() == adStateOpen) //判断当前的记录集状态
  m_pRecordset->Close();     //关闭记录集
}

void ADO::CloseConn()
{
 m_pConnection->Close();         //关闭数据库连接
 ::CoUninitialize();          //释放COM环境
}

UINT ADO::GetRecordCount(_RecordsetPtr pRecordset)
{
 int nCount = 0;           //声明保存记录数的变量
 try{
  pRecordset->MoveFirst();        //将记录集指针移动到第一条记录
 }
 catch(...)            //捕捉可能出现的错误
 {
  return 0;           //产生错误时返回0
 }
 if(pRecordset->adoEOF)         //判断记录集中是否没有记录
  return 0;           //无记录时返回0
 while (!pRecordset->adoEOF)        //当记录集指针没有指向最后时
 {
  pRecordset->MoveNext();        //将记录集指针移动到下一条记录
  nCount = nCount + 1;        //记录个数的变量加1
 }
 pRecordset->MoveFirst();         //将记录集指针移动到第一条记录
 return nCount;           //返回记录数
}

 

//用例
void CUseAdoDlg::AddToGrid()
{
 ADO m_Ado;
 m_Ado.OnInitADOConn();//连接数据库
 CString SQL = "select * from employees order by 编号 desc"; //设置查询字符串
 m_Ado.m_pRecordset = m_Ado.OpenRecordset(SQL);//打开记录集
 while(!m_Ado.m_pRecordset->adoEOF)
 {
  m_Grid.InsertItem(0,"");
  m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("编号"));
  m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("姓名"));
  m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("学历"));
  m_Ado.m_pRecordset->MoveNext();//将记录集指针移动到下一条记录
 }
 m_Ado.CloseRecordset();
 m_Ado.CloseConn();//断开数据库连接
}

void CUseAdoDlg::OnButadd()
{
 // TODO: Add your control notification handler code here
 UpdateData(TRUE);
 if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty())
 {
  MessageBox("基础信息不能为空!");
  return;
 }
 ADO m_Ado;
 m_Ado.OnInitADOConn();
 CString sql = "select * from employees";
 m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
 try
 {
  m_Ado.m_pRecordset->AddNew(); //添加新行
  m_Ado.m_pRecordset->PutCollect("编号",(_bstr_t)m_ID);
  m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name);
  m_Ado.m_pRecordset->PutCollect("学历",(_bstr_t)m_Culture);
  m_Ado.m_pRecordset->Update(); //更新数据表记录
  m_Ado.CloseRecordset();
  m_Ado.CloseConn();
 }
 catch(...)
 {
  MessageBox("操作失败");
  return;
 }
 MessageBox("添加成功");
 m_Grid.DeleteAllItems(); //删除列表控件
 AddToGrid(); 
}
void CUseAdoDlg::OnButmod()
{
 // TODO: Add your control notification handler code here
 UpdateData(TRUE);
 if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty())
 {
  MessageBox("基础信息不能为空!");
  return;
 }
 int pos   = m_Grid.GetSelectionMark();
 ADO m_Ado;
 m_Ado.OnInitADOConn();
 CString sql = "select * from employees";
 m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
 try
 {
  m_Ado.m_pRecordset->Move((long)pos,vtMissing);
  m_Ado.m_pRecordset->PutCollect("编号",(_bstr_t)m_ID);
  m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name);
  m_Ado.m_pRecordset->PutCollect("学历",(_bstr_t)m_Culture);
  m_Ado.m_pRecordset->Update();
  m_Ado.CloseRecordset();
  m_Ado.CloseConn();
 }
 catch(...)
 {
  MessageBox("操作失败");
  return;
 }
 MessageBox("修改成功");
 m_Grid.DeleteAllItems();
 AddToGrid();
}

void CUseAdoDlg::OnButdel()
{
 // TODO: Add your control notification handler code here
 int pos   = m_Grid.GetSelectionMark();
 ADO m_Ado;
 m_Ado.OnInitADOConn();
 CString sql = "select * from employees";
 m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
 try
 {
  m_Ado.m_pRecordset->Move(pos,vtMissing);
  m_Ado.m_pRecordset->Delete(adAffectCurrent);
  m_Ado.m_pRecordset->Update();
  m_Ado.CloseRecordset();
  m_Ado.CloseConn();
 }
 catch(...)
 {
  MessageBox("操作失败");
  return;
 }
 MessageBox("删除成功");
 OnButclear();
 m_Grid.DeleteAllItems();
 AddToGrid();
}



相关推荐

  • MySQL 添加列,修改列,删除列

    MySQL添加列,修改列,删除列ALTERTABLE:添加,修改,删除表的列,约束等表的定义。查看列:desc表名;修改表名:altertablet_bookrenametobbb;添加列:altertable表名addcolumn列名va

  • 小小小说阅读器1.0.0绿色版(支持添加删除书签记录阅读位置)下载,高速下载

    小小小说阅读器1.0.0绿色版(支持添加删除书签记录阅读位置)软件标签:小小小说阅读器软件授权:绿色版更新时间:2010-10-1408:28:08软件类型:国产软件软件大小:2.10MB软件语言:简体中文 应用平台:Win2000/Win

  • Android桌面添加删除图标的方法

    Android手机桌面是可以随意添加和删除应用图标的,具体的操作方法为:1、添加桌面图标:进入菜单界面找到想要建立桌面快捷方式的程序,按住图标不放,等一会就会出现一次震动,这样我们就可以将图标拖动到想要摆放的位置就可以了。2、删除桌面图标:

  • 添加删除程序提示数据执行保护DEP失败

    描述:在安装手机驱动程序及Android手机软件《豌豆荚》后引起Windows控制面板的“添加删除程序”组件无法启动的问题。具体故障表现为运行“添加删除程序”后出现RunDLL32(RunaDLLasanApp)遇到问题、需要关闭,或者Ru

  • 用DW制作删除记录页面

    在A页上用表格列出要删除的记录,表格中包含“删除”链接。当单击该链接时,会弹出一个确认框,单击“确定”按钮,会将要删除的记录号传递到B页,这可以通过“转到详细页”服务器行来实现。在B页上插入一个表单并创建一个记录集,通过URL参数进行筛选,

  • OCR/Vote disk 维护操作: (添加/删除/替换/移动)

    目标解决方案准备磁盘1.磁盘大小2.裸设备或者块设备(pre11.2)3.ASMdisks(11.2+)4.集群文件系统5.权限6.冗余添加/删除/替换/移动OCRdevice1.当只有一个OCR设备时,添加一个OCRMIRROR设备:2.

  • 添加删除Win2000/XP系统组件一法 

    单位要求所飞鹤有职员不许安装游戏及飞鹤Windows自带的飞鹤游戏,我在单位用的是飞鹤00Profess飞鹤0Professional版,系统附件中留有Windows自带的纸牌等一些游戏,但是我发现“控制面板”的“添加/删除程序”中没有游戏

  • DOS命令DOS详解-DOS添加删除用户名-netsh-netstat

    DOS命令DOS详解-DOS添加删除用户名-netsh-netstat2008-03-0221:56一,ping它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命

  • MyUninstaller 1.66汉化绿色版(添加删除程序软件)下载,高速下载

    MyUninstaller1.66汉化绿色版(添加删除程序软件)软件标签:MyUninstaller软件授权:绿色版更新时间:2010-12-1415:18:38软件类型:汉化软件软件大小:40.0KB软件语言:简体中文 应用平台:Win2

  • 用Dreamweaver实现ASP数据库动态网站建设——删除记录

    制作删除数据记录页新建网页命名为delete.asp,并打开它,在其上创建一个七行二列的表格,并在左边的表格上填写相应的字段名,然后给网页绑定一个记录集,并对其字段拖到对应的右这表格中。创建一表单,并把上述所建的表格拖入表单内,同时为表单建

  • 添加删除Win2000/XP系统组件一法 

    单位要求所加拿大留学专业选择有职员不许安装游戏及澳大利亚大学排名Windows自带的澳大利亚研究生申请游戏,我在单位用的是澳大利亚大学排名00Profess澳大利亚专业排名0Professional版,系统附件中留有Windows自带的纸牌

  • 添加删除Win2000/XP系统组件一法 

    单位要求所澳大利亚留学考什么有职员不许安装游戏及加拿大留学要考什么Windows自带的美国研究生申请指南游戏,我在单位用的是移民澳洲的条件00Profess移民澳洲的条件0Professional版,系统附件中留有Windows自带的纸牌等

  • 添加删除Win2000/XP系统组件一法 

    单位要求所和道国际有职员不许安装游戏及隆基泰和Windows自带的隆基泰和物业游戏,我在单位用的是万和城隆基泰和00Profess魏少军0Professional版,系统附件中留有Windows自带的纸牌等一些游戏,但是我发现“控制面板”的

  • UILabel文字添加删除线

    NSAttributedString*attrStr=[[NSAttributedStringalloc]initWithString:_model.originPriceattributes:@{NSFontAttributeName:[

  • windows 服务添加删除工具 绿色免费版

    什么是Windows服务:Windows服务也称为WindowsService,它是Windows操作系统和Windows网络的基础,属于系统核心的一部分,它支持着整个Windows的各种操作。诸如DNS客户端、打印程序、Windows更新

  • 摩托罗拉MB/ME860国行2.3.5状态栏添加/删除运营商教程

    准备工作:电脑一台,装好JAVA环境,下好APKtool手机一台,Root好所需知识:反编译1,打开手机re管理器,把systemui.apk提取到电脑上(system/app/systemui.apk)2,电脑上反编译systemui3,

  • SQL语句的添加、删除、修改多种方法

    SQL语句的添加、删除、修改虽然有如下很多种方法,但在使用过程中还是不够用,不知是否有高手把更多灵活的使用方法贡献出来?添加、删除、修改使用db.Execute(Sql)命令执行操作╔----------------╗☆数据记录

  • SQL语句的添加、删除、修改

    http://www.51testing.com/?uid-51497-action-viewspace-itemid-66873SQL语句的添加、删除、修改添加、删除、修改使用db.Execute(Sql)命令执行操作╔---------

  • 微信的聊天记录删除了怎么找回?

    微信的聊天记录删除了怎么找回?怎样恢复微信聊天记录?删除了微信聊天记录怎么找回?微信是大家最爱的聊天工具,同时微信聊天记录误删的问题也一直困扰着大家,很多人认为微信删除的聊天记录怎么恢复很难解决,但是,对手机数据恢复有一定了解的用户,都知道

  • 在window系统 cmd命令行中如何查看、修改、删除以及添加环境变量

    如何在cmd命令行中查看、修改、删除与添加环境变量:首先明确一点:所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。永久性修改环境变量的方法有两种:一种是直接修改注册

返回
顶部