VC++开发简易输电线路管理信息系统

来源:互联网 发布:android 数据库系统 编辑:程序博客网 时间:2024/04/27 16:52

准备开发简易输电线路管理信息系统;方便起见;下一个源码来改;


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系统源码索引的比较好,容易找;记录一下;


0 0
原创粉丝点击