/*************************************************************
*** MyWinClass.cpp 创建窗口模板
***          vs2017+Access2007
**************************************************************/ #import "c://program files//common files//system//ado//msado15.dll" no_namespace rename("EOF","adoEOF") //导入ADO库 #include <Windows.h>
#include <tchar.h> #include <comutil.h>
#include <commctrl.h>
#include "resource.h"
// 必须要进行前导声明
INT_PTR CALLBACK WindowProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam);
void LoadDataToListCtrl(HWND hDlg); // 程序入口点
int WINAPI WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
{ // 创建窗口
HWND hwnd = CreateDialog(hInstance, (LPCTSTR)IDD_DIALOG1, NULL, WindowProc); if (hwnd == NULL) //检查窗口是否创建成功,回调函数要返回个0,不然创建不会成功
return ; // 显示窗口
ShowWindow(hwnd, SW_SHOW); // 更新窗口
UpdateWindow(hwnd); // 消息循环
MSG msg;
while (GetMessage(&msg, NULL, , ))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return ;
}
// 在WinMain后实现
INT_PTR CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam)
{ HDC hdc;
RECT rect;
PAINTSTRUCT ps;
//int k;
switch (uMsg)
{
/*case WM_SYSCOMMAND:
break;*/
case WM_INITDIALOG:
{
LoadDataToListCtrl(hwnd);
return ;
} case WM_DESTROY:
PostQuitMessage();
return ; case WM_CLOSE:
if (MessageBox(hwnd, L"请问是否真的要关闭窗口?", L"窗口关闭询问", MB_YESNO) == IDYES)
{
DestroyWindow(hwnd);
return ;
}
else
return ; case WM_LBUTTONDOWN:
{
//MessageBox(hwnd, L"哎呀,我丫的被按了一下", TEXT("好舒服~"), MB_OK); return ;
}
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, L"Hello world!", -, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return ; }
return false;
} //加载数据库数据到ListCtrl控件中
void LoadDataToListCtrl(HWND hDlg)
{
  //查询数据库文件是否存在
LPCTSTR DatabaseFile = L"D:\\MyAccessFile\\myTonxilu.accdb";
WIN32_FIND_DATA wfd;
HANDLE hFile = FindFirstFile(DatabaseFile, &wfd);
if (hFile == INVALID_HANDLE_VALUE)
{
wprintf_s(L"Cannot Find the database file/n");//这名是啥意思,我也不知道,俺是抄的(:
//system("pause");
return;
}
  
  //初始化ADO环境
CoInitialize(NULL);
 
  //创建数据库连接对像,并打开
_ConnectionPtr m_Connection;
m_Connection.CreateInstance(__uuidof(Connection));
HRESULT hr = m_Connection->Open(_bstr_t("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\MyAccessFile\\myTonxilu.accdb"),
_bstr_t(""),
_bstr_t(""),
adModeUnknown);
if (hr != S_OK)
return; //连接记录集
_RecordsetPtr m_Recordset;
m_Recordset.CreateInstance(__uuidof(Recordset));
HRESULT hRs = m_Recordset->Open(_variant_t(L"select * from mTable"), m_Connection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if (hRs != S_OK)
return;  //获得ListCtrl控件的句柄
HWND hList = GetDlgItem(hDlg, IDC_LIST1);
//设置风格样式
SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, , LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
RECT rt;
::GetClientRect(hList, &rt);
int nListWith = rt.right - ;  //获得控件的宽度
//插入列标题 LVCOLUMN col = { };
col.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH;
col.pszText = (LPTSTR)L"编号";
col.fmt = LVCFMT_LEFT; // 列文字排列样式,居左,中,右
col.cx = (int)(0.2*nListWith);// 列的宽度
col.iSubItem = ;
SendMessage(hList, LVM_INSERTCOLUMN, , (LPARAM)&col); col.iSubItem = ;
col.pszText = (LPTSTR)L"姓名";
col.cx = (int)(0.2*nListWith);
SendMessage(hList, LVM_INSERTCOLUMN, , (LPARAM)&col); col.iSubItem = ;
col.pszText = (LPTSTR)L"性别";
col.cx = (int)(0.15*nListWith);
SendMessage(hList, LVM_INSERTCOLUMN, , (LPARAM)&col); //循环加入行数据
   int i = 0;

    while (!m_Recordset->adoEOF)
  {
LVITEM lv = { };
lv.mask = LVCF_TEXT | LVCF_FM
;
lv.iItem = i;
        lv.iSubItem = ;

        TCHAR str[];
_stprintf_s(str, L"%s", (LPCTSTR)_bstr_t(m_Recordset->GetCollect(_T("ID"))));
lv.pszText = str;
SendMessage(hList, LVM_INSERTITEM, i, (LPARAM)&lv); lv.iSubItem = ;
_stprintf_s(str, L"%s", (LPCTSTR)_bstr_t(m_Recordset->GetCollect(_T("mName"))));
lv.pszText = str;
SendMessage(hList, LVM_SETITEMTEXT, i, (LPARAM)&lv); lv.iSubItem = ;
_stprintf_s(str, L"%s", (LPCTSTR)_bstr_t(m_Recordset->GetCollect(_T("mSex"))));
lv.pszText = str;
SendMessage(hList, LVM_SETITEMTEXT, i, (LPARAM)&lv); m_Recordset->MoveNext();
i++;
}
  //关闭记录集并释放资源
m_Recordset->Close();
m_Recordset.Release();
m_Recordset = NULL;
  
  
  //关闭数据库连接并释放资源
m_Connection->Close();
m_Connection.Release();
m_Connection = NULL;
     //释放环境
CoUninitialize();
}

我用的是Vs2017和Access2007数据库写的.

Win32 Sdk 连接Access数据库的更多相关文章

  1. 【.net 深呼吸】连接Access数据库应注意的几点

    本地数据库可以有Y种选择,比如Sqlite.SQL Server Express.SQL Local DB.SQL Server CE.Access等,本文老周选用比较著名的Access本地数据库,在 ...

  2. C#连接Access数据库(详解)

    做一个用VS2012的C#连接Access数据库的备忘, SQL数据库固然强大,有大微软的强力技术支持,LINQ的方便操作,但是如果写一个小程序对数据库方面没有什么大的要求的话,将来在数据库方面就可以 ...

  3. ASP.net分别连接SQLserver数据库与连接Access数据库精英版

    -------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...

  4. php连接Access数据库错误及解决方法

    <?php $connstr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("data.m ...

  5. php连接Access数据库的三种方法

    http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/1115/3524.html 虽然不是一个类但先放这儿吧 最近想把一个asp的网站改成 ...

  6. 三种php连接access数据库方法

    种是利用php的pdo,一种是odbc,com接口来与access数据库连接.利用pdo与access数据库连接 $path ="f:fontwww.jb51.netspiderresult ...

  7. 具体解释VB中连接access数据库的几种方法

    在VB中,连接ACCESS数据库的方法主要有以下三种 使用ADO对象,通过编写代码訪问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件高速创建数据库连接 有三种连接方法 ...

  8. C# 连接 Access 数据库

    c#连接Access 数据库需要System.Data, System.Data.OleDb using System.Data using System.Data.OleDb public OleD ...

  9. JSP连接access数据库

    一个用jsp连接Access数据库的代码. 要正确的使用这段代码,你需要首先在Access数据库里创建一username表,表里面创建两个字符型的字段,字段名分别为:uid,pwd,然后插入几条测试数 ...

随机推荐

  1. JDBC中的时间处理

    MySQL中常用的时间类有: java.sql.Date, Time, Timestamp 用的比较多的是ava.sql.Date和TimeStamp: 先看表结构 CREATE TABLE `t_u ...

  2. 2019-2020-1 20199328《Linux内核原理与分析》第八周作业

    笔记部分 2019/11/4 17:55:22 elf文件代码默认加载到0x8048000,然后是一段首部信息,然后到达程序的真实入口 正常的系统调用会先进入内核态->用户态->系统调用下 ...

  3. Spring Boot JPA的查询语句

    文章目录 准备工作 Containing, Contains, IsContaining 和 Like StartsWith EndsWith 大小写不敏感 Not @Query Spring Boo ...

  4. LVS+Keepalived 实现高可用负载均衡集群

    LVS+Keepalived  实现高可用负载均衡集群     随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效 ...

  5. 表达式求值--数据结构C语言算法实现

    这篇博客介绍的表达式求值是用C语言实现的,只使用了c++里面的引用. 数据结构课本上的一个例题,但是看起来很简单,实现却遇到了很多问题. 这个题需要构建两个栈,一个用来存储运算符OPTR, 一个用来存 ...

  6. 【Linux常见命令】wc命令

    wc - print newline, word, and byte counts for each file wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指 ...

  7. php private学习笔记

    类的权限修饰符,放在属性/方法的前面.用来说明属性/方法的权限特点. 三种权限修饰符 private  私有的 public   公共 protected  保护的 privata 的属性.方法只能在 ...

  8. mac OS 安装 nvm

    nvm官网 https://github.com/creationix/nvm nvm,node,npm之间的区别 nvm:nodejs 版本管理工具 一个 nvm 可以管理很多 node 版本和 n ...

  9. python操作ftp文件

    from ftplib import FTP ftp = FTP('ftp.abc.com') ftp.login(user='username', passwd='********') ftp.cw ...

  10. 通过express框架为前端提供api(数据),妈妈再也不用担心后端不给我数据了~

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 首先,确保自己安装了express框架. 没有安装的同学可以参照下面这篇博 ...