MFC , VS2013 , mysql , oleDB ,COleDateTime ,date Time Picker , Datetime
1단계에서는 DB에 모든 칼럼이 varchar였다.
CREATE TABLE `carnumber_mfc` (
`No` int(5) NOT NULL AUTO_INCREMENT,
`Name` varchar(20) DEFAULT NULL,
`PhoneNumber` varchar(20) DEFAULT NULL,
`Address` varchar(50) DEFAULT NULL,
`Age` int(10) DEFAULT NULL,
PRIMARY KEY (`No`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8;
[새 레코드 저장하기 ] - 1단계
void CSB_DBmfcView::OnBnClickedButtonAddnew()
{
// TODO: Add your control notification handler code here
CCommand<CDynamicAccessor> Cmd;
//텍스트 박스에서 읽어오기
CString edit_name;
CString edit_phone;
CString edit_addr;
CString edit_age;
GetDlgItemText(IDC_EDIT_NAME, edit_name);
GetDlgItemText(IDC_EDIT_PHONE, edit_phone);
GetDlgItemText(IDC_EDIT_ADDR, edit_addr);
GetDlgItemText(IDC_EDIT_AGE, edit_age);
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY,
DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
HRESULT hr = Cmd.Open(m_pSet->m_session, _T("SELECT * FROM carnumber_mfc"), &propset);
if (FAILED(hr))
{
AfxMessageBox(_T("ERROR: Failed to execute SQL!"));
}
TCHAR* pszValue = NULL;
Cmd.SetStatus(1, DBSTATUS_S_IGNORE);
pszValue = (TCHAR*)Cmd.GetValue(2);
wsprintf(pszValue, _T("%s"), edit_name);
Cmd.SetLength(2, lstrlen(pszValue) * 2);
Cmd.SetStatus(2, DBSTATUS_S_OK);
pszValue = (TCHAR*)Cmd.GetValue(3);
wsprintf(pszValue, _T("%s"), edit_phone);
Cmd.SetLength(3, lstrlen(pszValue) * 2);
Cmd.SetStatus(3, DBSTATUS_S_OK);
pszValue = (TCHAR*)Cmd.GetValue(4);
wsprintf(pszValue, _T("%s"), edit_addr);
Cmd.SetLength(4, lstrlen(pszValue) * 2);
Cmd.SetStatus(4, DBSTATUS_S_OK);
ULONG* plAge = (ULONG*)Cmd.GetValue(5);
*plAge = _wtoi(edit_age);
Cmd.SetLength(5, sizeof(ULONG));
Cmd.SetStatus(5, DBSTATUS_S_OK);
hr = Cmd.Insert();
if (FAILED(hr))
{
AfxMessageBox(_T("ERROR: Failed to Insert new record!"));
}
Cmd.Close();
Cmd.ReleaseCommand();
if (m_List.GetItemCount() > 0) m_List.DeleteAllItems();
m_pSet->RunSQL(_T("SELECT * FROM carnumber_mfc"));
ListupAllRecords();
}
[새 레코드 저장하기 ] - 2단계 직접 쿼리문쓰기
void CSB_DBmfcView::OnBnClickedButtonAddnew()
{
// TODO: Add your control notification handler code here
CCommand<CDynamicAccessor> Cmd;
//텍스트 박스에서 읽어오기
CString edit_name;
CString edit_phone;
CString edit_addr;
CString edit_age;
GetDlgItemText(IDC_EDIT_NAME, edit_name);
GetDlgItemText(IDC_EDIT_PHONE, edit_phone);
GetDlgItemText(IDC_EDIT_ADDR, edit_addr);
GetDlgItemText(IDC_EDIT_AGE, edit_age);
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY,
DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
HRESULT hr = Cmd.Open(m_pSet->m_session, _T("SELECT * FROM carnumber_mfc"), &propset);
if (FAILED(hr))
{
AfxMessageBox(_T("ERROR: Failed to execute SQL!"));
}
//ULONG plAge = _wtoi(edit_age);
CString query = _T("insert into carnumber_mfc(Name, PhoneNumber, Address, Age) values('") + edit_name + _T("', '") + edit_phone + _T("', '") + edit_addr + _T("', ") + edit_age+_T(")");
hr = Cmd.Open(m_pSet->m_session, query, &propset);
if (FAILED(hr))
{
AfxMessageBox(_T("ERROR: Failed to Insert new record!"));
}
Cmd.Close();
Cmd.ReleaseCommand();
if (m_List.GetItemCount() > 0) m_List.DeleteAllItems();
m_pSet->RunSQL(_T("SELECT * FROM carnumber_mfc"));
ListupAllRecords();
}
단계 DB에는 datetime이 있다.
CREATE TABLE `carnumber_0716` (
`no` int(11) NOT NULL AUTO_INCREMENT,
`carnumber` varchar(20) DEFAULT NULL,
`car_date` datetime DEFAULT NULL,
`img_path` varchar(20) DEFAULT NULL,
`img_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`no`)
) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8;
mfc 이미지 복사하기
현재 날짜 시간 얻어오기
+ datetimepicker 값 갱신하기. 이제 추가해야함.
1.
UpdateData();
UpdateData(false); //이건 values형에서만 되는 건가보다.
UpdateData(TRUE) : Value형 변수에 사용자가 선택한 값을 넣어 준다
UpdateData(FALSE) : Value형 변수의 내용을 화면에 보여 준다.
2.
Format은 COleDateTime 에서 CString형식으로 변환할때 사용
3.
mysql 에서 오전 오후라는 값이 들어갈땐 insert가 안된다.
24시간 형식으로 보여줘야 할듯.(넘겨줘야할듯)
4.
CString datetime = t.Format(_T("%Y-%m-%d %p %H:%M:%S")); // %p <-am/pm
%H Hour in 24-hour format (00 – 23)
%Y-%m-%d %H:%M:%S 이렇게 하면 24시간으로 나옴.
http://zero-one-space.blogspot.kr/2012/03/cfile-class.html
http://myblue0324.tistory.com/28
5.
'this : has a colon'
mysql insert colon
'차근차근 > C' 카테고리의 다른 글
OLEDB사용 관련 질문입니다. (0) | 2015.07.27 |
---|---|
mysql datetime형식을 mfc에서 cstring으로 변환 (0) | 2015.07.16 |
mfc , oledb , crud (0) | 2015.07.15 |
mfc / listcontrol / xlistctrl (0) | 2015.07.10 |
[Tip] MySQL DB를 Visual Studio의 Server Explorer에 추가하기 (0) | 2015.07.08 |