/*************************************************************
*** 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. Web前端三大主流框架是什么?Web前端前景与就业形势

    近十年以来,IT行业发展火热,衍生了很多新职业,例如UI设计师.开发工程师.软件测试工程师等等,在众多备受瞩目的新生职业中,Web前端工程师是其中的一员.那么Web前端三大主流框架是什么呢? 一.We ...

  2. 一篇文章掌握网页解析神器——xpath

    学爬虫不会xpath解析数据? 今天老师带你一堂课带你从零开始精通xpath,从此轻松提取网页信息. 我们在爬虫的过程中,经常会遇到html字符串数据,很多我们需要的数据不是作为标签的文本就是作标签的 ...

  3. 笔记-VUE滚动加载更多数据

    来源:https://blog.csdn.net/qq_17281881/article/details/87342403 VUE滚动加载更多数据 data() { return { loading: ...

  4. PHP生成桌面快捷方式,保存一个网页至桌面上成为快捷方式

    header("Content-Type: application/octet-stream; charset=utf8"); header("Content-Dispo ...

  5. [QT] QProcess finished 信号,关联的 slot 必须检查返回码

    void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)

  6. Add text to 'Ready Page' in Inno Setup

    https://stackoverflow.com/questions/1218411/add-text-to-ready-page-in-inno-setup

  7. Django中search fields报错:related Field has invalid lookup: icontains

    models.py 文件 # coding:utf8from django.db import models class Book(models.Model):        name = model ...

  8. 第三方库 正则表达式re模块

    正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式通常缩写成“regex”,单数有regexp.regex,复数有regexps.regexes.regexen. 正则表达式是对字 ...

  9. 整整 Java 线程池

    为什么用线程池 用官方文档来说,线程池解决了两个问题: 一是在执行大量的异步任务时,因为线程池减少了任务开始前的准备工作,如频繁创建线程,启动线程等工作,提升了性能表现:二是提供了一种绑定资源和管理资 ...

  10. TypeScript 2.0 正式发布

    9 月 22 日,TypeScript 2.0 正式发布了. TypeScript 是微软开发的开源的编程语言,主要负责人是 C# 之父 Anders Hejlsberg. TypeScript 成功 ...