准備開發簡易輸電線路管理信息系統;方便起見;下一個源碼來改;
1 下的源碼運行截圖如下;
2 拷貝一份,改名,打開;
3 用mdb操作工具修改該源碼自帶的mdb數據庫;
修改了其中兩個表為輸電線路表,一個是架線分類表;一個是線路信息表;
加入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系統源碼索引的比較好,容易找;記錄一下;