连接数据库:
// 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);
}