#include "stdafx.h" #include "coretools.h" #include "FlangeDlg.h" #include "GasketDlg.h" #include "FlangeRecDlg.h" extern int getMaxIDFromDB(LPCTSTR pszField, LPCTSTR pszTbl, CUIISQLiteServer *pDb); IMPLEMENT_DYNAMIC(CFlangeDlg, CDialog) CFlangeDlg::CFlangeDlg(CWnd* pParent /*=NULL*/) : CDialog(CFlangeDlg::IDD, pParent) { m_dPressure = 1.0; m_nDN = 100; m_pDb = NULL; m_sLevel = _T(""); m_sPro = _T(""); } CFlangeDlg::~CFlangeDlg() { } void CFlangeDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LISTFLANGE, m_wndListFlange); DDX_Control(pDX, IDC_LISTGASKET, m_wndListGasket); DDX_Control(pDX, IDC_COMBOPRE, m_wndComboPre); DDX_Control(pDX, IDC_LIST1, m_wndFlangeEndF1); } BEGIN_MESSAGE_MAP(CFlangeDlg, CDialog) ON_BN_CLICKED(IDOK, &CFlangeDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON3,&CFlangeDlg::OnAddFlange) ON_BN_CLICKED(IDC_BUTTON1, &CFlangeDlg::OnAddGasket) ON_BN_CLICKED(IDC_DEL_GASKET, &CFlangeDlg::OnRemoveGasket) ON_BN_CLICKED(IDC_MODIFY_GASKET, &CFlangeDlg::OnModifyGasket) ON_BN_CLICKED(IDC_DEL_FLANGE, &CFlangeDlg::OnRemoveFlange) ON_BN_CLICKED(IDC_MODIFY_FLANGE, &CFlangeDlg::OnModifyFlange) END_MESSAGE_MAP() void CFlangeDlg::SetPressure(double dPre) { m_dPressure = dPre; } void CFlangeDlg::SetLevel(LPCTSTR pszODNo, LPCTSTR pszPro, LPCTSTR pszLevel) { m_sLevel = pszLevel; m_sPro = pszPro; } void CFlangeDlg::SetDN(int nDn) { m_nDN = nDn; } void CFlangeDlg::GetFlangeValues(CStringArray& arValues) { arValues.Append(m_arFlangeVals); } void CFlangeDlg::GetGasketValues(CStringArray& arValues) { arValues.Append(m_arGasketVals); } BOOL CFlangeDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndListFlange.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(1,_T("法兰外径"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(2,_T("法兰高度"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(3,_T("法兰厚度"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(3,_T("法兰厚度"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(4,_T("法兰颈"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(5,_T("法兰类型"),LVCFMT_LEFT,100,80); //m_wndListFlange.InsertColumn(6,_T("端面"),LVCFMT_LEFT,100,80); m_wndListFlange.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_wndListGasket.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80); m_wndListGasket.InsertColumn(1,_T("材质"),LVCFMT_LEFT,100,80); m_wndListGasket.InsertColumn(2,_T("压力"),LVCFMT_LEFT,50,50); m_wndListGasket.InsertColumn(3,_T("垫片厚度"),LVCFMT_LEFT,50,50); m_wndListGasket.InsertColumn(4,_T("描述"),LVCFMT_LEFT,200,200); m_wndListGasket.SetExtendedStyle(LVS_EX_FULLROWSELECT); ShowFlange(); ShowGasket(); if (m_nDN <= 2000) { CWnd *pWnd(NULL); pWnd = GetDlgItem(IDC_MODIFY_FLANGE); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDC_MODIFY_GASKET); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDC_DEL_GASKET); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDC_DEL_FLANGE); if (pWnd) pWnd->ShowWindow(SW_HIDE); } m_wndComboPre.SetCurSel(0);//?? 常压 CString sText; for (int i = 0;i < m_wndComboPre.GetCount();i++) { m_wndComboPre.GetLBText(i,sText); if (fabs(m_dPressure - _ttof(sText)) < 1.e-3) { m_wndComboPre.SetCurSel(i); break; } } return TRUE; } void CFlangeDlg::ShowFlange() { /*!!! 此处为得到所有满足条件的法兰,所以无法使用 CoreTools::QueryFlangData() 函数 !!!*/ CString sSQL,sTemp; if (m_sLevel.IsEmpty())//没有等级 { sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \ where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f"),m_nDN,m_dPressure - 0.1,m_dPressure + 0.1); } else { //项目 等级 压力 -->标准号 sSQL.Format(_T("select DISTINCT [标准号] from AecSpecFlange where [项目名称]='%s' and [等级名称]='%s' and [类别]='法兰' and [压力]>%.1f and [压力]<%.1f "), m_sPro,m_sLevel, m_dPressure - 0.1, m_dPressure + 0.1); CString sStd; m_pDb->GetSelData(sSQL, sStd); if (sStd.IsEmpty()) { sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \ where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f"), m_nDN, m_dPressure - 0.1, m_dPressure + 0.1); } else { sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \ where [公称直径]=%d and [标准号]='%s' and [压力]>%.1f and [压力]<%.1f"), m_nDN, sStd,m_dPressure - 0.1, m_dPressure + 0.1); } } m_wndListFlange.DeleteAllItems(); std::vector> ars; m_pDb->GetSelDataEx(sSQL, ars); if (!ars.empty()) { for (size_t i(0); i < ars.size(); ++i) { std::vector ss(ars[i]); if (ss.size() < 6) continue; int idx = m_wndListFlange.InsertItem(0, ss[0]); m_wndListFlange.SetItemText(idx, 1, ss[1]); m_wndListFlange.SetItemText(idx, 2, ss[2]); m_wndListFlange.SetItemText(idx, 3, ss[3]); m_wndListFlange.SetItemText(idx, 4, ss[4]); m_wndListFlange.SetItemText(idx, 5, ss[5]); //m_wndListFlange.SetItemText(idx, 6, ss[6]); } } else { //按1.0查询 sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \ where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f"), m_nDN, 0.8, 1.1); m_pDb->GetSelDataEx(sSQL, ars); if (!ars.empty()) { for (size_t i(0); i < ars.size(); ++i) { std::vector ss(ars[i]); if (ss.size() < 6) continue; int idx = m_wndListFlange.InsertItem(0, ss[0]); m_wndListFlange.SetItemText(idx, 1, ss[1]); m_wndListFlange.SetItemText(idx, 2, ss[2]); m_wndListFlange.SetItemText(idx, 3, ss[3]); m_wndListFlange.SetItemText(idx, 4, ss[4]); m_wndListFlange.SetItemText(idx, 5, ss[5]); //m_wndListFlange.SetItemText(idx, 6, ss[6]); } } else { AfxMessageBox(_T("没有查到压力为 %.1f mpa 的法兰数据!"), m_dPressure); } } m_wndListFlange.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); CStringArray arVals; sSQL = _T("select distinct [端面型式] from AecFace"); m_pDb->GetSelData(sSQL, arVals); for (int i = 0;i < arVals.GetSize();i++) { m_wndFlangeEndF1.AddString(arVals.GetAt(i)); } } void CFlangeDlg::ShowGasket() { //最小1.6 if (m_dPressure - 1.0 < 1.e-3) m_dPressure = 1.6; m_wndListGasket.DeleteAllItems(); CString sSQL,sTemp; if (m_sLevel.IsEmpty()) { sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述] from AecSpecGasket \ where [公称直径]=%d and [压力]>%.1f"),m_nDN,m_dPressure - 0.1); } else { sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述] from AecSpecGasket \ where [项目名称]='%s' and [等级名称]='%s' and [公称直径]=%d and [压力]>%.1f"),m_sPro,m_sLevel, m_nDN, m_dPressure - 0.1); } CStringArray arValues; CUIIValueTable table; m_pDb->GetSelData(sSQL, table); if (table.GetTableLogicSize() > 0) { for (int i = 0; i < table.GetTableLogicSize(); i++) { arValues.RemoveAll(); table.GetValueRecord(i, arValues); sTemp = arValues.GetAt(0); m_wndListGasket.InsertItem(0, sTemp); sTemp = arValues.GetAt(1); m_wndListGasket.SetItemText(0, 1, sTemp); sTemp = arValues.GetAt(2); m_wndListGasket.SetItemText(0, 2, sTemp); sTemp = arValues.GetAt(3); m_wndListGasket.SetItemText(0, 3, sTemp); sTemp = arValues.GetAt(4); m_wndListGasket.SetItemText(0, 4, sTemp); } if (table.GetTableLogicSize() > 0) m_wndListGasket.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED); } else { sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述] from AecSpecGasket \ where [公称直径]=%d"),m_nDN); m_pDb->GetSelData(sSQL, table); if (table.GetTableLogicSize() > 0) { for (int i = 0; i < table.GetTableLogicSize(); i++) { arValues.RemoveAll(); table.GetValueRecord(i, arValues); sTemp = arValues.GetAt(0); m_wndListGasket.InsertItem(i, sTemp); sTemp = arValues.GetAt(1); m_wndListGasket.SetItemText(i, 1, sTemp); sTemp = arValues.GetAt(2); m_wndListGasket.SetItemText(i, 2, sTemp); sTemp = arValues.GetAt(3); m_wndListGasket.SetItemText(i, 3, sTemp); sTemp = arValues.GetAt(4); m_wndListGasket.SetItemText(i, 4, sTemp); } if (table.GetTableLogicSize() > 0) m_wndListGasket.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); } else { AfxMessageBox(_T("没有查到压力为 %.1f mpa 的 垫片数据信息!")); } } } void CFlangeDlg::SetAdoDb(CUIISQLiteServer *pDb) { m_pDb = pDb; } void CFlangeDlg::GetEndF1(CString &sEndF) { //端面型式在 m_arFlangeVals 的下标 5(0公称直径 1法兰外径 2法兰高度 3法兰厚度 4法兰颈 5端面1 6端面2) sEndF = _T("FF"); if (m_arFlangeVals.GetSize() > 5 && !m_arFlangeVals.GetAt(5).IsEmpty()) sEndF = m_arFlangeVals.GetAt(5); } void CFlangeDlg::GetEndF2(CString &sEndF) { sEndF = _T("FF"); if (m_arFlangeVals.GetSize() > 6 && !m_arFlangeVals.GetAt(6).IsEmpty()) sEndF = m_arFlangeVals.GetAt(6); } void CFlangeDlg::OnBnClickedOk() { int nCount = m_wndListFlange.GetItemCount(); if (nCount == 0) return; POSITION ps = m_wndListGasket.GetFirstSelectedItemPosition(); if (ps == NULL) { AfxMessageBox(_T("没有选择垫片信息!请选择附属的垫片信息")); return; } /* m_wndListFlange.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(1,_T("法兰外径"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(2,_T("法兰高度"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(3,_T("法兰厚度"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(4,_T("法兰颈"),LVCFMT_LEFT,100,80); m_wndListGasket.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80); m_wndListGasket.InsertColumn(1,_T("材质"),LVCFMT_LEFT,100,80); m_wndListGasket.InsertColumn(2,_T("压力"),LVCFMT_LEFT,50,50); m_wndListGasket.InsertColumn(3,_T("垫片厚度"),LVCFMT_LEFT,50,50); m_wndListGasket.InsertColumn(4,_T("描述"),LVCFMT_LEFT,200,200); */ if (m_wndListFlange.GetItemCount() < 1) { AfxMessageBox(_T("没有可用的法兰尺寸!")); return; } if (m_wndListGasket.GetItemCount() < 1) { AfxMessageBox(_T("没有可用的垫片信息!")); return; } CString sEndF1 = _T(""),sEndF2 = _T(""); int nSel = m_wndFlangeEndF1.GetCurSel(); if (nSel != -1) { m_wndFlangeEndF1.GetText(nSel, sEndF1); sEndF2 = sEndF1; } int iSel = m_wndListFlange.GetSelectionMark(); if (iSel == LB_ERR) iSel = 0; CString sDn,sOD,sH,sThick,sN; sDn = m_wndListFlange.GetItemText(iSel,0); sOD = m_wndListFlange.GetItemText(iSel,1); sH = m_wndListFlange.GetItemText(iSel,2); sThick = m_wndListFlange.GetItemText(iSel,3); sN = m_wndListFlange.GetItemText(iSel,4); m_arFlangeVals.RemoveAll(); m_arFlangeVals.Add(sDn); m_arFlangeVals.Add(sOD); m_arFlangeVals.Add(sH); m_arFlangeVals.Add(sThick); m_arFlangeVals.Add(sN); m_arFlangeVals.Add(sEndF1); m_arFlangeVals.Add(sEndF2); iSel = m_wndListGasket.GetSelectionMark(); if (iSel == LB_ERR) iSel = 0; CString sMet,sPre,sT,sDescr; sMet = m_wndListGasket.GetItemText(iSel, 1); sPre = m_wndListGasket.GetItemText(iSel,2); sT = m_wndListGasket.GetItemText(iSel,3); sDescr = m_wndListGasket.GetItemText(iSel,4); m_arGasketVals.Add(sDn); m_arGasketVals.Add(sMet); m_arGasketVals.Add(sPre); m_arGasketVals.Add(sT); m_arGasketVals.Add(sDescr); OnOK(); } void CFlangeDlg::OnAddFlange() { CFlangeRecDlg dlg; dlg.SetAdoDb(m_pDb); dlg.m_nDN = m_nDN; dlg.m_dFD = (int)(2.0 * m_nDN); dlg.m_dH = (int)(0.4 * m_nDN); dlg.m_dt = (int)(0.22 * m_nDN); dlg.m_dFd = (int)(1.4 * m_nDN); if (IDOK == dlg.DoModal() ) { CString sSQL; sSQL.Format(_T("insert into AecFlangeData (") _T("[公称直径]") // integer _T(", [压力]") // float _T(", [法兰类型]") // char(50) _T(", [端面]") // char(50) _T(", [法兰外径]") // integer _T(", [法兰高度]") // integer _T(", [法兰厚度]") // integer _T(", [法兰颈]") // varchar(255) _T(", [标准号])") // char(50) _T("values(%d, %g, '%s', '%s', %d, %d, %d, '%d', '%s')") , dlg.m_nDN , dlg.m_dPress , dlg.m_sType , dlg.m_sEndF1 , dlg.m_dFD , dlg.m_dH , dlg.m_dt , dlg.m_dFd ,dlg.m_sStd); BOOL bRes = m_pDb->ExecuteSQL(sSQL); ShowFlange(); } } void CFlangeDlg::OnAddGasket() { CGasketDlg dlg; dlg.m_nDN = m_nDN; if (IDOK == dlg.DoModal()) { CString sSQL; sSQL.Format(_T("insert into AecSpecGasket ([公称直径],[材质],[压力],[垫片厚度],[描述]) values \ (%d,'%s',%g,%g,'%s')"),dlg.m_nDN,dlg.m_sMat,dlg.m_dPress,dlg.m_dt,dlg.m_sRem); m_pDb->ExecuteSQL(sSQL); ShowGasket(); } } void CFlangeDlg::OnRemoveGasket() { int idx = m_wndListGasket.GetSelectionMark(); if (idx == -1) { AfxMessageBox(_T("请选择一行数据!")); return; } CString s0 = m_wndListGasket.GetItemText(idx, 0); CString s1 = m_wndListGasket.GetItemText(idx, 1); CString s2 = m_wndListGasket.GetItemText(idx, 2); CString s3 = m_wndListGasket.GetItemText(idx, 3); CString s4 = m_wndListGasket.GetItemText(idx, 4); CString sql; sql.Format(_T("delete from AecSpecGasket where [公称直径] = '%s'\ and [材质] = '%s'\ and [压力] = '%s'\ and [垫片厚度] = '%s'\ and [描述] = '%s'"), s0, s1, s2, s3, s4); m_pDb->ExecuteSQL(sql); ShowGasket(); } void CFlangeDlg::OnModifyGasket() { int idx = m_wndListGasket.GetSelectionMark(); if (idx == -1) { AfxMessageBox(_T("请选择一行数据!")); return; } CString s0 = m_wndListGasket.GetItemText(idx, 0); CString s1 = m_wndListGasket.GetItemText(idx, 1); CString s2 = m_wndListGasket.GetItemText(idx, 2); CString s3 = m_wndListGasket.GetItemText(idx, 3); CString s4 = m_wndListGasket.GetItemText(idx, 4); CString sql; sql.Format(_T("select ID from AecSpecGasket where [公称直径] = '%s'\ and [材质] = '%s'\ and [压力] = '%s'\ and [垫片厚度] = '%s'\ and [描述] = '%s'"), s0, s1, s2, s3, s4); CString sId(_T("")); m_pDb->GetSelData(sql, sId); if (sId.IsEmpty()) { AfxMessageBox(_T("未在数据库内找到此数据!")); return; } CGasketDlg dlg; dlg.m_nDN = m_nDN; dlg.m_sMat = s1; dlg.m_dt = TypeConvert::convert(s3); dlg.m_sRem = s4; if (IDOK == dlg.DoModal()) { CString sSQL; sSQL.Format(_T("update AecSpecGasket set [材质] = '%s'\ ,[垫片厚度] = '%d'\ ,[描述] = '%d'\ where [ID] = '%s'") , dlg.m_sMat , dlg.m_dt , dlg.m_sRem , sId); m_pDb->ExecuteSQL(sSQL); ShowGasket(); } } void CFlangeDlg::OnRemoveFlange() { int idx = m_wndListFlange.GetSelectionMark(); if (idx == -1) { AfxMessageBox(_T("请选择一行数据!")); return; } CString s0 = m_wndListFlange.GetItemText(idx, 0); CString s1 = m_wndListFlange.GetItemText(idx, 1); CString s2 = m_wndListFlange.GetItemText(idx, 2); CString s3 = m_wndListFlange.GetItemText(idx, 3); CString s4 = m_wndListFlange.GetItemText(idx, 4); CString sql; sql.Format(_T("delete from AecFlangeData where [公称直径] = '%s'\ and [法兰外径] = '%s'\ and [法兰高度] = '%s'\ and [法兰厚度] = '%s'\ and [法兰颈] = '%s'"), s0, s1, s2, s3, s4); m_pDb->ExecuteSQL(sql); ShowFlange(); } void CFlangeDlg::OnModifyFlange() { int idx = m_wndListFlange.GetSelectionMark(); if (idx == -1) { AfxMessageBox(_T("请选择一行数据!")); return; } CString s0 = m_wndListFlange.GetItemText(idx, 0); CString s1 = m_wndListFlange.GetItemText(idx, 1); CString s2 = m_wndListFlange.GetItemText(idx, 2); CString s3 = m_wndListFlange.GetItemText(idx, 3); CString s4 = m_wndListFlange.GetItemText(idx, 4); CString sql; sql.Format(_T("select id from AecFlangeData where [公称直径] = '%s'\ and [法兰外径] = '%s'\ and [法兰高度] = '%s'\ and [法兰厚度] = '%s'\ and [法兰颈] = '%s'"), s0, s1, s2, s3, s4); CString sId(_T("")); m_pDb->GetSelData(sql, sId); if (sId.IsEmpty()) { AfxMessageBox(_T("未在数据库内找到此数据!")); return; } CFlangeRecDlg dlg; dlg.m_nDN = m_nDN; dlg.m_dFD = TypeConvert::convert(s1); dlg.m_dH = TypeConvert::convert(s2); dlg.m_dt = TypeConvert::convert(s3); dlg.m_dFd = TypeConvert::convert(s4); if (IDOK == dlg.DoModal()) { CString sSQL; sSQL.Format(_T("update AecFlangeData set [法兰外径] = '%d'\ ,[法兰高度] = '%d'\ ,[法兰厚度] = '%d'\ ,[法兰颈] = '%d'\ where [ID]='%s'") , dlg.m_dFD , dlg.m_dH , dlg.m_dt , dlg.m_dFd , sId ); m_pDb->ExecuteSQL(sSQL); ShowFlange(); } }