📄 addauthor.cpp
字号:
// ADDAuthor.cpp : 实现文件
//
#include "stdafx.h"
#include "LManage.h"
#include "ADDAuthor.h"
#include ".\addauthor.h"
// CADDAuthor 对话框
IMPLEMENT_DYNAMIC(CADDAuthor, CDialog)
CADDAuthor::CADDAuthor(CWnd* pParent /*=NULL*/)
: CDialog(CADDAuthor::IDD, pParent)
, m_Name(_T(""))
, m_Age(0)
, m_Remark(_T(""))
{
}
CADDAuthor::~CADDAuthor()
{
}
void CADDAuthor::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO_INDEX, m_kIndex);
DDX_Text(pDX, IDC_EDIT_NAME, m_Name);
DDX_Text(pDX, IDC_EDIT_AGE, m_Age);
DDV_MinMaxInt(pDX, m_Age, 0, 200);
DDX_Control(pDX, IDC_COMBO_SEX, m_Sex);
DDX_Text(pDX, IDC_EDIT_OTHER, m_Remark);
}
BEGIN_MESSAGE_MAP(CADDAuthor, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDC_AMEND, OnBnClickedAmend)
ON_BN_CLICKED(IDC_DEL, OnBnClickedDel)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_CBN_SELCHANGE(IDC_COMBO_INDEX, OnCbnSelchangeComboIndex)
END_MESSAGE_MAP()
// CADDAuthor 消息处理程序
BOOL CADDAuthor::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
m_Sex.AddString( "未知" );
m_Sex.AddString( "男" );
m_Sex.AddString( "女" );
m_Sex.SetCurSel(0);
// 读数据库
LoadAllIndex();
CString temp;
m_kIndex.GetLBText( m_kIndex.GetCurSel(), temp );
GetData( atol(temp) );
return TRUE; // return TRUE unless you set the focus to a control
}
// 读取所有的字段索引
void CADDAuthor::LoadAllIndex()
{
_RecordsetPtr pRecord;
_variant_t value;
// 清空list
while( m_kIndex.GetCount() > 0)
m_kIndex.DeleteString(0);
try
{
// 生成Recordset实例
pRecord.CreateInstance("ADODB.Recordset");
// 打开记录集,静态光标(静态记录集),乐观锁定方式
pRecord->Open("SELECT ID FROM Author", // 查询所有语句
_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
while( !pRecord->adoEOF )
{
value = pRecord->GetCollect( "ID" );
if( value.vt != VT_NULL )
{
CString temp;
temp.Format( "%d", value.lVal );
m_kIndex.AddString( temp );
}
pRecord->MoveNext();
}
pRecord->Close();
pRecord = NULL;
}
catch( _com_error * e )
{
MessageBox( e->ErrorMessage() );
}
m_kIndex.SetCurSel(0);
}
// 根据索引值填充数据
void CADDAuthor::GetData( int id )
{
CString sql;
sql.Format( "SELECT * FROM Author WHERE ID = %d", id );
_RecordsetPtr pRecord;
_variant_t value;
try
{
// 生成Recordset实例
pRecord.CreateInstance("ADODB.Recordset");
// 打开记录集,静态光标(静态记录集),乐观锁定方式
pRecord->Open(sql.GetBuffer(),_variant_t((IDispatch*)theApp.m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
CString name, remark, sex;
int age;
if( !pRecord->adoEOF )
{
value = pRecord->GetCollect( "Name" );
if( value.vt != VT_NULL )
name = value.bstrVal;
else
name = "";
value = pRecord->GetCollect( "Age" );
if( value.vt != VT_NULL )
age = value.lVal;
else
age = 0;
value = pRecord->GetCollect( "Sex" );
if( value.vt != VT_NULL )
sex = value.bstrVal;
else
sex = "未知";
value = pRecord->GetCollect( "Remark" );
if( value.vt != VT_NULL )
remark = value.bstrVal;
else
remark = "";
// 确定显示值
this->m_Age = age;
this->m_Name = name;
this->m_Remark = remark;
if( sex == "男" )
m_Sex.SetCurSel(1);
else if( sex == "女" )
m_Sex.SetCurSel(2);
else
m_Sex.SetCurSel(0);
}
pRecord->Close();
pRecord = NULL;
}
catch( _com_error * e )
{
MessageBox( e->ErrorMessage() );
}
UpdateData(false);
}
// 执行SQL语句
bool CADDAuthor::ExecuteSQL( CString sql )
{
try
{
_variant_t RecordsAffected;
theApp.m_pConnection->Execute( sql.GetBuffer(), &RecordsAffected,adCmdText);
}
catch( _com_error *e)
{
MessageBox(e->ErrorMessage());
return false;
}
return true;
}
// 改变选择
void CADDAuthor::OnCbnSelchangeComboIndex()
{
if( UpdateData() )
{
CString temp;
m_kIndex.GetLBText( m_kIndex.GetCurSel(), temp );
GetData( atol(temp) );
}
}
// 添加作者
void CADDAuthor::OnBnClickedOk()
{
if( UpdateData() == false )
return;
CString sql = "";
CString index, temp;
// 规范化字符串
CString name, remark,sex;
name = m_Name;
name.Replace("'", "''");
remark = m_Remark;
remark.Replace("'", "''" );
m_Sex.GetLBText( m_Sex.GetCurSel(), sex );
// 组织SQL语句
temp.Format("INSERT INTO Author (Name,Age,Sex,Remark) " );
sql = temp;
temp.Format("VALUES ('%s','%d','%s','%s')",name, m_Age, sex, remark );
sql += temp;
// 执行SQL语句
if( this->ExecuteSQL( sql ) == false )
MessageBox( "记录添加失败" );
// 重新读入链表数据
LoadAllIndex();
// 设置当前索引
int k = m_kIndex.GetCount()-1;
m_kIndex.GetLBText( k, index );
// 通过数据库更新显示,以确定修改是否成功
GetData( atol( index ) );
m_kIndex.SetCurSel( k );
UpdateData();
}
// 修改
void CADDAuthor::OnBnClickedAmend()
{
if( UpdateData() == false )
return;
CString sql = "";
CString index, temp;
// 得到当前索引
int k = m_kIndex.GetCurSel();
m_kIndex.GetLBText( k, index );
// 规范化字符串
CString name, remark, sex;
name = m_Name;
name.Replace("'", "''");
remark = m_Remark;
remark.Replace("'", "''" );
m_Sex.GetLBText( m_Sex.GetCurSel(), sex );
// 组织SQL语句
temp.Format("UPDATE Author SET Name = '%s', Age = '%d', Sex = '%s', Remark = '%s'",
name, m_Age, sex, remark );
sql += temp;
temp.Format("WHERE ID = %s", index );
sql += temp;
// 执行SQL语句
if( this->ExecuteSQL( sql ) == false )
MessageBox( "表记录修改失败" );
// 通过数据库更新显示,以确定修改是否成功
GetData( atol( index ) );
}
// 删除
void CADDAuthor::OnBnClickedDel()
{
if( UpdateData() == false )
return;
CString sql = "";
CString index;
// 得到当前索引
int k = m_kIndex.GetCurSel();
m_kIndex.GetLBText( k, index );
// 组织SQL语句
sql.Format("DELETE FROM Author WHERE (ID = %s)",index );
// 执行SQL语句
if( this->ExecuteSQL( sql ) == false )
MessageBox( "删除记录失败" );
// 重新读入链表数据
LoadAllIndex();
// 通过数据库更新显示修改,记录移动到下一条
if( k >= m_kIndex.GetCount() )
k = m_kIndex.GetCount()-1;
m_kIndex.GetLBText( k, index );
GetData( atol( index ) );
m_kIndex.SetCurSel( k );
UpdateData();
}
// 退出
void CADDAuthor::OnBnClickedCancel()
{
OnCancel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -