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,然后插入几条测试数 ...
随机推荐
- tensorflow1.0 构建lstm做图片分类
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #this is data mni ...
- 二、Go语言开发环境安装与编写第一个Hello World
本系列文章均为学习过程中记录的笔记,欢迎和我一起来学习Go语言. 全文使用环境如下: Go语言版本:1.13 操作系统:deepin 使用工具:Goland开发工具 Go语言追溯历史 Go语言2009 ...
- PHP--关于上传文件大小的问题
参考:https://www.cnblogs.com/jianqingwang/p/5863960.html https://blog.csdn.net/u013168253/article/deta ...
- 点击表头取下标&js时间转时间戳
1.Date.parse(new Date("2017-7-31")); 2.$("th").eq(this.cellIndex); // 3.end($ar ...
- Nagios基本搭建
Nagios简述: 1.一款用来监视系统和网络的开源软件 2.利用其从多的插件实现对本机和远端服务的监控 3.当被监控对象异常时,回及时向管理员警告 4.提供一批预设好的监控插件,用户可以直接调用 5 ...
- java并发中CountDownLatch的使用
文章目录 主线程等待子线程全都结束之后再开始运行 等待所有线程都准备好再一起执行 停止CountdownLatch的await java并发中CountDownLatch的使用 在java并发中,控制 ...
- Libra教程之:执行Transactions
文章目录 Transactions是什么 Transactions运行的基础条件 Transactions的结构 执行Transactions Transactions是什么 我们讲到了Libra是一 ...
- linux系统的简单配置
配置网卡:vim /etc/sysconfig/network-scripts/网卡名称 ifcfg-xxxx ##文件名称 DEVICE=xxx ##设备名称 BOOTPROTO=dhcp|st ...
- 尤雨溪的vue怎么学,应该从vue-cli开始,为什么?
带手机验证码登陆, 带全套购物车系统 带数据库 前后端分离开发 带定位用户功能 数据库代码为本地制作好了 带支付宝支付系统 带django开发服务器接口教程 地址: https://www.dua ...
- App《最美诗词》开发 -- Java后端(整合框架)
本人一直是致力于Android开发,由于我们三位Android开发者 @老蔡 @不肯过江东 打算一起开发Android App<最美诗词>,需要服务器端的接口支持,所以便兼职做起了后端的代 ...