⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adodatagridview.cpp

📁 Send SMS useing Com,it is simple
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -