?? rdapushdlg.cpp
字號:
// RDAPushDlg.cpp : implementation file
//
#include "stdafx.h"
#include "RDAPush.h"
#include "RDAPushDlg.h"
#include "DlgPush.h"
#include "DlgPull.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRDAPushDlg dialog
CRDAPushDlg::CRDAPushDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRDAPushDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRDAPushDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CRDAPushDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRDAPushDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRDAPushDlg, CDialog)
//{{AFX_MSG_MAP(CRDAPushDlg)
ON_BN_CLICKED(IDC_PUSH, OnPush)
ON_BN_CLICKED(IDC_PULL, OnPull)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRDAPushDlg message handlers
BOOL CRDAPushDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
//顯示遠程數據訪問時的錯誤
void CRDAPushDlg::ShowErrors(ISSCEErrors* pISSCEErrors)
{
HRESULT hr;
LONG cbBuf;
LONG i;
LONG lErrorCount;
LONG lErrorIndex;
LONG lParamCount;
LONG lParamIndex;
VARIANT var;
VARIANT varParam;
WCHAR wszBuff[4096];
WCHAR* pwszBuffPos = &wszBuff[0];
BSTR bstr;
ISSCEError* pISSCEError = NULL;
ISSCEParams* pISSCEParams = NULL;
ISSCEParam* pISSCEParam = NULL;
BOOL fSuccess = FALSE;
//初始化變量
VariantInit(&var);
VariantInit(&varParam);
//通過IISSCEErrors接口得到發生錯誤的數量
if(FAILED(hr = pISSCEErrors->get_Count(&lErrorCount)))
goto Exit;
if (lErrorCount <= 0)
{
::MessageBox(NULL, L"No errors!",L"show error", MB_OK);
fSuccess = TRUE;
goto Exit;
}
//用彈出對話框顯示每一條發生的錯誤
for (lErrorIndex = 0; lErrorIndex < lErrorCount; lErrorIndex++)
{
cbBuf = swprintf(pwszBuffPos, L"ERROR %d of %d",
lErrorIndex+1, lErrorCount);
pwszBuffPos += cbBuf;
//得到錯誤記錄
var.vt = VT_I4;
var.lVal = lErrorIndex;
if(FAILED(hr = pISSCEErrors->get_Item(var, &pISSCEError))) goto Exit;
//得到錯誤詳細信息
if (FAILED(hr = pISSCEError->get_Description(&bstr))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"DESCRIPTION: '%s'", bstr);
pwszBuffPos += cbBuf;
SysFreeString(bstr);
//錯誤信息編號
if (FAILED(hr = pISSCEError->get_Number(&i))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"NUMBER: %8.8X\r", i);
pwszBuffPos += cbBuf;
//本地錯誤
if (FAILED(hr = pISSCEError->get_NativeError(&i))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"NATIVE_ERROR: %d", i);
pwszBuffPos += cbBuf;
//得到錯誤源
if (FAILED(hr = pISSCEError->get_Source(&bstr))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"SOURCE: '%s'", bstr);
pwszBuffPos += cbBuf;
SysFreeString(bstr);
//得到錯誤參數信息
if (FAILED(hr = pISSCEError->get_Params(&pISSCEParams))) goto Exit;
//得到錯誤參數的個數
if (FAILED(hr = pISSCEParams->get_Count(&lParamCount))) goto Exit;
//顯示每一個參數
for (lParamIndex = 0; lParamIndex < lParamCount; lParamIndex++)
{
//得到錯誤參數對象
var.vt = VT_I4;
var.lVal = lParamIndex;
if (FAILED(hr = pISSCEParams->get_Item(var, &pISSCEParam))) goto Exit;
//得到并顯示錯誤參數值
if (FAILED(hr = pISSCEParam->get_Param(&varParam))) goto Exit;
if (VT_I4 == varParam.vt || VT_UI4 == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: %d", lParamIndex,
(LONG) varParam.lVal);
}
else if (VT_I2 == varParam.vt || VT_UI2 == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: %d", lParamIndex,
(LONG) varParam.iVal);
}
else if (VT_BSTR == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: '%s'", lParamIndex,
varParam.bstrVal);
}
pwszBuffPos += cbBuf;
//清空參數變量
VariantClear(&varParam);
//釋放參數對象
pISSCEParam->Release();
pISSCEParam = NULL;
}
cbBuf = swprintf(pwszBuffPos, L"");
pwszBuffPos += cbBuf;
}
//用彈出框顯示錯誤信息
::MessageBox(NULL, wszBuff,L"Error", MB_OK);
fSuccess = TRUE;
Exit:
// 釋放錯誤參數對象
if (pISSCEParam)
{
pISSCEParam->Release();
pISSCEParam = NULL;
}
//釋放錯誤參數集對象
if (pISSCEParams)
{
pISSCEParams->Release();
pISSCEParams = NULL;
}
//釋放錯誤對象
if (pISSCEError)
{
pISSCEError->Release();
pISSCEError = NULL;
}
//如果獲取錯誤信息失敗
if (!fSuccess)
{
::MessageBox(NULL, L"Faile to get errors!",L"show error", MB_OK);
}
return;
}
//向服務器提交數據
void CRDAPushDlg::OnPush()
{
ISSCERDA* pCERDA = NULL;
BSTR bStr = NULL;
BSTR bConnectStr = NULL;
BSTR bLocalConnectStr = NULL;
BSTR bLocalTableName = NULL;
SYSTEMTIME systemtime; // 系統時間
double timeTotal; //
__int64 timeStart = 0; // 開始操作時的時間
__int64 timeStop; // 結束操作時的時間
WCHAR wszBuffer[512];
CDlgPush dlgPush;
if (dlgPush.DoModal())
{
//得到pCERDA接口總共消耗的時間
HRESULT hr=CoInitializeEx(NULL,COINIT_MULTITHREADED);
hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA);
ASSERT(hr == S_OK);
ASSERT(pCERDA != NULL);
//1、設置Internet URL
bStr = SysAllocString(dlgPush.m_internetURL);
pCERDA->put_InternetURL(bStr);
SysFreeString(bStr);
//2、設置Internet userName
bStr = SysAllocString(dlgPush.m_internetUsername);
pCERDA->put_InternetLogin(bStr);
SysFreeString(bStr);
//3、設置Internet password
bStr = SysAllocString(dlgPush.m_internetPassword);
pCERDA->put_InternetPassword(bStr);
SysFreeString(bStr);
//4、設置服務器連接串
bConnectStr = SysAllocString(dlgPush.m_connectStr);
//5、設置本地數據庫連接串
bLocalConnectStr = SysAllocString(dlgPush.m_localConnectStr);
pCERDA->put_LocalConnectionString(bLocalConnectStr);
SysFreeString(bStr);
//6、設置本地表名
bLocalTableName = SysAllocString(dlgPush.m_localTableName);
//記錄向服務器提交數據前的時間
GetLocalTime(&systemtime);
SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStart);
//向服務器提交數據
hr = pCERDA->Push(bLocalTableName,bConnectStr, BATCHINGOFF);
SysFreeString(bLocalTableName);
SysFreeString(bConnectStr);
if (SUCCEEDED(hr))
{
//記錄向服務器提交數據后的時間
GetLocalTime(&systemtime);
SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStop);
//記錄向服務器提交數據總的時間
timeTotal = ((double)(timeStop - timeStart) / 10000000);
swprintf(wszBuffer, _T("push succeed!\r\n\r\it takes time = %8.3fseconds!"), timeTotal);
AfxMessageBox(wszBuffer);
}
else
{
//顯示向服務器提交數據失敗信息
ISSCEErrors *pISSCEErrors = NULL;
if(SUCCEEDED(hr = pCERDA->get_ErrorRecords(&pISSCEErrors)))
{
ShowErrors(pISSCEErrors);
pISSCEErrors->Release();
}
}
//釋放遠程訪問接口
CoUninitialize();
pCERDA->Release();
}
}
void CRDAPushDlg::OnPull()
{
ISSCERDA* pCERDA = NULL;
BSTR bStr = NULL;
BSTR bConnectStr = NULL;
BSTR bQueryStr = NULL;
BSTR bLocalConnectStr = NULL;
BSTR bLocalTableName = NULL;
BSTR bErrorTableName = NULL;
RDA_TRACKOPTION trackOption = TRACKINGOFF;
SYSTEMTIME systemtime; // 系統時間
double timeTotal; // 總共消耗的時間
__int64 timeStart = 0; // 開始操作時的時間
__int64 timeStop; // 結束操作時的時間
WCHAR wszBuffer[512];
CDlgPull dlgPull;
if (dlgPull.DoModal())
{
//得到pCERDA接口
HRESULT hr=CoInitializeEx(NULL,COINIT_MULTITHREADED);
hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA);
ASSERT(hr == S_OK);
ASSERT(pCERDA != NULL);
//1、設置Internet URL
bStr = SysAllocString(dlgPull.m_internetURL);
pCERDA->put_InternetURL(bStr);
SysFreeString(bStr);
//2、設置Internet userName
bStr = SysAllocString(dlgPull.m_internetUsername);
pCERDA->put_InternetLogin(bStr);
SysFreeString(bStr);
//3、設置Internet password
bStr = SysAllocString(dlgPull.m_internetPassword);
pCERDA->put_InternetPassword(bStr);
SysFreeString(bStr);
//4、得到跟蹤類型
if (dlgPull.m_tracking == L"TRACKINGON")
{
trackOption = TRACKINGON;
}else if (dlgPull.m_tracking == L"TRACKINGOFF")
{
trackOption = TRACKINGOFF;
}else if (dlgPull.m_tracking == L"TRACKINGON_INDEXES")
{
trackOption = TRACKINGON_INDEXES;
}else if(dlgPull.m_tracking == L"TRACKINGOFF_INDEXES")
{
trackOption = TRACKINGOFF_INDEXES;
}else
{
trackOption = TRACKINGOFF;
}
//5、設置錯誤表名
bErrorTableName = SysAllocString(dlgPull.m_errorTableName);
//6、設置服務器連接串
bConnectStr = SysAllocString(dlgPull.m_connectStr);
//7、設置本地數據庫連接串
bLocalConnectStr = SysAllocString(dlgPull.m_localConnectStr);
pCERDA->put_LocalConnectionString(bLocalConnectStr);
SysFreeString(bStr);
//8、設置本地表名
bLocalTableName = SysAllocString(dlgPull.m_localTableName);
//9、設置查詢的SQL語句
bQueryStr = SysAllocString(dlgPull.m_queryStr);
//記錄獲取服務器數據前的時間
GetLocalTime(&systemtime);
SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStart);
//獲取服務器數據
hr = pCERDA->Pull(bLocalTableName,
bQueryStr,
bConnectStr,
trackOption,
bErrorTableName);
SysFreeString(bLocalTableName);
SysFreeString(bQueryStr);
SysFreeString(bConnectStr);
SysFreeString(bErrorTableName);
if (SUCCEEDED(hr))
{
//記錄獲取服務器數據后的時間
GetLocalTime(&systemtime);
SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStop);
//記錄獲取服務器數據的總時間
timeTotal = ((double)(timeStop - timeStart) / 10000000);
swprintf(wszBuffer, _T("pull success \r\n\r\it takes = %8.3fsecondes"), timeTotal);
AfxMessageBox(wszBuffer);
}
else
{
//顯示獲取服務器數據錯誤
ISSCEErrors *pISSCEErrors = NULL;
if(SUCCEEDED(hr = pCERDA->get_ErrorRecords(&pISSCEErrors)))
{
ShowErrors(pISSCEErrors);
pISSCEErrors->Release();
}
}
//釋放遠程訪問接口
CoUninitialize();
pCERDA->Release();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -