我想在vc++中使用一个列表插件显示ACCESS数据表中的内容,下面是我的数据库类代码,请问应该如何设置这个列表插件,并且代码如何写?另外一个问题是我建立了一个添加按钮用来添加数据,但是一点就显示记录集是只读的错误提示,而无法进行数据添加,怎么办?
people是我的工程名 // odbe.cpp : implementation file
// #include "stdafx.h"
#include "people.h"
#include "odbe.h" #ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif /////////////////////////////////////////////////////////////////////////////
// odbe IMPLEMENT_DYNAMIC(odbe, CRecordset) odbe::odbe(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(odbe)
m_zgbm = _T("");
m_xm = _T("");
m_xb = _T("");
m_mz = _T("");
m_nFields = 47;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString odbe::GetDefaultConnect()
{
return _T("ODBC;DSN=people");
} CString odbe::GetDefaultSQL()
{
return _T("[m_dadj]");
} void odbe::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(odbe)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[zgbm]"), m_zgbm);
RFX_Text(pFX, _T("[xm]"), m_xm);
RFX_Text(pFX, _T("[xb]"), m_xb);
RFX_Text(pFX, _T("[mz]"), m_mz);
//}}AFX_FIELD_MAP
} /////////////////////////////////////////////////////////////////////////////
// odbe diagnostics #ifdef _DEBUG
void odbe::AssertValid() const
{
CRecordset::AssertValid();
} void odbe::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG
people是我的工程名 // odbe.cpp : implementation file
// #include "stdafx.h"
#include "people.h"
#include "odbe.h" #ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif /////////////////////////////////////////////////////////////////////////////
// odbe IMPLEMENT_DYNAMIC(odbe, CRecordset) odbe::odbe(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(odbe)
m_zgbm = _T("");
m_xm = _T("");
m_xb = _T("");
m_mz = _T("");
m_nFields = 47;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString odbe::GetDefaultConnect()
{
return _T("ODBC;DSN=people");
} CString odbe::GetDefaultSQL()
{
return _T("[m_dadj]");
} void odbe::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(odbe)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[zgbm]"), m_zgbm);
RFX_Text(pFX, _T("[xm]"), m_xm);
RFX_Text(pFX, _T("[xb]"), m_xb);
RFX_Text(pFX, _T("[mz]"), m_mz);
//}}AFX_FIELD_MAP
} /////////////////////////////////////////////////////////////////////////////
// odbe diagnostics #ifdef _DEBUG
void odbe::AssertValid() const
{
CRecordset::AssertValid();
} void odbe::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG
ODBC就是麻烦点,操作差不多。
{
UpdateData(TRUE); if ( strcmp(m_strSelect,"") == 0 )
{
AfxMessageBox("请输入你要查询的姓名");
return;
} CString strTemp;
strTemp = "SELECT * FROM telelist WHERE name like '%" + m_strSelect + "%'";
m_ListCtrl.DeleteAllItems();
CADORecordset* pRs = new CADORecordset(CTeleApp::g_pDb);
CString TempSql;
int i = -1;
if(pRs->Open((LPCTSTR) strTemp ))
{
while(!pRs->IsEof())
{
LV_ITEM lvitem;
lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvitem.state = 0;
lvitem.stateMask = 0;
char temp[50];
lvitem.iItem = ++i;
lvitem.iSubItem = 0;
lvitem.pszText =itoa(i, temp, 10);
m_ListCtrl.InsertItem(&lvitem); pRs->GetFieldValue("name",TempSql);
m_ListCtrl.SetItemText(i, 1, (LPCTSTR)TempSql); pRs->GetFieldValue("tele",TempSql);
m_ListCtrl.SetItemText(i, 2, (LPCTSTR)TempSql); pRs->GetFieldValue("res",TempSql);
m_ListCtrl.SetItemText(i, 3, (LPCTSTR)TempSql); pRs->GetFieldValue("ID",TempSql);
m_ListCtrl.SetItemText(i, 4, (LPCTSTR)TempSql);
pRs->MoveNext();
}
pRs->Close();
}
else
AfxMessageBox("记录集创建失败");
delete pRs;
}