Win32 Sdk 连接Access数据库
/*************************************************************
*** 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数据库的更多相关文章
- 【.net 深呼吸】连接Access数据库应注意的几点
本地数据库可以有Y种选择,比如Sqlite.SQL Server Express.SQL Local DB.SQL Server CE.Access等,本文老周选用比较著名的Access本地数据库,在 ...
- C#连接Access数据库(详解)
做一个用VS2012的C#连接Access数据库的备忘, SQL数据库固然强大,有大微软的强力技术支持,LINQ的方便操作,但是如果写一个小程序对数据库方面没有什么大的要求的话,将来在数据库方面就可以 ...
- ASP.net分别连接SQLserver数据库与连接Access数据库精英版
-------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...
- php连接Access数据库错误及解决方法
<?php $connstr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("data.m ...
- php连接Access数据库的三种方法
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/1115/3524.html 虽然不是一个类但先放这儿吧 最近想把一个asp的网站改成 ...
- 三种php连接access数据库方法
种是利用php的pdo,一种是odbc,com接口来与access数据库连接.利用pdo与access数据库连接 $path ="f:fontwww.jb51.netspiderresult ...
- 具体解释VB中连接access数据库的几种方法
在VB中,连接ACCESS数据库的方法主要有以下三种 使用ADO对象,通过编写代码訪问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件高速创建数据库连接 有三种连接方法 ...
- C# 连接 Access 数据库
c#连接Access 数据库需要System.Data, System.Data.OleDb using System.Data using System.Data.OleDb public OleD ...
- JSP连接access数据库
一个用jsp连接Access数据库的代码. 要正确的使用这段代码,你需要首先在Access数据库里创建一username表,表里面创建两个字符型的字段,字段名分别为:uid,pwd,然后插入几条测试数 ...
随机推荐
- php 推荐密码加密的方法
password_hash() 函数 password_hash() 函数用于创建密码的散列(hash) PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默认). ...
- MinIO 的分布式部署
目录 1 前言 2 分布式存储可靠性常用方法 2.1 冗余 2.2 校验 3 MinIO存储机制 3.1 概念理解 3.2 纠删码EC(Erasure Code) 3.3 存储形式 4 部署实践 4. ...
- jenkins及Maven介绍
一.环境介绍 随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.Jenkins自动化部署可以解决集成.测试.部署等重复性的 ...
- java 之 servlet简介
Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...
- Linux中的常用快捷键
tab 命令或路径补全键,linux里面最有用的快捷键,如果tab不到路径或命令,就代表没有这个路径或者命令,还有可能是权限不对 ctrl+c 终止当前任务命令或程序 ctrl+d 退出当前用户环境, ...
- 1309:【例1.6】回文数(Noip1999)
传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1309 [题目描述] 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文 ...
- includes与indexOf
indexOf(a,b)是在es6之前常用的判断数组/字符串内元素是否存在的api,接收两个参数,第一个a代表要被查找的元素,必填.第二个代表从数组的某个坐标开始查找,可选 在数组中 通过indexO ...
- Jaba_Web--JDBC 删除记录操作模板
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- HTML(表单标签)
<form> 标签 用于为用户输入创建 HTML 表单 表单能够包含 input 元素,比如:文本字段.复选框.单选框.提交按钮等等 表单用于向服务器传输数据 action 属性:规定当提 ...
- 吃零食 csust oj 贪心
吃零食 桌上有n袋零食,不同的零食会有不同的美味程度wi和腐坏程度di,每种零食在一单位时间内美味程度都会下降di,但是不会降到0以下. qwb每一单位时间可以吃掉一袋零食.现在qwb想要在吃完所有零 ...