dbmanagerdlg.cpp
来自「利用OLEDB以数据库的方式打开Excell文件」· C++ 代码 · 共 1,946 行 · 第 1/4 页
CPP
1,946 行
void CDBManagerDlg::OnCancel()
{
if( m_pColumnset )
{
m_pColumnset->Close();
delete m_pColumnset;
}
if( m_pTableset )
{
m_pTableset->Close();
delete m_pTableset;
}
if( m_pDynamicBulkSet )
{
m_pDynamicBulkSet->Close();
delete m_pDynamicBulkSet;
}
CDialog::OnCancel();
}
void CDBManagerDlg::OnOK()
{
UpdateData();
CString assure_company;
GetDlgItemText(IDC_PHONE_USER_NAME,m_phone_user_name);
GetDlgItemText(IDC_COMBO_ASSURE_COMPANY,assure_company);
GetDlgItemText(IDC_PHONE_NUM,m_phone_num);
CString csSQL,SQl1;
m_biaoming=biaoming;
SQl1="select * from ["+m_biaoming+"$A1:IV65536] where 1=1";
if (m_phone_user_name !="")
{
SQl1=SQl1+" and [用户姓名]='%s'";
csSQL.Format(SQl1,m_phone_user_name);
SQl1=csSQL;
}
else
{
SQl1=SQl1;
}
if (assure_company !="")
{
SQl1=SQl1+" and [担保公司]='%s'";
csSQL.Format(SQl1,assure_company);
SQl1=csSQL;
}
else
{
SQl1=SQl1;
}
if (m_phone_num !="")
{
SQl1=SQl1+" and [UIM卡号]="+m_phone_num;
csSQL.Format(SQl1);
SQl1=csSQL;
}
else
{
SQl1=SQl1;
}
csSQL=SQl1;
OpenSQLResult( csSQL );
ShowSQLData();
// CDialog::OnOK();
}
void CDBManagerDlg::OnCancelMode()
{
CDialog::OnCancelMode();
}
void CDBManagerDlg::OnOpenConfig()
{
BOOL dwResult;
dwResult = (DWORD)::ShellExecute( m_hWnd, "open", theApp.m_csRootPath + "DBConfig.ini", "", "", SW_SHOWMAXIMIZED );
if ( dwResult <= 32 )
{
MessageBox( " 打开配置文件失败 ", "错误", MB_ICONSTOP );
}
}
BEGIN_EVENTSINK_MAP(CDBManagerDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CDBManagerDlg)
ON_EVENT(CDBManagerDlg, IDC_RSGRIDCTRL_RESULT, 3 /* LButtonUp */, OnLButtonUpRsgridctrlResult, VTS_I4 VTS_I4 VTS_I4)
ON_EVENT(CDBManagerDlg, IDC_RSGRIDCTRL_RESULT, 4 /* LButtonDBClick */, OnLButtonDBClickRsgridctrlResult, VTS_I4 VTS_I4 VTS_I4)
ON_EVENT(CDBManagerDlg, IDC_RSGRIDCTRL_RESULT, 1 /* GridEdited */, OnGridEditedRsgridctrlResult, VTS_I4 VTS_I4 VTS_BSTR)
ON_EVENT(CDBManagerDlg, IDC_RSGRIDCTRL_RESULT, 6 /* RButtonDBClick */, OnRButtonDBClickRsgridctrlResult, VTS_I4 VTS_I4 VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CDBManagerDlg::OnLButtonUpRsgridctrlResult(long nFlags, long lRow, long lCol)
{
if( lRow == 0 )
{
int Riw = 0;
while( Riw < 1000 )
{
CString csContent = m_RsGridResult.GetCellText( 1 + Riw, lCol );
csContent.TrimRight();
csContent.TrimLeft();
if( csContent != "" )
{
if( csContent[0] > '9' || csContent[0] <'0' )
m_RsGridResult.OrderByColumn( lCol, TRUE,TRUE );
else
m_RsGridResult.OrderByColumn( lCol, FALSE,TRUE );
break;
}
Riw++;
}
}
}
void CDBManagerDlg::OnLButtonDBClickRsgridctrlResult(long nFlags, long lRow, long lCol)
{
buf.RemoveAll();
//if (cs_table_name=="[Sheet1$]")
m_biaoming=biaoming;
if (cs_table_name=="["+m_biaoming+"$]")
{
CEditDlg editDlg;
// CCompany companyDlg;
editDlg.m_pCDataBase = &m_Database;
// companyDlg.m_company_pCDataBase=&m_Database;
lRow=m_RsGridResult.GetCurrentRow();
int col_count=m_RsGridResult.GetColCount();
// lCol=m_RsGridResult.GetCurrentColumn();
// CString m_csContent=m_RsGridResult.GetCellDisString(lRow,lCol);
// for (int col=0;col<col_count;col++)
// {
// CString m_csContent=m_RsGridResult.GetCellDisString(lRow,col);
// }
editDlg.m_id=m_RsGridResult.GetCellDisString(lRow,0);
editDlg.m_uim=m_RsGridResult.GetCellDisString(lRow,1);
editDlg.m_type=m_RsGridResult.GetCellDisString(lRow,2);
editDlg.m_cdma_type=m_RsGridResult.GetCellDisString(lRow,3);
editDlg.m_lowest=m_RsGridResult.GetCellDisString(lRow,4);
editDlg.m_name=m_RsGridResult.GetCellDisString(lRow,5);
editDlg.m_person_id=m_RsGridResult.GetCellDisString(lRow,6);
editDlg.m_givemoney=m_RsGridResult.GetCellDisString(lRow,7);
editDlg.m_getphone=m_RsGridResult.GetCellDisString(lRow,8);
editDlg.m_phone_id=m_RsGridResult.GetCellDisString(lRow,9);
editDlg.m_company=m_RsGridResult.GetCellDisString(lRow,10);
editDlg.m_contract_id=m_RsGridResult.GetCellDisString(lRow,11);
editDlg.m_person=m_RsGridResult.GetCellDisString(lRow,12);
editDlg.m_money=m_RsGridResult.GetCellDisString(lRow,13);
editDlg.m_three=m_RsGridResult.GetCellDisString(lRow,14);
editDlg.m_three_shuoming=m_RsGridResult.GetCellDisString(lRow,15);
editDlg.m_six=m_RsGridResult.GetCellDisString(lRow,16);
editDlg.m_six_shuoming=m_RsGridResult.GetCellDisString(lRow,17);
// for (int col=16;col<56;col++)
// {
// editDlg.m_yongjin1.AddString(m_RsGridResult.GetCellDisString(lRow,col));
// }
// int i_content = 0;
// int i_Totol = 0;
for (int i_col=18;i_col<col_count-3;i_col++)
{
CString cs_content=m_RsGridResult.GetCellDisString(lRow,i_col);
buf.Add(cs_content);
// strcpy(buf+i_Totol,m_RsGridResult.GetCellDisString(lRow,i_col));
// i_content=cs_content.GetLength();
// i_Totol += i_content;
}
editDlg.buff=&buf;
// memcpy(editDlg.buff,buf,200);
editDlg.DoModal();
//*********************************显示数据***********************************//
if( editDlg.m_bFlag )
{
CString csSQL="select * from "+cs_table_name;
if (m_pDynamicBulkSet)
{
if (m_pDynamicBulkSet->IsOpen())
m_pDynamicBulkSet->Close();
delete m_pDynamicBulkSet;
m_pDynamicBulkSet = 0;
}
m_pDynamicBulkSet = new CDynamicBulkSet( &m_Database );
// Open the recordset, create the dialog and hand it the recordset
m_pDynamicBulkSet->Open(CRecordset::snapshot, csSQL,
CRecordset::readOnly | CRecordset::useMultiRowFetch);
/*
CODBCFieldInfo info;
int nColumns = m_pDynamicBulkSet->GetODBCFieldCount();
int nRowsFetched = m_pDynamicBulkSet->GetRowsFetched();
while( m_RsGridResult.GetCellText( 1, 1 ) != "" )
{
m_RsGridResult.DeleteRow( 1, 1 );
}
m_RsGridResult.SetColCount( nColumns );
m_RsGridResult.SetRowCount( nRowsFetched + 1 );
if( nColumns == 1 || nRowsFetched == 1 )
{
m_RsGridResult.InsertRow( 0, 1 );
}
long* rgLength;
LPSTR rgData;
CString strData;
// for each column, retrieve the field name and
// insert the field name in the header
for (int nField = 0; nField < nColumns; nField++)
{
m_pDynamicBulkSet->GetODBCFieldInfo(nField, info);
if ( !m_RsGridResult.SetCellText( 0, nField, info.m_strName))
{
return ;
}
rgData = (LPSTR)m_pDynamicBulkSet->m_ppvData[nField];
rgLength = (long*)m_pDynamicBulkSet->m_ppvLengths[nField];
for (int nRow = 0; nRow < nRowsFetched; nRow++)
{
int nStatus = m_pDynamicBulkSet->GetRowStatus(nRow + 1);
// Get the string to display
if (nStatus == SQL_ROW_DELETED)
strData = _T("<DELETED>");
else if (nStatus == SQL_ROW_NOROW)
// Shouldn't get this since rows fetched is checked
strData = _T("<NO_ROW>");
else if (rgLength[nRow] == SQL_NULL_DATA)
strData = _T("<NULL>");
else
strData = &rgData[nRow * MAX_TEXT_LEN];
m_RsGridResult.SetCellText(nRow + 1, nField,
strData );
}
}
*/
/*
CODBCFieldInfo info;
CStringArray csTotalContent;
int iTotalRows = 0;
int nColumns = m_pDynamicBulkSet->GetODBCFieldCount();
m_RsGridResult.SetColCount( nColumns );
long* rgLength;
LPSTR rgData;
CString strData;
// for each column, retrieve the field name and
// insert the field name in the header
for (int nField = 0; nField < nColumns; nField++)
{
m_pDynamicBulkSet->GetODBCFieldInfo(nField, info);
if ( !m_RsGridResult.SetCellText( 0, nField, info.m_strName))
{
return;
}
while (!m_pDynamicBulkSet->IsEOF())
{
int nRowsFetched = m_pDynamicBulkSet->GetRowsFetched();
if( nField == 0 )
iTotalRows += nRowsFetched;
rgData = (LPSTR)m_pDynamicBulkSet->m_ppvData[nField];
rgLength = (long*)m_pDynamicBulkSet->m_ppvLengths[nField];
for (int nRow = 0; nRow < nRowsFetched; nRow++)
{
int nStatus = m_pDynamicBulkSet->GetRowStatus(nRow + 1);
// Get the string to display
if (nStatus == SQL_ROW_DELETED)
strData = _T("<DELETED>");
else if (nStatus == SQL_ROW_NOROW)
// Shouldn't get this since rows fetched is checked
strData = _T("<NO_ROW>");
else if (rgLength[nRow] == SQL_NULL_DATA)
strData = _T("<NULL>");
else
strData = &rgData[nRow * MAX_TEXT_LEN];
csTotalContent.Add( strData );
}
m_pDynamicBulkSet->MoveNext();
}
m_pDynamicBulkSet->MoveFirst();
}
while( m_RsGridResult.GetCellText( 1, 1 ) != "" )
{
m_RsGridResult.DeleteRow( 1, 1 );
}
m_RsGridResult.SetRowCount( iTotalRows + 1 );
if( nColumns == 1 || iTotalRows == 1 )
{
m_RsGridResult.InsertRow( 0, 1 );
}
for (int nFields = 0; nFields < nColumns; nFields++)
{
for (int nRow = 0; nRow < iTotalRows; nRow++)
{
m_RsGridResult.SetCellText(nRow + 1, nFields, csTotalContent.GetAt( nRow + nFields * iTotalRows ) );
}
}
*/
CODBCFieldInfo info;
CStringArray csTotalContent;
int iTotalRows = 0;
int nColumns = m_pDynamicBulkSet->GetODBCFieldCount();
m_RsGridResult.SetColCount( nColumns );
long* rgLength;
LPSTR rgData;
CString strData;
while (!m_pDynamicBulkSet->IsEOF())
{
int nRowsFetched = m_pDynamicBulkSet->GetRowsFetched();
iTotalRows += nRowsFetched;
for (int nRow = 0; nRow < nRowsFetched; nRow++)
{
for (int nField = 0; nField < nColumns; nField++)
{
m_pDynamicBulkSet->GetODBCFieldInfo(nField, info);
if( nRow == 0 )
{
if ( !m_RsGridResult.SetCellText( 0, nField, info.m_strName))
{
return;
}
}
rgData = (LPSTR)m_pDynamicBulkSet->m_ppvData[nField];
rgLength = (long*)m_pDynamicBulkSet->m_ppvLengths[nField];
int nStatus = m_pDynamicBulkSet->GetRowStatus(nRow + 1);
// Get the string to display
if (nStatus == SQL_ROW_DELETED)
strData = _T("<DELETED>");
else if (nStatus == SQL_ROW_NOROW)
// Shouldn't get this since rows fetched is checked
strData = _T("<NO_ROW>");
else if (rgLength[nRow] == SQL_NULL_DATA)
strData = _T("<NULL>");
else
strData = &rgData[nRow * MAX_TEXT_LEN];
csTotalContent.Add( strData );
}
}
m_pDynamicBulkSet->MoveNext();
}
while( m_RsGridResult.GetCellText( 1, 1 ) != "" )
{
m_RsGridResult.DeleteRow( 1, 1 );
}
m_RsGridResult.SetRowCount( iTotalRows + 1 );
if( nColumns == 1 || iTotalRows == 1 )
{
m_RsGridResult.InsertRow( 0, 1 );
}
for (int nRow = 0; nRow < iTotalRows; nRow++)
{
for (int nFields = 0; nFields < nColumns; nFields++)
{
m_RsGridResult.SetCellText(nRow + 1, nFields, csTotalContent.GetAt( nFields + nRow * nColumns ) );
}
}
//****************************************************************************//
}
}
}
void CDBManagerDlg::OnGridEditedRsgridctrlResult(long iRow, long iCol, LPCTSTR lpszData)
{
// TODO: Add your control notification handler code here
}
void CDBManagerDlg::OnAddtolist()
{
int iNowSel = m_ListCtrl.GetCurSel();
CString csNowSel;
m_ListCtrl.GetText( iNowSel, csNowSel );
int iNowSel2 = m_ListCtrl2.GetCurSel();
CString csNowSel2;
m_ListCtrl2.GetText( iNowSel2, csNowSel2 );
int iRow = m_RsGridView.GetCurrentRow();
int iRow2 = m_RsGridView2.GetCurrentRow();
CString m_csListCurrent = m_RsGridView.GetCellText(iRow,0);
CString m_csListCurrent2 = m_RsGridView2.GetCellText(iRow2,0);
int nIndex=m_ListCorrespond.GetItemCount();
int x_count=m_ListCorrespond.InsertItem(nIndex,csNowSel);//插入一新行
m_ListCorrespond.SetItemText(x_count,1,m_csListCurrent);
m_ListCorrespond.SetItemText(x_count,2,"<--");
m_ListCorrespond.SetItemText(x_count,3,csNowSel2);
m_ListCorrespond.SetItemText(x_count,4,m_csListCurrent2);
/*
int iNowSel = m_ListCorrespond.GetCurrentRow();
CString csNowSel,table_name;
m_ListCtrl.GetText( iNowSel, csNowSel );
field_info=csNowSel;
int Length = field_info.GetLength();
*/
}
void CDBManagerDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_ListCorrespond.DeleteItem(m_item);
}
void CDBManagerDlg::OnTempToWhole()
{
CString m_stempString;
//////////////////////////////////////////
int nIndex = m_ListCorrespond.GetItemCount();
for (int i=0; i<nIndex; i++)
{
CString ListTable1 = m_ListCorrespond.GetItemText(i, 0 ) ;
CString ListField1 = m_ListCorrespond.GetItemText(i, 1 ) ;
CString ListTable2 = m_ListCorrespond.GetItemText(i, 3 ) ;
CString ListField2 = m_ListCorrespond.GetItemText(i, 4 ) ;
ListTable1 = "[" + ListTable1 + "A1:IV65536]";
ListField1 = "[" + ListField1 + "]";
ListTable2 = "[" + ListTable2 + "A1:IV65536]";
ListField2 = "[" + ListField2 + "]";
// m_stempString.Format(" SELECT %s.[用户号码],%s.%s FROM %s,%s WHERE %s.[用户号码] = %s.[用户号码] ", csNowSel,csNowSel,ListContent2,csNowSel,m_sWholeSheet,m_sWholeSheet,csNowSel);
m_stempString.Format("SELECT %s.[用户号码] ,%s.%s FROM %s,%s WHERE %s.[UIM卡号] = %s.[用户号码]",ListTable2,ListTable2,ListField2,ListTable2,ListTable1,ListTable1,ListTable2);
CDynamicBulkSet * TempSet;
CODBCFieldInfo info;
TempSet = new CDynamicBulkSet( &m_Database );
TempSet->Open(CRecordset::snapshot, m_stempString,CRecordset::readOnly | CRecordset::useMultiRowFetch);
while(!TempSet->IsEOF())
{
int nColumns = TempSet->GetODBCFieldCount();
int nRowsFetched = TempSet->GetRowsFetched();
long* rgLength;
LPSTR rgData;
CString strData;
// for each column, retrieve the field name and
// insert the field name in the header
CStringArray Array1, Array2;
for (int nField = 0; nField < nColumns; nField++)
{
TempSet->GetODBCFieldInfo(nField, info);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?