📄 rdaexamdlg.cpp
字号:
// RDAExamDlg.cpp : implementation file
//
#include "stdafx.h"
#include "RDAExam.h"
#include "RDAExamDlg.h"
#include "DlgSubmit.h"
#include "DlgPull.h"
#include "DlgPush.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRDAExamDlg dialog
CRDAExamDlg::CRDAExamDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRDAExamDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRDAExamDlg)
// 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 CRDAExamDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRDAExamDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRDAExamDlg, CDialog)
//{{AFX_MSG_MAP(CRDAExamDlg)
ON_BN_CLICKED(IDC_BTNSUBMIT, OnBtnsubmit)
ON_BN_CLICKED(IDC_BTNPULL, OnBtnpull)
ON_BN_CLICKED(IDC_BTNPUSH, OnBtnpush)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRDAExamDlg message handlers
BOOL CRDAExamDlg::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 CRDAExamDlg::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"没有错误信息",L"显示错误", MB_OK);
fSuccess = TRUE;
goto Exit;
}
//用弹出对话框显示每一条发生的错误
for (lErrorIndex = 0; lErrorIndex < lErrorCount; lErrorIndex++)
{
cbBuf = swprintf(pwszBuffPos, L"ERROR %d of %d\r\n",
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'\r\n", bstr);
pwszBuffPos += cbBuf;
SysFreeString(bstr);
//错误信息编号
if (FAILED(hr = pISSCEError->get_Number(&i))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"NUMBER: %8.8X\r\n", i);
pwszBuffPos += cbBuf;
//本地错误
if (FAILED(hr = pISSCEError->get_NativeError(&i))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"NATIVE_ERROR: %d\r\n", i);
pwszBuffPos += cbBuf;
//得到错误源
if (FAILED(hr = pISSCEError->get_Source(&bstr))) goto Exit;
cbBuf = swprintf(pwszBuffPos, L"SOURCE: '%s'\r\n", 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\r\n", lParamIndex,
(LONG) varParam.lVal);
}
else if (VT_I2 == varParam.vt || VT_UI2 == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: %d\r\n", lParamIndex,
(LONG) varParam.iVal);
}
else if (VT_BSTR == varParam.vt)
{
cbBuf = swprintf(pwszBuffPos, L"P%d: '%s'\r\n", lParamIndex,
varParam.bstrVal);
}
pwszBuffPos += cbBuf;
//清空参数变量
VariantClear(&varParam);
//释放参数对象
pISSCEParam->Release();
pISSCEParam = NULL;
}
cbBuf = swprintf(pwszBuffPos, L"\r\n");
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"得到错误信息失败!",L"显示错误", MB_OK);
}
return;
}
//打开执行远程SQL语句窗口
void CRDAExamDlg::OnBtnsubmit()
{
ISSCERDA* pCERDA = NULL;
BSTR bStr = NULL;
BSTR bConnectStr = NULL;
BSTR bQueryStr = NULL;
SYSTEMTIME systemtime; // 系统时间
double timeTotal; // 总共消耗的时间
__int64 timeStart = 0; // 开始操作时的时间
__int64 timeStop; // 结束操作时的时间
WCHAR wszBuffer[512];
CDlgSubmit dlgSubmit;
if (dlgSubmit.DoModal()== IDOK)
{
//得到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(dlgSubmit.m_internetURL);
pCERDA->put_InternetURL(bStr);
SysFreeString(bStr);
//2、设置Internet userName
bStr = SysAllocString(dlgSubmit.m_internetUsername);
pCERDA->put_InternetLogin(bStr);
SysFreeString(bStr);
//3、设置Internet password
bStr = SysAllocString(dlgSubmit.m_internetPassword);
pCERDA->put_InternetPassword(bStr);
SysFreeString(bStr);
//4、设置服务器连接串
bConnectStr = SysAllocString(dlgSubmit.m_connectStr);
//5、设置执行的远程SQL语句
bQueryStr = SysAllocString(dlgSubmit.m_queryStr);
//记录执行SQL语句前的时间
GetLocalTime(&systemtime);
SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStart);
//执行远程SQL语句
hr = pCERDA->SubmitSQL(bQueryStr,bConnectStr);
SysFreeString(bQueryStr);
SysFreeString(bConnectStr);
if (SUCCEEDED(hr))
{
//记录执行SQL语句后的时间
GetLocalTime(&systemtime);
SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStop);
//记录执行SQL语句总共消耗的时间
timeTotal = ((double)(timeStop - timeStart) / 10000000);
swprintf(wszBuffer, _T("执行远程SQL语句成功\r\n总共消耗 = %8.3f秒"), timeTotal);
AfxMessageBox(wszBuffer);
}
else
{
//显示执行远程SQL语句错误
ISSCEErrors *pISSCEErrors = NULL;
if(SUCCEEDED(hr = pCERDA->get_ErrorRecords(&pISSCEErrors)))
{
ShowErrors(pISSCEErrors);
pISSCEErrors->Release();
}
}
//释放远程访问接口
pCERDA->Release();
}
}
//从服务器获取相应数据
void CRDAExamDlg::OnBtnpull()
{
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];
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED );
CDlgPull dlgPull;
if (dlgPull.DoModal()== IDOK)
{
//得到pCERDA接口
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("从服务器获取数据成功\r\n总共消耗 = %8.3f秒"), timeTotal);
AfxMessageBox(wszBuffer);
}
else
{
//显示获取服务器数据错误
ISSCEErrors *pISSCEErrors = NULL;
if(SUCCEEDED(hr = pCERDA->get_ErrorRecords(&pISSCEErrors)))
{
ShowErrors(pISSCEErrors);
pISSCEErrors->Release();
}
}
//释放远程访问接口
pCERDA->Release();
}
}
//向服务器提交数据
void CRDAExamDlg::OnBtnpush()
{
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() == IDOK )
{
//得到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("向服务器提交数据成功\r\n总共消耗 = %8.3f秒"), timeTotal);
AfxMessageBox(wszBuffer);
}
else
{
//显示向服务器提交数据失败信息
ISSCEErrors *pISSCEErrors = NULL;
if(SUCCEEDED(hr = pCERDA->get_ErrorRecords(&pISSCEErrors)))
{
ShowErrors(pISSCEErrors);
pISSCEErrors->Release();
}
}
//释放远程访问接口
pCERDA->Release();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -