准备开发简易输电线路管理信息系统;方便起见;下一个源码来改;
1 下的源码运行截图如下;
2 拷贝一份,改名,打开;
3 用mdb操作工具修改该源码自带的mdb数据库;
mdb操作工具见此
http://blog.csdn.net/bcbobo21cn/article/details/51000041
修改了其中两个表为输电线路表,一个是架线分类表;一个是线路信息表;
电力相关数据库表见:
http://blog.csdn.net/bcbobo21cn/article/details/50912765
加入3条测试记录;
4 原界面和修改界面
5 修改应用程序App类中连接数据库的名称;
BOOL CLhwyApp::InitInstance()
{
// AfxGetModuleState()->m_dwVersion = 0x0601;
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left (nPos);
CString lpszFile = sPath + "\\shdxl.mdb";
......
修改打开的表名称;
BOOL CBaDialog::OnInitDialog()
{
CDialog::OnInitDialog();
CDRecordset m_Set(&theApp.m_DB);
CBRecordset m_bSet(&theApp.m_DB);
CTRecordset m_tSet(&theApp.m_DB);
unsigned i=0;
CODBCFieldInfo Info;
//m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"一班STUDENT");
m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"xlinfo");
m_ListCtrlx.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
......
6 运行下;
出现如图错误;
7 下面是关于此错误的论述资料;
VC ACCESS 参数不足 期待是n
"参数不足,期待是n(n=1,2,3......)"的解决办法如下:
在CRecordset的派生类,如COBosSet中,找到GetDefaultSQL()函数
将return _T("[表]")
修改为 return _T("[新表]")
例一:原表为"1",新表为"2"
则只需要将表名修改正确,即:将return _T("[1]")修改为 return _T("[2]")
例二:原表为 "1" 新加入表为"1"和"2"
则需加入新表,即:将return _T("[1]")修改为 return _T("[1],[2]")
注意:不要写成return _T("[1]","[2]")
还有就是,你打开数据库的时候那个变量是不是和数据库中的列
名是不是一样的.当变量名不同时.也会出现这个问题!
8 该项目有多个不同的XRecordSet类,继承自CRecordset;
分别对应不同的表;
按7的论述;修改表名,字段类型,名称等;修改后代码如下;对应头文件也要修改相应数据类型;
CDRecordset::CDRecordset(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CDRecordset)
m_column1 = 0;
m_column2 = _T("");
m_column3 = 0;
m_column4 = _T("");
m_column5 = _T("");
m_column6 = _T("");
m_column7 = _T("");
m_column8 = _T("");
m_column9 = _T("");
m_nFields = 9;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString CDRecordset::GetDefaultConnect()
{
return _T("ODBC;DSN=lhwy");
}
CString CDRecordset::GetDefaultSQL()
{
//return _T("[NO1STUDENT]");
return _T("[xlinfo]");
}
void CDRecordset::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CDRecordset)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Int(pFX, _T("[id]"), m_column1);
RFX_Text(pFX, _T("[name]"), m_column2);
RFX_Int(pFX, _T("[length]"), m_column3);
RFX_Text(pFX, _T("[dengji]"), m_column4);
RFX_Text(pFX, _T("[qizhidian]"), m_column5);
RFX_Text(pFX, _T("[dixingdimao]"), m_column6);
RFX_Text(pFX, _T("[dizhi]"), m_column7);
RFX_Text(pFX, _T("[jiaotong]"), m_column8);
RFX_Text(pFX, _T("[linmu]"), m_column9);
//}}AFX_FIELD_MAP
}
出现如下两个错误;
error C2664: 'RFX_Long' : cannot convert parameter 3 from 'int' to 'long &'
error C2664: 'RFX_Single' : cannot convert parameter 3 from 'int' to 'float &'
是因为RFX_XXX宏要对应数据类型;
RFX_Long(pFX, _T("[学号]"), m_column1);
RFX_Int(pFX, _T("[学号]"), m_column1);
9 还有 参数不足,期待是n 的错误;
因为还有表的字段没对上;先注释掉;看下效果;如下所示;
要改的地方尚多;有时间继续;
10 下载用来修改的源码来自此处;此处的VC++数据库和MIS系统源码索引的比较好,容易找;记录一下;