📄 refreshdatadlg.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 + -