当我在 MFC(CButton) 中按下按钮时,不会实时更改值。我正在使用 sql 服务器
when i press button in MFC(CButton), not change value in real time. I'm use sql server
我正在使用 sql 服务器 2014 和 visual studio 2015 社区
我从事 MFC DB 程序(单个文档和 OLE DB)但遇到了大麻烦
问题是当我更改正在使用的 DB 值时,MFC 按钮值不会实时更改
当我在编辑器中按下刷新按钮时,更改值
如何实时更改值?
下面是代码和图片
更新按钮代码
void CTouhouJGSView::OnBnClickedButtonUpdate()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CCommand<CDynamicAccessor> cmd;
CString strQuery = _T("UPDATE dbo.TouhouTable SET 능력 = 'ewrer' WHERE id = 1");
cmd.Open(m_pSet->m_session, strQuery, NULL);
cmd.Close();
AddAllRecord();
}
AddAllRecord() 函数
void CTouhouJGSView::AddAllRecord()
{
CString strTemp = _T("");
m_pSet->MoveFirst();
m_List.DeleteAllItems();
int i = 0;
do {
strTemp.Format(_T("%4d"), m_pSet->m_Id);
m_List.InsertItem(i, strTemp, 0);
m_List.SetItemText(i, 1, m_pSet->m_section);
m_List.SetItemText(i, 2, m_pSet->m_name);
m_List.SetItemText(i, 3, m_pSet->m_title);
m_List.SetItemText(i, 4, m_pSet->m_species);
m_List.SetItemText(i, 5, m_pSet->m_living);
m_List.SetItemText(i, 6, m_pSet->m_spell);
i++;
} while (m_pSet->MoveNext() == S_OK);
m_pSet->MoveFirst();
}
和程序图片
enter image description here
编辑:m_pSet
的定义
#pragma once
#include "afxcmn.h"
#include "afxwin.h"
class CTouhouJGSSet;
class CTouhouJGSView : public COleDBRecordView
{
protected: // serialization에서만 만들어집니다.
CTouhouJGSView();
DECLARE_DYNCREATE(CTouhouJGSView)
public:
#ifdef AFX_DESIGN_TIME
enum{ IDD = IDD_TOUHOUJGS_FORM };
#endif
CTouhouJGSSet* m_pSet; //here
// 특성입니다.
public:
CTouhouJGSDoc* GetDocument() const;
EDIT2: class CTouhouJGSSet 更改部分
//class CTouhouJGSSet : public CTable<CAccessor<CTouhouJGSSetAccessor> >
class CTouhouJGSSet : public CCommand<CAccessor<CTouhouJGSSetAccessor> >
{
......
HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
//HRESULT hr = Open(m_session, L"dbo.TouhouTable", pPropSet);
CString strSQL = _T("select * from dbo.TouhouTable");
HRESULT hr = Open(m_session, strSQL, pPropSet);
和 OnInitialUpdate() 函数
void CTouhouJGSView::OnInitialUpdate()
{
,,,,,
COleDBRecordView::OnInitialUpdate();
AddColumn(); //additional function
AddAllRecord(); //additional function
}
编辑 3:我说刷新按钮
enter image description here
找到m_pSet
填充数据的方法。您必须在 AddAllRecord();
之前刷新或重新创建
void CTouhouJGSView::OnBnClickedButtonUpdate()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CCommand<CDynamicAccessor> cmd;
CString strQuery = _T("UPDATE dbo.TouhouTable SET 능력 = 'ewrer' WHERE id = 1");
cmd.Open(m_pSet->m_session, strQuery, NULL);
cmd.Close();
cmd.OpenRowset(m_pSet); //<-- you can try to close it first, if its already opened
AddAllRecord();
}
我正在使用 sql 服务器 2014 和 visual studio 2015 社区 我从事 MFC DB 程序(单个文档和 OLE DB)但遇到了大麻烦
问题是当我更改正在使用的 DB 值时,MFC 按钮值不会实时更改
当我在编辑器中按下刷新按钮时,更改值
如何实时更改值?
下面是代码和图片
更新按钮代码
void CTouhouJGSView::OnBnClickedButtonUpdate()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CCommand<CDynamicAccessor> cmd;
CString strQuery = _T("UPDATE dbo.TouhouTable SET 능력 = 'ewrer' WHERE id = 1");
cmd.Open(m_pSet->m_session, strQuery, NULL);
cmd.Close();
AddAllRecord();
}
AddAllRecord() 函数
void CTouhouJGSView::AddAllRecord()
{
CString strTemp = _T("");
m_pSet->MoveFirst();
m_List.DeleteAllItems();
int i = 0;
do {
strTemp.Format(_T("%4d"), m_pSet->m_Id);
m_List.InsertItem(i, strTemp, 0);
m_List.SetItemText(i, 1, m_pSet->m_section);
m_List.SetItemText(i, 2, m_pSet->m_name);
m_List.SetItemText(i, 3, m_pSet->m_title);
m_List.SetItemText(i, 4, m_pSet->m_species);
m_List.SetItemText(i, 5, m_pSet->m_living);
m_List.SetItemText(i, 6, m_pSet->m_spell);
i++;
} while (m_pSet->MoveNext() == S_OK);
m_pSet->MoveFirst();
}
和程序图片
enter image description here
编辑:m_pSet
的定义#pragma once
#include "afxcmn.h"
#include "afxwin.h"
class CTouhouJGSSet;
class CTouhouJGSView : public COleDBRecordView
{
protected: // serialization에서만 만들어집니다.
CTouhouJGSView();
DECLARE_DYNCREATE(CTouhouJGSView)
public:
#ifdef AFX_DESIGN_TIME
enum{ IDD = IDD_TOUHOUJGS_FORM };
#endif
CTouhouJGSSet* m_pSet; //here
// 특성입니다.
public:
CTouhouJGSDoc* GetDocument() const;
EDIT2: class CTouhouJGSSet 更改部分
//class CTouhouJGSSet : public CTable<CAccessor<CTouhouJGSSetAccessor> >
class CTouhouJGSSet : public CCommand<CAccessor<CTouhouJGSSetAccessor> >
{
......
HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
//HRESULT hr = Open(m_session, L"dbo.TouhouTable", pPropSet);
CString strSQL = _T("select * from dbo.TouhouTable");
HRESULT hr = Open(m_session, strSQL, pPropSet);
和 OnInitialUpdate() 函数
void CTouhouJGSView::OnInitialUpdate()
{
,,,,,
COleDBRecordView::OnInitialUpdate();
AddColumn(); //additional function
AddAllRecord(); //additional function
}
编辑 3:我说刷新按钮 enter image description here
找到m_pSet
填充数据的方法。您必须在 AddAllRecord();
void CTouhouJGSView::OnBnClickedButtonUpdate()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CCommand<CDynamicAccessor> cmd;
CString strQuery = _T("UPDATE dbo.TouhouTable SET 능력 = 'ewrer' WHERE id = 1");
cmd.Open(m_pSet->m_session, strQuery, NULL);
cmd.Close();
cmd.OpenRowset(m_pSet); //<-- you can try to close it first, if its already opened
AddAllRecord();
}