• 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 0;
    
        // 显示窗口
        ShowWindow(hwnd, SW_SHOW);
    
        // 更新窗口
        UpdateWindow(hwnd);
    
        // 消息循环
        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return 0;
    }
    // 在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 0; } case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CLOSE: if (MessageBox(hwnd, L"请问是否真的要关闭窗口?", L"窗口关闭询问", MB_YESNO) == IDYES) { DestroyWindow(hwnd); return 0; } else return 0; case WM_LBUTTONDOWN: { //MessageBox(hwnd, L"哎呀,我丫的被按了一下", TEXT("好舒服~"), MB_OK); return 0; } case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); DrawText(hdc, L"Hello world!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd, &ps); return 0; } 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, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); RECT rt; ::GetClientRect(hList, &rt); int nListWith = rt.right - 20;  //获得控件的宽度
    //插入列标题 LVCOLUMN col = { 0 }; col.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH; col.pszText = (LPTSTR)L"编号"; col.fmt = LVCFMT_LEFT; // 列文字排列样式,居左,中,右 col.cx = (int)(0.2*nListWith);// 列的宽度 col.iSubItem = 0; SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&col); col.iSubItem = 1; col.pszText = (LPTSTR)L"姓名"; col.cx = (int)(0.2*nListWith); SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&col); col.iSubItem = 2; col.pszText = (LPTSTR)L"性别"; col.cx = (int)(0.15*nListWith); SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&col); //循环加入行数据
       int i = 0;

    while (!m_Recordset->adoEOF)
      {
    LVITEM lv = { 0 };
    lv.mask
    = LVCF_TEXT | LVCF_FM
    ;
    lv.iItem
    = i;
            lv.iSubItem = 0;
    
            TCHAR str[256];
            _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 = 1;
            _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 = 2;
            _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数据库写的.

    签名:GreenLeaf1976
  • 相关阅读:
    MySQL Date函数的正确用法
    CentOS tree命令详解
    VMware虚拟机的CentOS无法上网的解决方法
    CentOS安装emacs24.2命令
    【复杂】CentOS 6.4下PXE+Kickstart无人值守安装操作系统
    CentOS定位、查找文件的命令
    CentOS查找目录或文件
    CentOS安装Emacs文本编辑器
    centos6.5的软件安装,用户管理等
    CentOS安装OpenOffice
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/12913603.html
Copyright © 2020-2023  润新知