dlg_edit.cpp

来自「库存管理,有MSHflexgrid的使用和网络数据库存储」· C++ 代码 · 共 175 行

CPP
175
字号
// Dlg_Edit.cpp : implementation file
//

#include "stdafx.h"
#include "query.h"
#include "Dlg_Edit.h"
#include "ADOconn.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDlg_Edit dialog


CDlg_Edit::CDlg_Edit(CWnd* pParent /*=NULL*/)
	: CDialog(CDlg_Edit::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlg_Edit)
	m_name = _T("");
	m_code = _T("");
	m_state = _T("");
	m_hide = _T("");
	//}}AFX_DATA_INIT
}


void CDlg_Edit::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlg_Edit)
	DDX_Text(pDX, IDC_EDIT1, m_name);
	DDX_Text(pDX, IDC_EDIT2, m_code);
	DDX_Text(pDX, IDC_EDIT3, m_state);
	DDX_Text(pDX, IDC_EDIT4, m_hide);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlg_Edit, CDialog)
	//{{AFX_MSG_MAP(CDlg_Edit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlg_Edit message handlers



void CDlg_Edit::OnOK() 
{
	// TODO: Add extra validation here
	
    ADOconn adocon;
    adocon.OnInitADOconn();	    
	//edit_str[0]=m_name;
	//edit_str[1]=m_code;
	//edit_str[2]=m_state;
    UpdateData(true);
    CString sqlstr;	
    sqlstr.Format("SELECT * FROM query_data WHERE name='%s' and code='%s' and state='%s'",m_name,m_code,m_state);
    _RecordsetPtr rs;
	rs=adocon.GetRecordSet((_bstr_t)(LPCTSTR)sqlstr);
	int n=0;
	while (!rs->adoEOF)     
  {   
      rs->MoveNext();   
      n++;   
  }   
	
	if (m_hide=="EDIT") 
	{//不能为MB_ICONERROR | MB_OK,否则会触发ID_OK。只有MB_ICONERROR的情况下,
		//点完消息框后原框不消失
		if (n>1)//rs->get_RecordCount()在微软的游标状态下不能用,需设置游标,或ORACLE db方可
		{
			MessageBox("存在相同记录,不能重复插入,请重新输入!","Error",MB_ICONERROR);
	        adocon.ExitConnect();
			//CDlg_Edit::OnOK();
		}
		else if (n==1)
		{
			if ((edit_str[0]==m_name)&&(edit_str[1]==m_code)&&(edit_str[2]==m_state))//记录未作修改
			{
				adocon.ExitConnect();
				CDialog::OnOK();
			}
			else{			
			MessageBox("存在相同记录,不能重复插入,请重新输入!","Error",MB_ICONERROR);
			adocon.ExitConnect();
			//CDlg_Edit::OnOK(); 
			}
		}
		else{			
			if (m_name!="")
			{
			sqlstr.Format("UPDATE query_data SET name='%s',code='%s',state='%s' where name='%s' and code='%s' and state='%s'",m_name,m_code,m_state,edit_str[0],edit_str[1],edit_str[2]);
	    //+ name + "',"+ " code='" + code + "'," +"state='" +state+"'" + " where name='" + name + "'";
	   	    adocon.ExecuteSQL((_bstr_t)(LPCTSTR)sqlstr);
			adocon.ExitConnect();
	    	CDialog::OnOK();
			}
			else
			{
			MessageBox("用户名不能为空,请重新输入!","Error",MB_ICONERROR);
            adocon.ExitConnect();
			//CDlg_Edit::OnOK();
			}
			
		}
		 
	}
	else if (m_hide=="ADD")
	{
		if (n==0)//无重复记录,可添加进去
		{
			if (m_name!=""){
			sqlstr.Format("INSERT INTO query_data VALUES('%s','%s','%s')",m_name,m_code,m_state);
		    adocon.ExecuteSQL((_bstr_t)(LPCTSTR)sqlstr);
			adocon.ExitConnect();
			CDialog::OnOK();
			}
			else
			{
				/*
				MessageBox() 是Win32API函数。VC6中是在winuser.h中定义。当然它是全局的,它是最基本的。
                AfxMessageBox()是MFC库中的一个全局函数(Afxwin.h中定义)。
                而AfxMessageBox()是通过调用MessageBox()来实现的。
                只要你包含相应的头文件都可用,随你的便啦!
                MessageBox是系统API函数,AfxMessageBox是MFC函数, 它封装了MessageBox,使用起来更灵活,   
                MessageBox一般为错误,AfxMessageBox   可以选择
				*/
			
			//AfxMessageBox无论点确认或取消均不影响原对话框,而MessageBox则影响
			//if(AfxMessageBox("用户名不能为空,请重新输入!",MB_OKCANCEL,0)==IDOK)	
			MessageBox("用户名不能为空,请重新输入!","Error",MB_ICONERROR);
            adocon.ExitConnect();
			//CDlg_Edit::OnOK();
			}
		}
		else{//有重复记录
			MessageBox("存在相同记录,不能重复插入,请重新输入!","Error",MB_ICONERROR);
		    adocon.ExitConnect();
			//CDlg_Edit::OnOK();
		}

	}

	//adocon.ExecuteSQL((_bstr_t)(LPCTSTR)sqlstr);	
	//adocon.ExitConnect();

	//CDialog::OnOK();
}

BOOL CDlg_Edit::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//改变标题,成功了,前头无需加pWnd->,直接写函数SetWindowText()就行了
	//CWnd* pWnd = GetDlgItem(IDD_DIALOG_EDIT);

	if (m_hide=="EDIT")
	{
		SetWindowText(_T("修改记录"));	
	} else 
	{
		SetWindowText(_T("添加记录"));
	}//
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?