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

📄 refreshdatadlg.cpp

📁 利用ADO对ACCESS数据库文件进行操作
💻 CPP
字号:
// REFRESHDATADlg.cpp : implementation file
//

#include "stdafx.h"
#include "REFRESHDATA.h"
#include "REFRESHDATADlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CREFRESHDATADlg dialog

CREFRESHDATADlg::CREFRESHDATADlg(CWnd* pParent /*=NULL*/)
	: CDialog(CREFRESHDATADlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CREFRESHDATADlg)
	m_filepath = _T("");
	m_tablename = _T("user");
	m_filepath2 = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CREFRESHDATADlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CREFRESHDATADlg)
	DDX_Control(pDX, IDC_LISTTABLE2, m_listtable2);
	DDX_Control(pDX, IDC_LISTTABLE, m_listtable);
	DDX_Text(pDX, IDC_FILEPATH, m_filepath);
	DDX_Text(pDX, IDC_TABLENAME, m_tablename);
	DDX_Text(pDX, IDC_FILEPATH2, m_filepath2);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CREFRESHDATADlg, CDialog)
	//{{AFX_MSG_MAP(CREFRESHDATADlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_OPENFILE, OnOpenfile)
	ON_BN_CLICKED(IDC_QUERY, OnQuery)
	ON_BN_CLICKED(IDC_OPENFILE2, OnOpenfile2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CREFRESHDATADlg message handlers

BOOL CREFRESHDATADlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CREFRESHDATADlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CREFRESHDATADlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CREFRESHDATADlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CREFRESHDATADlg::OnOpenfile() 
{
	CFileDialog my_Dlg(true);
	if(my_Dlg.DoModal()==IDOK)
		m_filepath=my_Dlg.GetPathName();
	UpdateData(false);// TODO: Add your control notification handler code here
	//打开数据库
	CString con("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
	con+=m_filepath;
	m_pConnection.Connect(LPCTSTR(con));
	//加到list里去
    m_listtable.ResetContent();
	m_pRecordSet = m_pConnection.OpenSchema (adSchemaColumns);
		
				CString strTablename("");
		
			while(!m_pRecordSet.IsEOF())
			{
				CString strValue;
		
				m_pRecordSet.GetValueString(strValue, "TABLE_NAME");
			    if (strValue != strTablename)
				{
					strTablename=strValue;//重要的防止重复,不过
					//还不知为什么要如此?因为这个scheme还包括了
					//内面的字段名与表名同级别的访问
				m_listtable.AddString(LPCTSTR(strValue));
				}
			   m_pRecordSet.MoveNext();
			}
			
		
		
}

void CREFRESHDATADlg::OnQuery() 
{
UpdateData();

CString str_open="select * from ["+m_tablename+"]";
m_pRecordSet.SetAdoConnection(&m_pConnection);
m_pRecordSet.Open(LPCTSTR(str_open));
m_pRecordSet2.SetAdoConnection(&m_pConnection2);
m_pRecordSet2.Open(LPCTSTR(str_open));
//有点问题
if(m_pRecordSet2.GetRecordCount()>0)
PutBToA(m_pRecordSet,m_pRecordSet2);
if(m_pRecordSet.GetRecordCount()>0)
PutBToA(m_pRecordSet2,m_pRecordSet);
MessageBox("操作成功","ppskin",MB_OK);	// TODO: Add your control notification handler code here
	
}

void CREFRESHDATADlg::OnOK() 
{
	// TODO: Add extra validation here
	

	CDialog::OnOK();
}



bool CREFRESHDATADlg::IsBInA(CAdoRecordSet &a,CAdoRecordSet &b)
{//针对其中的个别关键字作判断
   // _RecordsetPtr		m_pRecordsettemp=a.GetRecordset();
	
//temp=b.GetRecordset()->GetCollect(_variant_t((long)1));
	if(a.GetRecordCount()==0)
		return false;
	a.MoveFirst();
//	_variant_t temp=a.GetRecordset()->GetCollect(_variant_t((long)1));
	int rows=a.GetRecordCount();
	a.MoveFirst();
//	temp=a.GetRecordset()->GetCollect(_variant_t((long)1));
	int cols=a.GetFieldsCount();

//	temp=a.GetRecordset()->GetCollect(_variant_t((long)1));

	_variant_t value_a,value_b;
	
	  for(int j=0;j<rows;j++)
	  {
		  for(int i=1;i<cols;i++)
			{// 由于这个数据库的所有的表都是第一列是自动的编号,是各不相同的
			//所以我们从第二列开始加起
	      value_b=b.GetRecordset()->GetCollect(_variant_t((long)i));
		//这个地方对a的存取有问题,用与movefirst无关,即使移到第一行也一样
		  //在Getcollect处出错!
		 //对A的检测
		  try
		{
		
			{
			
			 value_a=a.GetRecordset()->GetCollect(_variant_t((long)i));
		
			}
		}
		catch (_com_error e)
		{
			MessageBox("operate is wrong on a","confirm",MB_OK);
		} 	
	
		  if(value_a!=value_b)
			  break;
		  if(i==cols-1) return true;
			}
		 a.MoveNext();
		}

   return false;
}

void CREFRESHDATADlg::PutOneBToA(CAdoRecordSet &a,CAdoRecordSet &b)
{
   int cols=a.GetFieldsCount();
   	_variant_t value_a,value_b;
  // long value=0; //-----------for vip
   a.AddNew();
  for(int i=1;i<cols;i++)
  {
	  value_b=b.GetRecordset()->GetCollect(_variant_t((long)i));
	  a.GetRecordset()->PutCollect(_variant_t((long)i),value_b);
  }
   /*for(int i=1;i<cols;i++)
	  { CString value1;
	   b.GetValueString(value1,long(i));
	  if(value1!="")
	  {
	   
	   if(a.GetFieldType(long(i)) == adBigInt)
	   { long value;
	   b.GetCollect(long(i),value);
	   a.PutCollect(long(i),value);
	   }
	   
	   else 
	   {
		   CString value;
	   b.GetValueString(value,long(i));
	   a.PutCollect(long(i),value);
	   }
	  }

	   // 下面是正确的运行的方式 ,但不是理想的方式,没有区分
	   //数据的类型
       //CString value;
	   //b.GetValueString(value,long(i));
	   //a.PutCollect(long(i),value);
   }*/

   a.Update();

}

void CREFRESHDATADlg::PutBToA(CAdoRecordSet &a,CAdoRecordSet &b)
{
	b.MoveFirst();
//	a.MoveFirst();
	//测试一下
/*	_variant_t value_a,value_b;
	value_a=a.GetRecordset()->GetCollect(_variant_t((long)1));

	*/	
//	_variant_t value_b;
//	value_b=b.GetRecordset()->GetCollect(_variant_t((long)1));
  	int rows=b.GetRecordCount();
//value_b=b.GetRecordset()->GetCollect(_variant_t((long)1));
	for(int i=0;i<rows;i++)
	{
		if(!IsBInA(a,b))
			PutOneBToA(a,b);
		b.MoveNext();
	}

}

void CREFRESHDATADlg::OnOpenfile2() 
{
	CFileDialog my_Dlg(true);
	if(my_Dlg.DoModal()==IDOK)
		m_filepath2=my_Dlg.GetPathName();
	UpdateData(false);// TODO: Add your control notification handler code here
	//打开数据库
	CString con("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
	con+=m_filepath2;
	m_pConnection2.Connect(LPCTSTR(con));
	//加到list里去
    m_listtable2.ResetContent();
	m_pRecordSet2 = m_pConnection2.OpenSchema (adSchemaColumns);
		
				CString strTablename("");
		
			while(!m_pRecordSet2.IsEOF())
			{
				CString strValue;
		
				m_pRecordSet2.GetValueString(strValue, "TABLE_NAME");
			    if (strValue != strTablename)
				{
					strTablename=strValue;//重要的防止重复,不过
					//还不知为什么要如此?
				m_listtable2.AddString(LPCTSTR(strValue));
				}
			   m_pRecordSet2.MoveNext();
			}
			
		
	
}

//DEL void CREFRESHDATADlg::OnButton1() 
//DEL {
//DEL CString con("driver={SQL Server};Server=127.0.0.1;DATABASE=hilbert");
//DEL 
//DEL 	m_pConnection3.Connect(LPCTSTR(con));
//DEL 	//加到list里去
//DEL     m_pRecordSet3.SetAdoConnection(&m_pConnection3);
//DEL 	int i=0;
//DEL      i=m_pRecordSet3.Open("Select * from RGBtable");
//DEL 	m_pRecordSet3.MoveFirst();
//DEL 	while(!m_pRecordSet3.IsEOF())	
//DEL 	{
//DEL 		m_pRecordSet3.MoveNext();
//DEL 		i++;
//DEL 	}
//DEL 	CString value1;
//DEL 	   m_pRecordSet3.GetValueString(value1,long(0));
//DEL 	  
//DEL   
//DEL 	m_pRecordSet3.AddNew();
//DEL 	
//DEL 	m_pRecordSet3.PutCollect("Red",111);
//DEL 
//DEL 	m_pRecordSet3.PutCollect("Green",222);
//DEL 	m_pRecordSet3.PutCollect("Blue",333);
//DEL 	m_pRecordSet3.PutCollect("HilCode",444);
//DEL 	m_pRecordSet3.Update();
//DEL 
//DEL //	
//DEL 
//DEL 
//DEL 			
//DEL }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -