📄 userdatadlg.cpp
字号:
{
m_set.Close();
}
if(td.IsOpen())
{
td.Close();
}
return;
}
}
void CUserDataDlg::ShowTable(HTREEITEM hi)
{
//读取表名:
int i;
// CString tn;
tn=m_UsDataTree.GetItemText(hi);
m_UsDataList.SetRedraw(FALSE);
m_UsDataList.DeleteAllItems ();
while(m_UsDataList.DeleteColumn(0));
CDaoTableDef td(&m_Db);
CDaoFieldInfo fi;
td.Open(tn);
m_set.Open(&td);
//1. 添加列:
LV_COLUMN lc;
lc.mask = LVCF_FMT | LVCF_WIDTH |
LVCF_TEXT | LVCF_SUBITEM;
lc.fmt = LVCFMT_CENTER;
lc.cx = 100;
lc.iSubItem = 0;
for(i=0;i<m_set.GetFieldCount();i++)
{
m_set.GetFieldInfo(i,fi);
lc.pszText = fi.m_strName.GetBuffer(fi.m_strName.GetLength());
m_UsDataList.InsertColumn(i, &lc);
}
//2. 添加各个项目(各行):
LVITEM Item;
CString str;
long nItem;
COleVariant var;
m_set.MoveFirst();
nItem=0;
while(!m_set.IsEOF())
{
Item.mask=LVIF_TEXT;
Item.iItem=nItem;
Item.iSubItem=0;
m_set.GetFieldValue(0,var);
str=GetVariantString(var);
Item.pszText=str.GetBuffer(str.GetLength());
m_UsDataList.InsertItem(&Item);
for(i=1;i<m_set.GetFieldCount();i++)
{
//3. 设置各个子项的字符串:
m_set.GetFieldValue(i,var);
str=GetVariantString(var);
m_UsDataList.SetItemText(nItem,i,str);
}
m_set.MoveNext();
nItem++;
}
m_set.Close();
m_UsDataList.SetRedraw();
m_UsDataList.Invalidate();
}
void CUserDataDlg::OnCancel()
{
// TODO: Add extra cleanup here
m_ModelName=_T("");
m_RowEnd=0;
m_RowStart=0;
m_ColNum=0;
UpdateData(false);
CDialog::OnCancel();
}
BOOL CUserDataDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_UsDataList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
((CButton*)GetDlgItem(IDC_RD_INPUT))->SetCheck(TRUE);//变量属性缺省情况为输入变量
m_VList.InsertColumn(0,"变量名",LVCFMT_LEFT,80);
m_VList.InsertColumn(1,"变量说明",LVCFMT_LEFT,275);
m_VList.SetExtendedStyle(LVS_EX_FULLROWSELECT);//设置选中一个位置,则改行均高亮
UpdateVList();
m_ModelVList.InsertColumn(0,"模型名",LVCFMT_LEFT,60);
m_ModelVList.InsertColumn(1,"变量名",LVCFMT_LEFT,60);
m_ModelVList.InsertColumn(2,"是否输入变量",LVCFMT_LEFT,120);
m_ModelVList.InsertColumn(3,"变量说明",LVCFMT_LEFT,180);
m_ModelVList.InsertColumn(4,"对应样本数据列名",LVCFMT_LEFT,150);
m_ModelVList.SetExtendedStyle(LVS_EX_FULLROWSELECT);//设置选中一个位置,则改行均高亮
m_ModelVList.DeleteAllItems();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CUserDataDlg::UpdateVList()
{
int i=0;
CString strSQL;
m_VList.DeleteAllItems();
UpdateData();
// if(!m_Db.IsOpen()) return;
if(!m_recordset) return;
if(m_recordset->IsOpen()) m_recordset->Close();
strSQL.Format ("select * from tab_VariableInfo where Us_Name='%s' and Model_Name is null",username);
m_recordset->Open(dbOpenDynaset,strSQL);
if (!m_recordset->IsEOF())
{
while(!m_recordset->IsEOF())
{
m_VList.InsertItem(i,"");
COleVariant var;
m_recordset->GetFieldValue(2,var);
m_VList.SetItemText(i,0,(LPCTSTR)var.bstrVal);
m_recordset->GetFieldValue(4,var);
m_VList.SetItemText(i,1,(LPCTSTR)var.bstrVal);
m_recordset->MoveNext();
i++;
}
}
m_recordset->Close();
}
void CUserDataDlg::UpdateModelVList()
{
int i=0;
// CString strID;
CString strSQL;
m_ModelVList.DeleteAllItems();
UpdateData();
// CVariInfoRS *m_recordset=new CVariInfoRS(&m_database);
if(!m_database->IsOpen()) return;
if(!m_recordset) return;
if(m_recordset->IsOpen()) m_recordset->Close();
strSQL.Format ("select * from tab_VariableInfo where Model_Name='%s' ",m_ModelName);
m_recordset->Open(dbOpenDynaset,strSQL);
if (!m_recordset->IsEOF())
{
VariInCnt=0;
VariOutCnt=0;
while(!m_recordset->IsEOF())
{
m_ModelVList.InsertItem(i,"");
COleVariant var;
m_recordset->GetFieldValue(1,var);
m_ModelVList.SetItemText(i,0,(LPCTSTR)var.bstrVal);
m_recordset->GetFieldValue(2,var);
m_ModelVList.SetItemText(i,1,(LPCTSTR)var.bstrVal);
m_recordset->GetFieldValue(3,var);
m_ModelVList.SetItemText(i,2,(var.boolVal==0)?"FALSE":"TRUE");
if(var.boolVal==0)
VariOutCnt++;
else VariInCnt++;
m_recordset->GetFieldValue(4,var);
m_ModelVList.SetItemText(i,3,(LPCTSTR)var.bstrVal);
m_recordset->GetFieldValue(5,var);
m_ModelVList.SetItemText(i,4,(LPCTSTR)var.bstrVal);
m_recordset->MoveNext();
i++;
}
}
m_recordset->Close();
}
void CUserDataDlg::OnBtnRefresh()
{
// TODO: Add your control notification handler code here
UpdateModelVList();
}
void CUserDataDlg::OnBtnMvnext()
{
// TODO: Add your control notification handler code here
UpdateData();
if(!m_ModelName.IsEmpty())
{
//CVariInfoRS *rs_vinfo=new CVariInfoRS(&m_database);
CString strSQL;
int ItemSel;
COleVariant var;
POSITION pos=m_VList.GetFirstSelectedItemPosition();
if (pos==NULL)
{
AfxMessageBox("没有选择变量!");
return;
}
else
{
ItemSel=m_VList.GetNextSelectedItem(pos);
if(!m_database->IsOpen()) return;
if(!m_recordset) return;
if(m_recordset->IsOpen()) m_recordset->Close();
strSQL.Format("select * from tab_VariableInfo where Variable_Name='%s'",m_VList.GetItemText(ItemSel,0));
m_recordset->Open(dbOpenDynaset,strSQL);
while(!m_recordset->IsEOF())
{
m_recordset->GetFieldValue(1,var);
CString str;
str=(LPCTSTR)var.bstrVal;
if(!str.IsEmpty() && str==m_ModelName)
{
AfxMessageBox("该变量已存在于此模型中!");
return;
}
m_recordset->MoveNext();
}
//rs_vinfo->AddNew();
//rs_vinfo->m_Model_Name=m_ModelName;
//bool strVari_In;
if(((CButton*)GetDlgItem(IDC_RD_INPUT))->GetCheck())
{
var.boolVal=true;
// VariInCnt++;
}
else
{
var.boolVal=false;
// VariOutCnt++;
}
//rs_vinfo->m_Us_Name=username;
//rs_vinfo->m_Variable_Name=m_VList.GetItemText(ItemSel,0);
//rs_vinfo->m_Variable_Remarks=m_VList.GetItemText(ItemSel,1);
HTREEITEM hi=m_UsDataTree.GetSelectedItem();
// CString tn;
tn=m_UsDataTree.GetItemText(hi);
CDaoTableDef td(&m_Db);
CDaoFieldInfo fi;
td.Open(tn);
if(m_set.IsOpen())
m_set.Close();
m_set.Open(&td);
// int i;
// i=;
CString strBind_Data;
CString str;
//strBind_Data=tn;
if (m_ColNum>=0 && m_ColNum<(unsigned)m_set.GetFieldCount())//zdh
{
m_set.GetFieldInfo(m_ColNum,fi);
//CString strBind_Data;
strBind_Data=fi.m_strName;
str.Format("对应数据列名:%s",strBind_Data);
AfxMessageBox(str);
}
else
{
AfxMessageBox("不存在此列号!");
return;
}
strSQL.Format("insert into tab_VariableInfo(Us_Name,Model_Name,\
Variable_Name,Variable_Remarks,Bind_Data)\
Values('%s','%s','%s','%s','%s')",\
username,m_ModelName,m_VList.GetItemText(ItemSel,0),\
m_VList.GetItemText(ItemSel,1),strBind_Data);
try
{
if(m_database->CanUpdate())
{
m_database->Execute(strSQL);
if(var.boolVal)
{
if(m_recordset->IsOpen()) m_recordset->Close();
strSQL.Format("select * from tab_VariableInfo where Us_Name='%s'\
and Model_Name='%s' and Variable_Name='%s'",\
username,m_ModelName,m_VList.GetItemText(ItemSel,0));
m_recordset->Open(dbOpenDynaset,strSQL);
m_recordset->Edit();
m_recordset->SetFieldValue(3,var.boolVal);
m_recordset->Update();
}
}
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
//rs_vinfo->Update();
m_recordset->Close();
}
UpdateModelVList();
}
else AfxMessageBox("没有输入模型名!");
UpdateData();
}
void CUserDataDlg::OnClickVlist1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i=m_VList.GetSelectionMark();
if (i==-1)
AfxMessageBox("请先选择一条记录!");
else
m_VList.SetHotItem(i);
*pResult = 0;
}
void CUserDataDlg::OnClickModelvlist(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i=m_ModelVList.GetSelectionMark();
if (i==-1)
AfxMessageBox("请先选择一条记录!");
else
m_ModelVList.SetHotItem(i);
*pResult = 0;
}
void CUserDataDlg::OnClickUsdatalist(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i=m_UsDataList.GetSelectionMark();
if (i==-1)
AfxMessageBox("请先选择一条记录!");
else
m_UsDataList.SetHotItem(i);
*pResult = 0;
}
void CUserDataDlg::OnBtnDelete()
{
// TODO: Add your control notification handler code here
POSITION pos=m_UsDataList.GetFirstSelectedItemPosition();
if (pos==NULL)
{
AfxMessageBox("没有选择记录!");
return;
}
if(!m_Db.IsOpen()) return;
if(m_set.IsOpen()) m_set.Close();
UINT i, uSelectedCount=m_UsDataList.GetSelectedCount();
int ItemSel=-1;
if(uSelectedCount>0)
{//获取所选样本
for(i=0;i<uSelectedCount;i++)
ItemSel=m_UsDataList.GetNextItem(ItemSel,LVNI_SELECTED);
HTREEITEM hi=m_UsDataTree.GetSelectedItem();
// CString tn;
tn=m_UsDataTree.GetItemText(hi);
CDaoTableDef td(&m_Db);
CDaoFieldInfo fi;
td.Open(tn);
td.GetFieldInfo(0,fi);
CString strField;
strField=fi.m_strName;
CString strData;
strData=m_UsDataList.GetItemText(ItemSel,0);
CString strSQL ;
strSQL.Format("select * from %s where %s=%s",tn,strField,strData);
m_set.Open(AFX_DAO_USE_DEFAULT_TYPE,strSQL);
try
{
m_set.Delete();
}
catch(CDaoException* e){
e->ReportError();
e->Delete();
return;
}
m_UsDataList.DeleteItem(ItemSel);
}
}
void CUserDataDlg::OnBtnVdelete()
{
// TODO: Add your control notification handler code here
CString strSQL;
int ItemSel;
POSITION pos=m_ModelVList.GetFirstSelectedItemPosition();
if (pos==NULL)
{
AfxMessageBox("没有选择记录!");
return;
}
else while (pos)
{
ItemSel=m_ModelVList.GetNextSelectedItem(pos);
strSQL.Format("delete from tab_VariableInfo where Model_Name='%s' and Variable_Name='%s'",m_ModelVList.GetItemText(ItemSel,0),m_ModelVList.GetItemText(ItemSel,1));
// if(m_ModelVList.GetItemText(ItemSel,2)=="true")
// VariInCnt--;
// else VariOutCnt--;
m_database->Execute(strSQL);
}
UpdateModelVList();
}
void CUserDataDlg::OnOK()
{
// TODO: Add extra validation here
CString ModelMethod;
UpdateData();
if(m_RowStart>=m_RowEnd||m_RowStart==0)
{
AfxMessageBox("请按要求选择建模数据!");
return;
}
if(m_set.IsOpen())
m_set.Close();
CDaoTableDef td(&m_Db);
td.Open(tn);
m_set.Open(&td);
m_set.MoveLast();
if(m_RowEnd>(unsigned) m_set.GetRecordCount())
{
AfxMessageBox("超过数据集大小!");
return;
}
SampleStart=m_RowStart;
SampleEnd=m_RowEnd;
if(VariInCnt==0||VariOutCnt==0)
{
AfxMessageBox("您尚未完成模型变量定义!");
return;
}
CString str;
switch(m_nModelMethod)
{
case(0):
ModelMethod="神经网络";
str.Format("您已经选用%s方法开始建模,其中输入变量数目:%d、输出变量数目:%d",\
ModelMethod,VariInCnt,VariOutCnt);
AfxMessageBox(str);
break;
case(1):
ModelMethod="线性回归";
if (VariOutCnt>1)
{
AfxMessageBox("输出变量数目〉1,不能采用线性回归方法建模!");
return;
}
str.Format("您已经选用%s方法开始建模,其中输入变量数目:%d、输出变量数目:%d",\
ModelMethod,VariInCnt,VariOutCnt);
AfxMessageBox(str);
break;
default:
AfxMessageBox("请选择建模方法!");
return;
}
nModelMethod=m_nModelMethod;
CString strSQL;
strSQL.Format ("select * from tab_ModelInfo where Us_Name='%s' and Model_Name='%s'\
and Model_Method='%s'",username,m_ModelName,ModelMethod);
if(m_recordset->IsOpen())
m_recordset->Close();
m_recordset->Open (AFX_DAO_USE_DEFAULT_TYPE,strSQL);
if(!m_recordset->IsEOF())
{
AfxMessageBox("此模型已存在!");
return;
}
ModelName=m_ModelName;
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -