通过ODBC与MySQL进行数据交互


.CPP------------------------------------------------------


CDialog_test::~CDialog_test()
{
Data_sql.Close();
}


void CDialog_test::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//  DDX_LBString(pDX, IDC_LIST_info, m_listbox_info);
DDX_Text(pDX, IDC_EDIT2,  m_database_name);
DDX_Text(pDX,IDC_EDIT1,m_data_find);
DDX_Control(pDX, IDC_LIST_info, m_listbox);
//  DDX_Control(pDX, IDC_COMBO1, m_show_database);
}




BEGIN_MESSAGE_MAP(CDialog_test, CDialog)
ON_BN_CLICKED(IDC_connect, &CDialog_test::OnBnClickedconnect)
ON_BN_CLICKED(IDCANCEL, &CDialog_test::OnBnClickedCancel)
ON_BN_CLICKED(IDOK2, &CDialog_test::OnBnClickedOk2)
ON_BN_CLICKED(IDC_find, &CDialog_test::OnBnClickedfind)
ON_LBN_SELCHANGE(IDC_LIST_info, &CDialog_test::OnLbnSelchangeListinfo)
END_MESSAGE_MAP()




// CDialog_test 消息处理程序




void CDialog_test::OnBnClickedconnect() //database connect
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
// AfxMessageBox(m_database_name);
if(Data_sql.Open(m_database_name)) //ODBC_database,mzmachineserver
{
AfxMessageBox(_T("数据库连接成功"));
}
else
{
AfxMessageBox(_T("数据库连接失败"));
}
// Data_sql.ExecuteSQL(_T("Insert into patient(PatientID,number,name,sex,age) values('10030218','1111','沈柯',1,40);"));


/* if(Button_blue.m_hWnd==NULL) //显示动态按钮
{
Button_blue.Create(_T("显示"),BS_PUSHBUTTON|WS_VISIBLE,CRect(0,0,60,60),this,IDB_Blue);
}
else
{
AfxMessageBox(_T("已经创建成功"));
}*/
}




//void CDialog_test::OnEnChangeshow()
//{
// // TODO:  如果该控件是 RICHEDIT 控件,它将不
// // 发送此通知,除非重写 CDialog::OnInitDialog()
// // 函数并调用 CRichEditCtrl().SetEventMask(),
// // 同时将 ENM_CHANGE 标志“或”运算到掩码中。
//
// // TODO:  在此添加控件通知处理程序代码
//}




void CDialog_test::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
PostQuitMessage(0); //exit
// CDialog::OnCancel();
}




void CDialog_test::OnBnClickedOk2()
{
// TODO: 在此添加控件通知处理程序代码

}




void CDialog_test::OnBnClickedfind()
{
// TODO: 在此添加控件通知处理程序代码
CRecordset rec_set(&Data_sql); //绑定数据源
CDBVariant var; //记录有数据的类型和数据的值,它封闭了VARIANT数据类型
rec_set.Open(CRecordset::forwardOnly,_T("select * from patient"));

int line=0; //显示的行
int nField=rec_set.GetODBCFieldCount(); //得到列的数目
while(!rec_set.IsEOF())
{
CString str_temp=_T(" ");
for(int index=0;index<nField;index++)
{
rec_set.GetFieldValue(index,var);
str_temp=str_temp+VariantToCstring(&var);
str_temp=str_temp+_T("  ");
}
m_listbox.InsertString(line,str_temp);
line++;
// AfxMessageBox(str_temp);


rec_set.MoveNext();    //移到下一个数据行
}
rec_set.Close();
/* CString str_sql=_T("select * from patient where patientID=%d;",m_data_find);
Data_sql.ExecuteSQL(str_sql);


UpdateData(true);
CString str_temp=m_data_find;
AfxMessageBox(str_temp);*/
}




CString CDialog_test::VariantToCstring(CDBVariant *var) //数据库类型转换
{
CString str_temp;
switch(var->m_dwType)
{
case DBVT_SHORT :str_temp.Format(L"%d",(int)var->m_iVal);break;
case DBVT_LONG :str_temp.Format(L"%d",(int)var->m_lVal);break;
case DBVT_SINGLE :str_temp.Format(L"%10.6f",(double)var->m_fltVal);break;
case DBVT_DOUBLE :str_temp.Format(L"%10.6f",var->m_dblVal);break;
case DBVT_BOOL :str_temp=(var->m_boolVal==0)?L"FALSE":L"TRUE" ;break;
case DBVT_STRING :str_temp=var->m_pstring->GetBuffer();break;
case DBVT_ASTRING:str_temp=var->m_pstringA->GetBuffer();break;
case DBVT_WSTRING:str_temp=var->m_pstringW->GetBuffer();break;
case DBVT_DATE :str_temp.Format(L"%d-%d-%d",(var->m_pdate)->year,(var->m_pdate)->month,(var->m_pdate)->day);break;
default: break;
}
return str_temp;
}


头文件--------------------------------------------------


#include <afxdb.h>
#include <odbcinst.h>


#pragma once




// CDialog_test 对话框


class CDialog_test : public CDialog
{
DECLARE_DYNAMIC(CDialog_test)


public:
CDialog_test(CWnd* pParent = NULL);   // 标准构造函数
virtual ~CDialog_test();
public:
CButton Button_white,Button_blue;
CDatabase Data_sql;
// 对话框数据
enum { IDD = IDD_DIALOG_TEST };


protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持


DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedconnect();
// afx_msg void OnEnChangeshow();
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedOk2();
afx_msg void OnBnClickedfind();
// CString m_listbox_info; // UpdateData(FALSE); 可以向控件传递数据
CString m_database_name;
CString m_data_find;
CString VariantToCstring(CDBVariant *var);
CListBox m_listbox;
// CComboBox m_show_database;
afx_msg void OnLbnSelchangeListinfo();
};

猜你喜欢

转载自blog.csdn.net/a519736285/article/details/29807703