c++连数据库查询

连接数据库:

// Project2Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "Project2.h"
#include "Project2Dlg.h"
#include "xitong.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <afxdb.h>
extern CDatabase m_db;
/
// 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()

/
// CProject2Dlg dialog

CProject2Dlg::CProject2Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CProject2Dlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CProject2Dlg)
    m_mima = _T("");
    m_shujuyuan = _T("");
    m_yonghuming = _T("");
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CProject2Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CProject2Dlg)
    DDX_Text(pDX, IDC_mima, m_mima);
    DDX_Text(pDX, IDC_shujuyuan, m_shujuyuan);
    DDX_Text(pDX, IDC_yonghuming, m_yonghuming);
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CProject2Dlg, CDialog)
    //{{AFX_MSG_MAP(CProject2Dlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(queren, Onqueren)
    ON_BN_CLICKED(quxiao, Onquxiao)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CProject2Dlg message handlers

BOOL CProject2Dlg::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
   
    // TODO: Add extra initialization here
   
    return TRUE;  // return TRUE  unless you set the focus to a control
}

void CProject2Dlg::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 CProject2Dlg::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 CProject2Dlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}

void CProject2Dlg::Onqueren()
{
    // TODO: Add your control notification handler code here
    UpdateData(true);
    CString strConnect;
    strConnect.Format("DSN=%s;UID=%s;PWD=%s",m_shujuyuan,m_yonghuming,m_mima);
    TRY
    {
        m_db.OpenEx(strConnect,CDatabase::noOdbcDialog);
        //CStudent ab;//调用下一个对话框模块
        xitong ab;
        ab.DoModal();
        //ab.DoModal();

    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox(ex->m_strError);
        AfxMessageBox(ex->m_strStateNativeOrigin);
    }
    AND_CATCH(CMemoryException,pEx)
    {
        pEx->ReportError();
        AfxMessageBox("memory exception");
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox(szError);
    }
    END_CATCH
   
  CDialog::OnOK();
}

void CProject2Dlg::Onquxiao()
{
    // TODO: Add your control notification handler code here
    OnOK();
}

显示全部:

// xitong.cpp : implementation file
//

#include "stdafx.h"
#include "Project2.h"
#include "xitong.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <afxdb.h>
extern CDatabase m_db;
/
// xitong dialog


xitong::xitong(CWnd* pParent /*=NULL*/)
    : CDialog(xitong::IDD, pParent)
{
    //{{AFX_DATA_INIT(xitong)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
}


void xitong::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(xitong)
    DDX_Control(pDX, IDC_xianshi, m_xianshi);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(xitong, CDialog)
    //{{AFX_MSG_MAP(xitong)
    ON_BN_CLICKED(quxiao, Onquxiao)
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// xitong message handlers

void xitong::OnPaint()
{
    CPaintDC dc(this); // device context for painting
   
    // TODO: Add your message handler code here
   
    // Do not call CDialog::OnPaint() for painting messages
}

BOOL xitong::OnInitDialog()
{
    CDialog::OnInitDialog();
    InitControl();
    InitCtrlData();
    // TODO: Add extra initialization here
   
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

void xitong::Onquxiao()
{
    // TODO: Add your control notification handler code here
    OnOK();
}



void xitong::InitControl()
{
    DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES

|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
    m_xianshi.SetExtendedStyle(dwExStyle);

m_xianshi.InsertColumn(0,"id",LVCFMT_CENTER,50);
m_xianshi.InsertColumn(1,"年月日",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(2,"称样重",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(3,"空瓷重量",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(4,"灼后重量",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(5,"结果",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(6,"备注",LVCFMT_CENTER,100);

}


void xitong::InitCtrlData()
{
    if(!m_db.IsOpen()){

        MessageBox("数据库未打开");
        return;
    }
    TRY{
        CRecordset rs(&m_db);//类对象代表一个从数据源中获取的纪录集
        //打开所有的用户信息记录
        CString sql;
        sql.Format("select * from bookinfo");
        rs.Open(CRecordset::dynaset, sql);
        while (!rs.IsEOF())
        {
            int id;
            CString nianyueri,beizhu,chengyang,kongci,zhuohou,jieguo;
            CDBVariant var;
            //获取客户信息ID字段值
            rs.GetFieldValue((short)0, var, SQL_C_SLONG);
            if (var.m_dwType != DBVT_NULL)   
                id = var.m_iVal;
            var.Clear();           
            //获取基本信息
            rs.GetFieldValue(1,nianyueri);
            rs.GetFieldValue(2,chengyang);
            rs.GetFieldValue(3,kongci);
            rs.GetFieldValue(4,zhuohou);
            rs.GetFieldValue(5,jieguo);
            rs.GetFieldValue(6,beizhu);
           
            InsertCRInfoItem(id,nianyueri,chengyang,kongci,zhuohou,jieguo,beizhu);
            rs.MoveNext();
        }
        rs.Close();
   
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);       
    }
    AND_CATCH(CMemoryException,pEx)
    {
        pEx->ReportError();
        AfxMessageBox ("memory exception");
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
    }
    END_CATCH              

}
void xitong::InsertCRInfoItem(int id, CString nianyueri,CString chengyang, CString kongci,CString zhuohou,CString jieguo,CString beizhu)
{
    int nIndex = m_xianshi.GetItemCount();
    LV_ITEM lvItem;
    lvItem.mask = LVIF_TEXT ;   
    lvItem.iItem = nIndex;                //行数
    lvItem.iSubItem = 0;
        CString temp ;
    temp.Format("%d",id);
    lvItem.pszText = (char*)(LPCTSTR)temp;        //第一列
    //在最后一行插入记录值.
    m_xianshi.InsertItem(&lvItem);   
    //设置该行的其他列的值.   
    m_xianshi.SetItemText(nIndex,1,nianyueri);
    m_xianshi.SetItemText(nIndex,2,chengyang);   
    m_xianshi.SetItemText(nIndex,3,kongci);
    m_xianshi.SetItemText(nIndex,4,zhuohou);
    m_xianshi.SetItemText(nIndex,5,jieguo);
    m_xianshi.SetItemText(nIndex,6,beizhu);
}

 

插入:

// tianjia.cpp : implementation file
//

#include "stdafx.h"
#include "bookmanage.h"
#include "tianjia.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <afxdb.h>
extern CDatabase m_db;
/
// tianjia dialog


tianjia::tianjia(CWnd* pParent /*=NULL*/)
    : CDialog(tianjia::IDD, pParent)
{
    //{{AFX_DATA_INIT(tianjia)
    m_shuhao = _T("");
    m_shuming = _T("");
    m_zuozhe = _T("");
    m_shifouzaiguan = _T("");
    //}}AFX_DATA_INIT
}


void tianjia::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(tianjia)
    DDX_Control(pDX, IDC_xianshi, m_xianshi);
    DDX_Text(pDX, IDC_shuhao, m_shuhao);
    DDX_Text(pDX, IDC_shuming, m_shuming);
    DDX_Text(pDX, IDC_zuozhe, m_zuozhe);
    DDX_Text(pDX, IDC_shifouzaiguan, m_shifouzaiguan);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(tianjia, CDialog)
    //{{AFX_MSG_MAP(tianjia)
    ON_BN_CLICKED(IDC_queren, Onqueren)
    ON_BN_CLICKED(IDC_quxiao, Onquxiao)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// tianjia message handlers
BOOL tianjia::OnInitDialog()
{
    CDialog::OnInitDialog();
    InitControl();
    InitCtrlData();
    GetDlgItem(IDC_shifouzaiguan)->EnableWindow(TRUE);
    // TODO: Add extra initialization here
   
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

void tianjia::InitControl()
{
    DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
    m_xianshi.SetExtendedStyle(dwExStyle);

m_xianshi.InsertColumn(0,"ID",LVCFMT_CENTER,50);
m_xianshi.InsertColumn(1,"书号",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(2,"书名",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(3,"作者",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(4,"学号",LVCFMT_CENTER,100);
}


void tianjia::InitCtrlData()
{
     GetDlgItem(IDC_shifouzaiguan)->EnableWindow(TRUE);
    if(!m_db.IsOpen()){

        MessageBox("数据库未打开");
        return;
    }
    TRY{
        CRecordset rs(&m_db);//类对象代表一个从数据源中获取的纪录集
        //打开所有的用户信息记录
        rs.Open(CRecordset::dynaset, "select * from bookinfo order by id");
        while (!rs.IsEOF())
        {
            int id;
            CString number,name,writter,ku;
            CDBVariant var;
            //获取客户信息ID字段值
            rs.GetFieldValue((short)0, var, SQL_C_SLONG);
            if (var.m_dwType != DBVT_NULL)   
                id = var.m_iVal;
            var.Clear();           
            //获取姓名字段值
            rs.GetFieldValue(1,number);
            rs.GetFieldValue(2,name);
            //获取分数字段值
            rs.GetFieldValue(3,writter);
            rs.GetFieldValue(4,ku);
           
            InsertCRInfoItem(id,number,name,writter,ku);
            rs.MoveNext();
        }
        rs.Close();
   
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);       
    }
    AND_CATCH(CMemoryException,pEx)
    {
        pEx->ReportError();
        AfxMessageBox ("memory exception");
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
    }
    END_CATCH              

}
void tianjia::InsertCRInfoItem(int id, CString number,CString name, CString writter,CString ku)
{
    int nIndex = m_xianshi.GetItemCount();
    LV_ITEM lvItem;
    lvItem.mask = LVIF_TEXT ;   
    lvItem.iItem = nIndex;                //行数
    lvItem.iSubItem = 0;
        CString temp ;
    temp.Format("%d",id);
    lvItem.pszText = (char*)(LPCTSTR)temp;        //第一列
    //在最后一行插入记录值.
    m_xianshi.InsertItem(&lvItem);   
    //设置该行的其他列的值.   
    m_xianshi.SetItemText(nIndex,1,number);
    m_xianshi.SetItemText(nIndex,2,name);   
    m_xianshi.SetItemText(nIndex,3,writter);
    m_xianshi.SetItemText(nIndex,4,ku);
}
void tianjia::Onqueren()
{
    // TODO: Add your control notification handler code here
    //从界面控件中获取信息更新到控件变量中.
    CString tmp;
    tmp="在馆";
    if(!UpdateData())
        return;
    if(m_shuming.IsEmpty())
    {
        AfxMessageBox("书名不能为空!");
        return;
    }
    TRY{
        m_db.BeginTrans();
        CRecordset rs(&m_db);
        CString sql;
        CString sql1;
        //获取新的客户ID值.
         rs.Open(CRecordset::dynaset,
             "Select  max(id) from bookinfo");
        int newID = 1;
         if(!rs.IsEOF())
        {
             CDBVariant var;
             rs.GetFieldValue((short)0, var, SQL_C_SLONG);
             if (var.m_dwType != DBVT_NULL)   
            {   
                newID = var.m_iVal+1;
                var.Clear();
            }

        }

        //插入新的客户信息记录.
          sql.Format("Insert into bookinfo(id,number,name,writter,ku) VALUES(%d,'%s','%s','%s','%s')",newID,m_shuhao,m_shuming,m_zuozhe,tmp);
          m_db.ExecuteSQL(sql);
          sql1.Format("Insert into jiehuaninfo (number,id) VALUES ('%s',%d)",m_shuhao,newID);
         
          m_db.ExecuteSQL(sql1);
          rs.Close();
        //向界面中插入新的客户信息.
        InsertCRInfoItem(newID,m_shuhao,m_shuming,m_zuozhe,tmp);
        m_db.CommitTrans();
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);   
        m_db.Rollback();
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
        m_db.Rollback();
    }
    END_CATCH               
   
}

void tianjia::Onquxiao()
{
    // TODO: Add your control notification handler code here
    OnOK();
}


删除:

// shanchu.cpp : implementation file
//

#include "stdafx.h"
#include "bookmanage.h"
#include "shanchu.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <afxdb.h>
extern CDatabase m_db;
/
// shanchu dialog


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


void shanchu::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(shanchu)
    DDX_Control(pDX, IDC_xianshi, m_xianshi);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(shanchu, CDialog)
    //{{AFX_MSG_MAP(shanchu)
    ON_BN_CLICKED(IDC_quxiao, Onquxiao)
    ON_BN_CLICKED(IDC_shanchu, Onshanchu)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// shanchu message handlers
BOOL shanchu::OnInitDialog()
{
    CDialog::OnInitDialog();
    InitControl();
    InitCtrlData();
    // TODO: Add extra initialization here
   
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

void shanchu::Onquxiao()
{
    // TODO: Add your control notification handler code here
    OnOK();
}



void shanchu::InitControl()
{
    DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
    m_xianshi.SetExtendedStyle(dwExStyle);

m_xianshi.InsertColumn(0,"ID",LVCFMT_CENTER,50);
m_xianshi.InsertColumn(1,"书号",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(2,"书名",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(3,"作者",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(4,"是否在库",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(5,"借出者",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(6,"借出日期",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(7,"学号",LVCFMT_CENTER,100);
}


void shanchu::InitCtrlData()
{
    if(!m_db.IsOpen()){

        MessageBox("数据库未打开");
        return;
    }
    TRY{
        CRecordset rs(&m_db);//类对象代表一个从数据源中获取的纪录集
        //打开所有的用户信息记录
        rs.Open(CRecordset::dynaset, "select * from bookinfo,jiehuaninfo where bookinfo.number=jiehuaninfo.number ");
        while (!rs.IsEOF())
        {
            int id;
            CString number,name,writter,ku,jiechuzhe,borrowdate,huandate;
            CDBVariant var;
            //获取客户信息ID字段值
            rs.GetFieldValue((short)0, var, SQL_C_SLONG);
            if (var.m_dwType != DBVT_NULL)   
                id = var.m_iVal;
            var.Clear();           
            //获取姓名字段值
            rs.GetFieldValue(1,number);
            rs.GetFieldValue(2,name);
            //获取分数字段值
            rs.GetFieldValue(3,writter);
            rs.GetFieldValue(4,ku);
            rs.GetFieldValue(5,jiechuzhe);
            rs.GetFieldValue(6,borrowdate);
            rs.GetFieldValue(7,huandate);
            InsertCRInfoItem(id,number,name,writter,ku,jiechuzhe,borrowdate,huandate);
            rs.MoveNext();
        }
        rs.Close();
   
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);       
    }
    AND_CATCH(CMemoryException,pEx)
    {
        pEx->ReportError();
        AfxMessageBox ("memory exception");
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
    }
    END_CATCH              

}
void shanchu::InsertCRInfoItem(int id, CString number,CString name, CString writter,CString ku,CString jiechuzhe,CString borrowdate,CString huandate)
{
    int nIndex = m_xianshi.GetItemCount();
    LV_ITEM lvItem;
    lvItem.mask = LVIF_TEXT ;   
    lvItem.iItem = nIndex;                //行数
    lvItem.iSubItem = 0;
        CString temp ;
    temp.Format("%d",id);
    lvItem.pszText = (char*)(LPCTSTR)temp;        //第一列
    //在最后一行插入记录值.
    m_xianshi.InsertItem(&lvItem);   
    //设置该行的其他列的值.   
     m_xianshi.SetItemText(nIndex,1,number);
    m_xianshi.SetItemText(nIndex,2,name);   
    m_xianshi.SetItemText(nIndex,3,writter);
    m_xianshi.SetItemText(nIndex,4,ku);
    m_xianshi.SetItemText(nIndex,5,jiechuzhe);
    m_xianshi.SetItemText(nIndex,6,borrowdate);
    m_xianshi.SetItemText(nIndex,7,huandate);
}


void shanchu::Onshanchu()
{
    // TODO: Add your control notification handler code here
     int nItem = m_xianshi.GetNextItem(-1, LVNI_SELECTED);
    //如果没有选择要删除的纪录,返回.
    if(nItem == -1){

        AfxMessageBox("没有选择要删除的客户信息");
        return;
    }   
    //从列表框控件中获取选择的客户信息.
    int lid = atoi(m_xianshi.GetItemText(nItem,0));       
    TRY{
        m_db.BeginTrans();
        CString deletedSql;
        CString deletedSql1;
        //删除客户信息
        deletedSql1.Format("delete from jiehuaninfo where id = %d",lid);
        m_db.ExecuteSQL(deletedSql1);
        deletedSql.Format("delete from bookinfo where id = %d",lid);
        m_db.ExecuteSQL(deletedSql);

        //删除界面上的数据
        m_xianshi.DeleteItem(nItem);
        m_db.CommitTrans();
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);       
        m_db.Rollback();
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
        m_db.Rollback();
    }
    END_CATCH
}

修改:

// update.cpp : implementation file
//

#include "stdafx.h"
#include "bookmanage.h"
#include "update.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <afxdb.h>
extern CDatabase m_db;
/
// update dialog


update::update(CWnd* pParent /*=NULL*/)
    : CDialog(update::IDD, pParent)
{
    //{{AFX_DATA_INIT(update)
    m_shifouzaiguan = _T("");
    m_shuhao = _T("");
    m_shuming = _T("");
    m_zuozhe = _T("");
    //}}AFX_DATA_INIT
}


void update::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(update)
    DDX_Control(pDX, IDC_xianshi, m_xianshi);
    DDX_Text(pDX, IDC_shifouzaiguan, m_shifouzaiguan);
    DDX_Text(pDX, IDC_shuhao, m_shuhao);
    DDX_Text(pDX, IDC_shuming, m_shuming);
    DDX_Text(pDX, IDC_zuozhe, m_zuozhe);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(update, CDialog)
    //{{AFX_MSG_MAP(update)
    ON_BN_CLICKED(IDC_queren, Onqueren)
    ON_BN_CLICKED(IDC_quxiao, Onquxiao)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// update message handlers
BOOL update::OnInitDialog()
{
    CDialog::OnInitDialog();
    InitControl();
    InitCtrlData();
    // TODO: Add extra initialization here
   
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}


void update::Onquxiao()
{
    // TODO: Add your control notification handler code here
    OnOK();
}

void update::InitControl()
{
    DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
    m_xianshi.SetExtendedStyle(dwExStyle);

m_xianshi.InsertColumn(0,"ID",LVCFMT_CENTER,50);
m_xianshi.InsertColumn(1,"书号",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(2,"书名",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(3,"作者",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(4,"是否在库",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(5,"借出者",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(6,"借出日期",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(7,"学号",LVCFMT_CENTER,100);
}


void update::InitCtrlData()
{
    if(!m_db.IsOpen()){

        MessageBox("数据库未打开");
        return;
    }
    TRY{
        CRecordset rs(&m_db);//类对象代表一个从数据源中获取的纪录集
        //打开所有的用户信息记录
        rs.Open(CRecordset::dynaset, "select * from bookinfo,jiehuaninfo where bookinfo.number=jiehuaninfo.number ");
        while (!rs.IsEOF())
        {
            int id;
            CString number,name,writter,ku,jiechuzhe,borrowdate,huandate;
            CDBVariant var;
            //获取客户信息ID字段值
            rs.GetFieldValue((short)0, var, SQL_C_SLONG);
            if (var.m_dwType != DBVT_NULL)   
                id = var.m_iVal;
            var.Clear();           
            //获取姓名字段值
            rs.GetFieldValue(1,number);
            rs.GetFieldValue(2,name);
            //获取分数字段值
            rs.GetFieldValue(3,writter);
            rs.GetFieldValue(4,ku);
            rs.GetFieldValue(5,jiechuzhe);
            rs.GetFieldValue(6,borrowdate);
            rs.GetFieldValue(7,huandate);
            InsertCRInfoItem(id,number,name,writter,ku,jiechuzhe,borrowdate,huandate);
            rs.MoveNext();
        }
        rs.Close();
   
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);       
    }
    AND_CATCH(CMemoryException,pEx)
    {
        pEx->ReportError();
        AfxMessageBox ("memory exception");
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
    }
    END_CATCH              

}
void update::InsertCRInfoItem(int id, CString number,CString name, CString writter,CString ku,CString jiechuzhe,CString borrowdate,CString huandate)
{
    int nIndex = m_xianshi.GetItemCount();
    LV_ITEM lvItem;
    lvItem.mask = LVIF_TEXT ;   
    lvItem.iItem = nIndex;                //行数
    lvItem.iSubItem = 0;
        CString temp ;
    temp.Format("%d",id);
    lvItem.pszText = (char*)(LPCTSTR)temp;        //第一列
    //在最后一行插入记录值.
    m_xianshi.InsertItem(&lvItem);
    m_xianshi.SetItemText(nIndex,1,number);
    m_xianshi.SetItemText(nIndex,2,name);   
    m_xianshi.SetItemText(nIndex,3,writter);
    m_xianshi.SetItemText(nIndex,4,ku);
    m_xianshi.SetItemText(nIndex,5,jiechuzhe);
    m_xianshi.SetItemText(nIndex,6,borrowdate);
    m_xianshi.SetItemText(nIndex,7,huandate);

}





void update::Onqueren()
{
    // TODO: Add your control notification handler code here
    if(!UpdateData())
        return;
    int nItem = m_xianshi.GetNextItem(-1, LVNI_SELECTED);
    //如果没有选择要修改的纪录,返回.
    if(nItem == -1)
    {
        AfxMessageBox("没有选择要修改的条目!");
        return;
    }   
    //从列表框控件中获取选择的客户信息.
    int id = atoi(m_xianshi.GetItemText(nItem,0));
    if(m_shuming.IsEmpty())
    {
        AfxMessageBox("用户姓名不能够为空!");
        return;
    }
    TRY{
        m_db.BeginTrans();
        //CRecordset rs(&m_db1);
        CString sql;
         sql.Format("update bookinfo set number='%s',ku='%s',writter='%s',name='%s' where id=%d",m_shuhao,m_shifouzaiguan,m_zuozhe,m_shuming,id);
         m_db.ExecuteSQL(sql);
        CString sql1;
         sql1.Format("update jiehuaninfo set number='%s' where id=%d",m_shuhao,id);
         m_db.ExecuteSQL(sql1);
        //向界面中插入新的客户信息.
        //设置该行的其他列的值.   
        m_xianshi.SetItemText(nItem,1,m_shuhao);
        m_xianshi.SetItemText(nItem,2,m_shuming);   
        m_xianshi.SetItemText(nItem,3,m_zuozhe);
        m_xianshi.SetItemText(nItem,4,m_shifouzaiguan);
        m_db.CommitTrans();   
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);   
        m_db.Rollback();
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
        m_db.Rollback();
    }
    END_CATCH
}

 

查询:

// chaxun.cpp : implementation file
//

#include "stdafx.h"
#include "bookmanage.h"
#include "chaxun.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <afxdb.h>
extern CDatabase m_db;
/
// chaxun dialog


chaxun::chaxun(CWnd* pParent /*=NULL*/)
    : CDialog(chaxun::IDD, pParent)
{
    //{{AFX_DATA_INIT(chaxun)
    m_shuming = _T("");
    m_zuozhe = _T("");
    //}}AFX_DATA_INIT
}


void chaxun::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(chaxun)
    DDX_Control(pDX, IDC_xianshi, m_xianshi);
    DDX_Text(pDX, IDC_shuming, m_shuming);
    DDX_Text(pDX, IDC_zuozhe, m_zuozhe);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(chaxun, CDialog)
    //{{AFX_MSG_MAP(chaxun)
    ON_BN_CLICKED(IDC_queren, Onqueren)
    ON_BN_CLICKED(IDC_quxiao, Onquxiao)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// chaxun message handlers

void chaxun::Onqueren()
{
    // TODO: Add your control notification handler code here
    InitCtrlData();
}

void chaxun::Onquxiao()
{
    // TODO: Add your control notification handler code here
    OnOK();
}

BOOL chaxun::OnInitDialog()
{
    CDialog::OnInitDialog();
    InitControl();
    InitCtrlData();
    // TODO: Add extra initialization here
   
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}
void chaxun::InitControl()
{
    DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
    m_xianshi.SetExtendedStyle(dwExStyle);

m_xianshi.InsertColumn(0,"ID",LVCFMT_CENTER,50);
m_xianshi.InsertColumn(1,"书号",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(2,"书名",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(3,"作者",LVCFMT_CENTER,100);
m_xianshi.InsertColumn(4,"是否在库",LVCFMT_CENTER,100);
}


void chaxun::InitCtrlData()
{
    UpdateData(true);
    if(!m_db.IsOpen()){

        MessageBox("数据库未打开");
        return;
    }
    TRY{
        CRecordset rs(&m_db);//类对象代表一个从数据源中获取的纪录集
        //打开所有的用户信息记录
        CString sql;
        sql.Format("select * from bookinfo where name='%s' or writter='%s'",m_shuming,m_zuozhe);
        rs.Open(CRecordset::dynaset, sql);
        while (!rs.IsEOF())
        {
            int id;
            CString number,name,writter,ku;
            CDBVariant var;
            //获取客户信息ID字段值
            rs.GetFieldValue((short)0, var, SQL_C_SLONG);
            if (var.m_dwType != DBVT_NULL)   
                id = var.m_iVal;           
            var.Clear();           
            //获取姓名字段值
            rs.GetFieldValue(1,number);
            rs.GetFieldValue(2,name);
            //获取分数字段值
            rs.GetFieldValue(3,writter);
            rs.GetFieldValue(4,ku);
           
            InsertCRInfoItem(id,number,name,writter,ku);
            rs.MoveNext();
        }
        rs.Close();
   
    }
    CATCH(CDBException,ex)
    {
        AfxMessageBox (ex->m_strError);
        AfxMessageBox (ex->m_strStateNativeOrigin);       
    }
    AND_CATCH(CMemoryException,pEx)
    {
        pEx->ReportError();
        AfxMessageBox ("memory exception");
    }
    AND_CATCH(CException,e)
    {
        TCHAR szError[100];
        e->GetErrorMessage(szError,100);
        AfxMessageBox (szError);
    }
    END_CATCH              

}


void chaxun::InsertCRInfoItem(int id, CString number,CString name, CString writter,CString ku)
{
    int nIndex = m_xianshi.GetItemCount();
    LV_ITEM lvItem;
    lvItem.mask = LVIF_TEXT ;   
    lvItem.iItem = nIndex;                //行数
    lvItem.iSubItem = 0;
        CString temp ;
    temp.Format("%d",id);
    lvItem.pszText = (char*)(LPCTSTR)temp;        //第一列
    //在最后一行插入记录值.
    m_xianshi.InsertItem(&lvItem);   
    //设置该行的其他列的值.   
     m_xianshi.SetItemText(nIndex,1,number);
    m_xianshi.SetItemText(nIndex,2,name);   
    m_xianshi.SetItemText(nIndex,3,writter);
    m_xianshi.SetItemText(nIndex,4,ku);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值