关于c++ 数据库的问题

问题描述

关于c++ 数据库的问题

求大神帮忙看一下程序

初学数据库,东拼西凑了这么个程序,用的是vs2010
按条件查找,现在正在编按名称查找,结果总是运行过程中有错退出,
调试时发现是在m_pRecordset->Open处出错,
是这个open的参数写的有错吗?
麻烦大神帮忙改一下,感激不尽!!!!

 // DemoDlg.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "Demo.h"
#include "DemoDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialog Data
    //{{AFX_DATA(CAboutDlg)
    enum { IDD = IDD_ABOUTBOX };
    //}}AFX_DATA

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CAboutDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:
    //{{AFX_MSG(CAboutDlg)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    //{{AFX_MSG_MAP(CAboutDlg)
        // No message handlers
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg dialog

CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CDemoDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CDemoDlg)
        /*  

        */
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

    if (!SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection))))
    {
        m_pConnection = NULL;
        TRACE(_T("Database CreateInstance failed"));
    }

    if (!SUCCEEDED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
    {
        m_pRecordset = NULL;
        TRACE(_T("Recordset CreateInstance Failed!"));
    }

    //打开数据库
    CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= DataBase.mdb");      //
    if (!OpenDatabase(strConnect))
    {
        AfxMessageBox(_T("数据库打开失败。"));
        return;
    }

    //打开记录集
    if (!OpenRecordset(_T("SELECT * FROM file_info")))                                  //
    {
        AfxMessageBox(_T("记录集打开失败。"));
        return;
    }
}

CDemoDlg::~CDemoDlg()
{
    m_pRecordset->Close();
    m_pConnection->Close();
}

void CDemoDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CDemoDlg)
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
    //{{AFX_MSG_MAP(CDemoDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_FIND, OnFind)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg message handlers

BOOL CDemoDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon

    //初始化ListCtrl                                                             /////
    CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
    pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    pListCtrl->InsertColumn(1, _T("序号"), LVCFMT_CENTER, 60);
    pListCtrl->InsertColumn(2, _T("文件名"), LVCFMT_CENTER, 60);
    pListCtrl->InsertColumn(3, _T("类型"), LVCFMT_CENTER, 40);
    pListCtrl->InsertColumn(4, _T("时间"), LVCFMT_CENTER, 80);
    pListCtrl->InsertColumn(5, _T("保存路径"), LVCFMT_CENTER, 200);

    return TRUE;
}

void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDemoDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDemoDlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}

BOOL CDemoDlg::OpenDatabase(LPCTSTR lpszConnect, long nOptions)
{
    ASSERT(m_pConnection != NULL);
    ASSERT(lpszConnect != NULL);
    ASSERT(AfxIsValidString(lpszConnect));

    //打开数据库连接
    try
    {
        return SUCCEEDED(m_pConnection->Open(_bstr_t(lpszConnect),
            _T(""), _T(""),  nOptions));                                ////////////////
    }
    catch (_com_error& e)
    {
        TRACE(_T("%sn"), e.ErrorMessage());
        return FALSE;
    }
}

BOOL CDemoDlg::CloseDatabase()
{
    ASSERT(m_pConnection != NULL);

    //关闭数据库连接
    try
    {
        if (m_pConnection->State & adStateOpen)
        {
            return SUCCEEDED(m_pConnection->Close());
        }
        else
        {
            return TRUE;
        }
    }
    catch (_com_error& e)
    {
        TRACE(_T("%sn"), e.ErrorMessage());
        return FALSE;
    }
}

BOOL CDemoDlg::OpenRecordset(LPCTSTR lpszSource, long nCursorType, long nLockType, long nOptions)
{
    ASSERT(m_pConnection != NULL);
    ASSERT(m_pRecordset != NULL);
    ASSERT(lpszSource != NULL);
    ASSERT(AfxIsValidString(lpszSource));

    //打开记录集
    try
    {
        return (SUCCEEDED(m_pRecordset->Open(_variant_t(lpszSource),
                                        m_pConnection.GetInterfacePtr(),
                                        (CursorTypeEnum)nCursorType,
                                        (LockTypeEnum)nLockType,
                                        nOptions)));
    }
    catch(_com_error e)
    {
        TRACE(_T("%sn"), e.ErrorMessage());
        return FALSE;
    }
}

BOOL CDemoDlg::CloseRecorset()
{
    ASSERT(m_pRecordset != NULL);

    //关闭记录集
    try
    {
        if (m_pRecordset->State & adStateOpen)
        {
            return SUCCEEDED(m_pRecordset->Close());
        }
        else
        {
            return TRUE;
        }
    }
    catch (_com_error e)
    {
        TRACE(_T("%sn"), e.ErrorMessage());
        return FALSE;
    }
}

void CDemoDlg::OnFind()
{
    if (!(m_pRecordset->State & adStateOpen))
    {
        AfxMessageBox((_T("记录集未打开。")));
        return;

    }

    //查找条件
    CString strCriteria = _T("");
    CString strName = _T("");
    CString strtype = _T("");
    CString strtime = _T("");

    GetDlgItemText(IDC_NAME, strName);
    GetDlgItemText(IDC_TYPE, strtype);
    GetDlgItemText(IDC_TIME, strtime);

    if(strName != _T(""))
    strCriteria.Format(_T("NAME like '*%s*'"),strName);     

    else return;

    //查找记录集
    CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
    pListCtrl->DeleteAllItems();
    if (m_pRecordset->BOF && m_pRecordset->adoEOF)
    {
        return;
    }
    m_pRecordset->MoveFirst();

    ///////////

    m_pRecordset->Open(_bstr_t(strCriteria),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockBatchOptimistic,adCmdText);

    //////////

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    int n = 0;
    while (!m_pRecordset->adoEOF)
    {
        _variant_t varValue;
        CString strName = _T("");
        CString strtime = _T("");
        CString strtype = _T("");
        CString strpath = _T("");

        varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
        if (varValue.vt != VT_NULL)
        {
            strName = varValue.bstrVal;
        }
        else
        {
            strName = _T("");
        }

        varValue = m_pRecordset->GetCollect(_variant_t(_T("TYPE")));
        if (varValue.vt != VT_NULL)
        {
            strtype = varValue.bstrVal;
        }
        else
        {
            strtype = _T("");
        }

        varValue = m_pRecordset->GetCollect(_variant_t(_T("TIME")));
        if (varValue.vt != VT_NULL)
        {
            strtime = varValue.bstrVal;
        }
        else
        {
            strtime = _T("");
        }

        varValue = m_pRecordset->GetCollect(_variant_t(_T("PATH")));
        if (varValue.vt != VT_NULL)
        {
            strpath = varValue.bstrVal;
        }
        else
        {
            strpath = _T("");
        }

        //刷新ListCtrl
        CString strText = _T("");
        strText.Format(_T("%d"), n + 1);
        pListCtrl->InsertItem(n, strText);
        strText.Format(_T("%s"), strName);
        pListCtrl->SetItemText(n, 1, strText);
        strText.Format(_T("%s"), strtype);
        pListCtrl->SetItemText(n, 2, strText);
        strText.Format(_T("%s"),strtime);
        pListCtrl->SetItemText(n, 3, strText);
        strText.Format(_T("%s"), strpath);
        pListCtrl->SetItemText(n, 4, strText);
        n++;

        ////////////////////////////
        m_pRecordset->MoveNext();
        ////////////////////////////
    }
    if(n==0)
    {
            pListCtrl->InsertItem(n,"NULL!");
    }
}

解决方案

sql查出结果了吗,记录集访问出错。

解决方案二:

sql查出结果了吗,记录集访问出错。

解决方案三:

sql查出结果了吗,记录集访问出错

时间: 2024-09-27 04:07:52

关于c++ 数据库的问题的相关文章

传统应用层逻辑分库DB迁移阿里云DRDS+RDS分布式数据库

随着互联网快速发展,我们的结构化关系数据库在高并发.海量数据的情况下面临单机扩展性问题,首先是单机数据库容量瓶颈,单机数据库在业务高速增长的情况下依赖硬件升级也会到达天花板,并且使用成本变得非常高,而且扩展性的复杂性也是比较高,传统数据库扩容往往意味着服务中断,很难做到业务无感知或者少感知.     通过数据水平切换来现实分库可以帮助提升数据库整体性能.横向扩展性,切分后有效的降低了单台机器的访问负载,同时最大限度的降低了数据库服务节点宕机后的损失.      传统应用业务层逻辑或组件分库实现方

300+篇运维、数据库等实战资料免费下载(文章+PDF+视频,持续更新)

2017年已过去一半,在此小编为大家精心整理了2017上半年热点事件解析.实战技术资料以及特别策划短视频系列,希望可以帮助大家更深入地回顾上半年的技术热点,并储备更充足的技术干粮继续2017的下一半. PART 1 峰会回顾资料 云栖大会 [上海云栖大会]2017云栖大会上海峰会资料合计(现场视频+PDF下载) [成都云栖大会]2017云栖大会成都峰会资料合计(现场视频+PDF下载) [南京云栖大会]2017云栖大会南京峰会资料合计(现场视频+PDF下载) 技术峰会 [运维/DevOps峰会]

实现php上传图片到指定位置路径保存到数据库

 本文为大家介绍下php上传图片到指定位置路径保存到数据库的具体实现,感兴趣的朋友不要错过 1.conn.php  代码如下: <?  $host="localhost"; //数据库服务器名称  $user="root"; //用户名  $pwd="1721"; //密码  $conn=mysql_connect($host,$user,$pwd);  mysql_query("SET  character_set_connec

关系型数据库设计-用户表和订单表 怎么设计

问题描述 关系型数据库设计-用户表和订单表 怎么设计 如果一个电商用关系型数据库, 假设有一个用户表,有一个订单表,订单表中有一个用户ID 的字段, 那查询某个用户的所有订单时岂不是要遍历整个订单表?没有在互联网公司工作过,不知道是怎么设计的,求解答. 解决方案 数据库可以使用索引,对userid列做了索引,再查询的时候就不需要全表遍历.这和互联网公司没有关系,基本的数据库常识你都没学会.

请教 自己写的mysqli 操作数据库的类 DB.class.php

问题描述 请教 自己写的mysqli 操作数据库的类 DB.class.php 类是这样写的: <?php class DB{ //属性 private $host; private $port; private $name; private $pass; private $dbname; private $prefix; //设置表前缀 private $charset;//设置字符集 private $mysqli; //设置mysqli类对象 //设置构造函数 public functio

导入-附加数据库对于服务器失败 5120

问题描述 附加数据库对于服务器失败 5120 我已经将SQL文件属性完全控制了还是没法附加,是没有获取管理员权限才出现的问题,还是我要导入的文件适用于2000版, 我的是SQL server2008版的所以不行呢? 解决方案 SQL Server 2008完全可以附加2000的数据库. 参考这个试试:http://zhidao.baidu.com/link?url=Bc6C53XPUm26C0IL6_qB_bVLd-QZgouZXDThB3AKC-amGWT3YSgi2HdDd3cAiGZw9m

h2 删数据 sql优化-h2数据库删除数据速度问题

问题描述 h2数据库删除数据速度问题 想删除h2数据库中某个表部分数据,但该表中有八千万左右数据,如何删除符合要求的一小部分数据呢?比如删除name以abc开头的数据,因为h2数据库我是通过web打开查看的,普通的Sql语句要执行很长很长时间,而且经常报内存不足,各位大神有没有什么优化的方法???求指点呀 解决方案 http://www.lc365.net/blog/b/32424/ 解决方案二: 因为没分了,不过谢谢能回答,对我其他的一些地方有帮助

在PHP中使用DBM作为数据库

数据|数据库 在众多CGI语言中,PHP以其简单,快速的优点开始逐渐成长,使用PHP开发程序的人也越来越多,而一般PHP用的数据库就两种:文本以及MYSQL.文本数据库读.写速度慢,当数据到达一定量时就会大大的降低速度乃至崩溃!而MYSQL虽然速度快,功能强大,不过不是一般的业余爱号者所能用得起的,因为一般的免费空间都不支持MYSQL(有主机的朋友就不要往下看了) 今天笔者介绍的是DBM数据库,DBM是柏克莱大学发展的文件/文本型数据库,在BSD系统中已经安装完毕,即使没有安装,在PHP4.03

PHP中使用DBM作为数据库(包括排序)

排序|数据|数据库 在众多CGI语言中,PHP以其简单,快速的优点开始逐渐成长,使用PHP开发程序的人也越来越多,而一般PHP用的数据库就两种:文本以及MYSQL.文本数据库读.写速度慢,当数据到达一定量时就会大大的降低速度乃至崩溃!而MYSQL虽然速度快,功能强大,因为一般的免费空间都不支持MYSQL,因为一般的免费空间都不支持MYSQL(有主机的朋友就不要往下看了) 今天笔者介绍的是DBM数据库,DBM是柏克莱大学发展的文件/文本型数据库,在BSD系统中已经安装完毕,即使没有安装,在PHP4

asp.net中上传图片文件实现防伪图片水印并写入数据库

复制代码 代码如下:// 涉及命名空间 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Web; using Syste