📄 adodatagridview.cpp
字号:
// AdoDataGridView.cpp : implementation of the CAdoDataGridView class
//
#include "stdafx.h"
#include "AdoDataGrid.h"
#include "AdoDataGridDoc.h"
#include "DlgSendMes.h"
#include "AdoDataGridView.h"
#include "SendMesThread.h"
#include "MainFrm.h"
#include "FileDlgDataBase.h"
#include "SelBookmarks.h"
#include "Columns.h"
#include "Column.h"
#include "PasswordDlg.h"
#include "HaoMaDuanDlg.h"
#include "AddGroupDlg.h"
#define UM_NOTIFYICON WM_USER+2000
#define WM_REFRESH WM_USER+2005
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int MAXNOOFTHREAD=140;
int i_Range=0;
int i_ThreadNum = 0;
int i_HaoMaDuan = 1;
BOOL b_FengDuan = FALSE;
BOOL b_SendFlag = TRUE;
CStringArray s_Send;
CString Password="";
CString s_Begin ="";
/////////////////////////////////////////////////////////////////////////////
// CAdoDataGridView
BOOL ReadReg(const char *subkey, char *itemname, BYTE *buf);
BOOL DealRegInfo(char *subkey, char *itemname, char *buf);
BOOL SaveReg(const char *subkey, char *itemname, BYTE *buf,DWORD type=REG_SZ);
void MakeKey(char *in,char *out);
static char BASED_CODE szFilter[] = "Acess 数据库文件(*.mdb)|*.mdb||";
extern char Name[33];
extern char PassWord[65];
extern char Ip[51];
extern UINT Port;
IMPLEMENT_DYNCREATE(CAdoDataGridView, CFormView)
BEGIN_MESSAGE_MAP(CAdoDataGridView, CFormView)
//{{AFX_MSG_MAP(CAdoDataGridView)
ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
ON_WM_SIZE()
ON_COMMAND(ID_MES_SEND, OnMesSend)
ON_UPDATE_COMMAND_UI(ID_MES_SEND, OnUpdateMesSend)
ON_COMMAND(ID_REC_ADD, OnRecAdd)
ON_COMMAND(ID_APP_EXIT, OnAppExit)
ON_COMMAND(ID_MES_EDIT, OnMesEdit)
ON_WM_DESTROY()
ON_COMMAND(ID_FILE_DATABASE, OnFileDatabase)
ON_UPDATE_COMMAND_UI(ID_FILE_DATABASE, OnUpdateFileDatabase)
ON_UPDATE_COMMAND_UI(ID_REC_ADD, OnUpdateRecAdd)
ON_COMMAND(ID_HELP, OnHelp)
ON_COMMAND(ID_UNDO, OnUndo)
ON_UPDATE_COMMAND_UI(ID_UNDO, OnUpdateUndo)
ON_COMMAND(ID_FENGDUAN, OnFengduan)
ON_UPDATE_COMMAND_UI(ID_FENGDUAN, OnUpdateFengduan)
ON_COMMAND(ID_ADDGROUP, OnAddgroup)
ON_COMMAND(ID_DELGROUP, OnDelgroup)
ON_UPDATE_COMMAND_UI(ID_ADDGROUP, OnUpdateAddgroup)
ON_UPDATE_COMMAND_UI(ID_DELGROUP, OnUpdateDelgroup)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAdoDataGridView construction/destruction
CAdoDataGridView::CAdoDataGridView()
: CFormView(CAdoDataGridView::IDD)
{
//{{AFX_DATA_INIT(CAdoDataGridView)
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CAdoDataGridView::~CAdoDataGridView()
{
}
void CAdoDataGridView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdoDataGridView)
DDX_Control(pDX, IDC_PROGRESS, m_Progress);
DDX_Control(pDX, IDC_LIST1, m_tablesList);
DDX_Control(pDX, IDC_DATAGRID1, m_myDataGrid);
//}}AFX_DATA_MAP
}
BOOL CAdoDataGridView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
// Call the base-class version
return CFormView::PreCreateWindow(cs);
}
void CAdoDataGridView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
b_Undo=FALSE;
i_undo=0;
bAddGroup = FALSE;
m_hIcon = AfxGetApp()->LoadIcon ( MAKEINTRESOURCE ( IDI_ICON1) );//在“开始”菜单条右侧显示程序图标
ShellWnd ( NIM_ADD, m_hIcon );
ReLogin();
}
/////////////////////////////////////////////////////////////////////////////
// CAdoDataGridView printing
BOOL CAdoDataGridView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CAdoDataGridView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CAdoDataGridView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CAdoDataGridView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
}
/////////////////////////////////////////////////////////////////////////////
// CAdoDataGridView diagnostics
#ifdef _DEBUG
void CAdoDataGridView::AssertValid() const
{
CFormView::AssertValid();
}
void CAdoDataGridView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CAdoDataGridDoc* CAdoDataGridView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAdoDataGridDoc)));
return (CAdoDataGridDoc*)m_pDocument;
}
#endif //_DEBUG
BEGIN_EVENTSINK_MAP(CAdoDataGridView, CFormView)
//{{AFX_EVENTSINK_MAP(CAdoDataGridView)
ON_EVENT(CAdoDataGridView, IDC_DATAGRID1, 215 /* Error */, OnErrorDatagrid1, VTS_I2 VTS_PI2)
ON_EVENT(CAdoDataGridView, IDC_DATAGRID1, -602 /* KeyDown */, OnKeyDownDatagrid1, VTS_PI2 VTS_I2)
ON_EVENT(CAdoDataGridView, IDC_DATAGRID1, 204 /* AfterUpdate */, OnAfterUpdateDatagrid1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CAdoDataGridView::BuildConnectStr(CString ConnString )
{
//using namespace dl20; // DataLinks #import
using namespace ado20; // ADO #import
// HRESULT hr;
//IDataSourceLocatorPtr dlPrompt = NULL;
//_ConnectionPtr conn = NULL;
::CoInitialize( NULL );
//Launch DataLink connection dialog
//hr = dlPrompt.CreateInstance(__uuidof(DataLinks));
//conn = dlPrompt->PromptNew();
//if ( conn!=NULL )
//{
m_strConnect.Format("%s",ConnString);
UpdateData( FALSE );
Connect();
//}
}
void CAdoDataGridView::Connect()
{
using namespace ado20; // ADO #import
UpdateData(TRUE);
//open connection
try
{
m_connection.CreateInstance(__uuidof(Connection) );
m_connection->Open( _bstr_t( m_strConnect.GetBuffer(0) ), L"", L"", -1L );
// Calling OnGettables() to populate list of tables.
GetTables();
bAddGroup = TRUE;
}
catch(_com_error &e)
{
GenerateError(e.Error(), e.Description());
bAddGroup = FALSE;
m_connection = NULL;
DisConnect();
}
UpdateData( FALSE );
}
void CAdoDataGridView::GetTables()
{
_bstr_t tablesNames;
CString kooky;
m_tablesList.ResetContent();
UpdateData( TRUE);
try
{
m_recordSet = m_connection->OpenSchema (adSchemaTables,vtMissing,vtMissing);
while ( !m_recordSet->EOF )
{
tablesNames = m_recordSet->Fields->Item[L"TABLE_NAME"]->Value;
kooky = (char*) tablesNames;
if (kooky.Left(4) != "MSys")
m_tablesList.AddString( kooky );
m_recordSet->MoveNext();
}
}
catch(_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
UpdateData( FALSE );
m_recordSet = NULL;
}
void CAdoDataGridView::DisConnect()
{
try
{
/* if (m_recordSet != NULL)
{
m_recordSet->Close();
}
*/
if (m_connection !=NULL)
m_connection->Close();
}
catch(_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
m_tablesList.ResetContent();
m_myDataGrid.SetRefDataSource(NULL);
m_myDataGrid.ClearFields();
m_myDataGrid.Refresh();
}
void CAdoDataGridView::Quit()
{
//Close open connections if any
if(i_ThreadNum==0)
{
DisConnect();
::CoUninitialize( );
ShellWnd ( NIM_DELETE, 0 ); //删除图标
AfxGetApp()->m_pMainWnd->UpdateWindow();
PostMessage(WM_QUIT);
}
else
{
::AfxMessageBox("短讯发送中...");
}
}
void CAdoDataGridView::OnSelchangeList1()
{
int index;
CString strTableName;
_bstr_t cmdtxt;
//get selected tablename
if(m_tablesList.GetSafeHwnd())
{
index = m_tablesList.GetCurSel();
m_tablesList.GetText(index, strTableName);
if(strTableName.GetLength())
{
s_TableName=strTableName;
}
m_recordSet.CreateInstance( __uuidof(Recordset));
try
{
m_recordSet->Open((LPCSTR) strTableName, (LPCSTR) m_strConnect, adOpenKeyset,adLockOptimistic,adCmdTable);
m_myDataGrid.SetRefDataSource(NULL);
m_myDataGrid.SetRefDataSource( (LPUNKNOWN) m_recordSet );
m_myDataGrid.Refresh();
i_RowCount=m_myDataGrid.GetApproxCount();
m_myDataGrid.SetCaption((LPCSTR)strTableName);
b_Undo=TRUE;
i_undo=0;
}
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description(),"请安装MDAC_TYP2.6.EXE软件包");
}
}
}
// This function will display the generated COM error.
void CAdoDataGridView::GenerateError(HRESULT hr, PWSTR pwszDescription,CString decribe)
{
CString strError;
strError += pwszDescription;
strError += "\n\n";
strError += decribe;
AfxMessageBox(strError);
}
void CAdoDataGridView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
// GetWindowRgn(m_tablesList.m_hWnd
if(m_tablesList.GetSafeHwnd())
{
m_tablesList.SetWindowPos(0,8,
7,
cx*74/386,
cy*204/240,
SWP_NOZORDER );
}
if(m_Progress.GetSafeHwnd())
{
m_Progress.SetWindowPos(0,8,
cy*(204+4)/240+7,
cx*371/386,
cy*14/240,
SWP_NOZORDER );
}
if(m_myDataGrid.GetSafeHwnd())
{
m_myDataGrid.SetWindowPos(0,cx*(74+6)/386+8,
7,
cx*291/386,
cy*204/240,
SWP_NOZORDER );
}
SetScrollSizes(MM_TEXT, CSize(cx,cy));
}
void CAdoDataGridView::OnMesSend()
{
// TODO: Add your command handler code here
const char subkey[20] = "software\\GSL_XCSC";
char s_maxno[100]={'\0'};
int max=50;
if(!ReadReg(subkey, "maxno", (BYTE *)s_maxno))
{
MAXNOOFTHREAD=140;
}
else
{
max=atoi(s_maxno);
if(max>140 || max<1)
MAXNOOFTHREAD=140;
else
MAXNOOFTHREAD=max;
}
i_SendTotal_Suc=0;
i_SendTotal_Fai=0;
i_SendTime =0;
b_SendFlag=FALSE;
i_Range=i_RowCount;
m_Time.Format("计时:%.3f 秒",i_SendTime/1000);
m_Fail.Format("失败:%d条",i_SendTotal_Fai);
m_Sucess.Format("成功:%d条",i_SendTotal_Suc);
m_Error.Empty();
WriteStutas(m_Sucess,1);
WriteStutas(m_Fail,2);
WriteStutas(m_Time,3);
WriteStutas(m_Error,0);
UpdateData(FALSE);
if(b_FengDuan)
{
if(this->m_hWnd!=NULL)
GetData(s_TableName,m_strConnect,this->m_hWnd);
else
b_SendFlag=TRUE;
}
else
{
if(!s_TableName.IsEmpty()&&i_RowCount>0)
{
if(this->m_hWnd!=NULL)
{
GetData(s_TableName,m_strConnect,this->m_hWnd);
}
else
b_SendFlag=TRUE;
}
else
{
if(s_TableName.IsEmpty())
MessageBox("请在左边列表中选择用户表","操作信息",MB_ICONWARNING);
else
MessageBox("你选择的用户表是空的","操作信息",MB_ICONWARNING);
b_SendFlag=TRUE;
}
}
}
void CAdoDataGridView::OnUpdateMesSend(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(b_SendFlag);
}
void CAdoDataGridView::GetData(CString str,CString s_Conn,HWND hMain)
{
if(b_FengDuan)
{
CSendMesThread *pSendMes = new CSendMesThread(str,s_Conn,hMain);
pSendMes->CreateThread();
i_ThreadNum++;
return;
}
CSelBookmarks mBook;
iAr.RemoveAll ();
mBook = m_myDataGrid.GetSelBookmarks();
int length = mBook.GetCount();
if( length > 0)
{
VARIANT ret,result;
CColumns mCs;
CColumn mC;
CString szText;
int index;
ret.vt = VT_INT;
// ret.vt = 5;
// mCs = m_myDataGrid.GetColumns();
// long j = mCs.GetCount();
// mC = mCs.GetItem(ret);
//result.vt = VT_INT;
CString strBuf;
for(int i=0;i<length;i++)
{
ret.lVal = i;
result = mBook.GetItem(ret);
index = result.dblVal ;
strBuf.Format("%d",index - 1791);
iAr.Add(strBuf);
// szText = mC.GetText();
}
CSendMesThread *pSendMes = new CSendMesThread(str,s_Conn,hMain,&iAr);
pSendMes->CreateThread();
i_ThreadNum++;
}
else
{
CSendMesThread *pSendMes = new CSendMesThread(str,s_Conn,hMain);
pSendMes->CreateThread();
i_ThreadNum++;
}
//delete pSendMes;
}
void CAdoDataGridView::OnRecAdd()
{
// TODO: Add your command handler code here
/*_CommandPtr cmd; //command object
_RecordsetPtr rs; //recordset object
_ConnectionPtr conn; //connection object
_variant_t vra;
VARIANT *vt1 = NULL;
try
{
//create instance of Command, Connection and Recordset.
cmd.CreateInstance( __uuidof(Command));
rs.CreateInstance(__uuidof(Recordset));
conn.CreateInstance(__uuidof(Connection));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -