📄 qrytoolconnectionevents.cpp
字号:
CQryToolConnectionEvents::m_lRow = lRow+1;
//读记录行信息
while(!pChildFrame->m_bCanceled && !ptrRS->adoEOF)
{
if(lRow >= lMaxRows-1)
{
lMaxRows += 700;
if(!pChildFrame->m_bCanceled)
if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
lMaxRows, 0L) == -1)
throw _T("Unable to Allocate Memory for FlexGrid.");
pTP->m_pGridCtrl->Invalidate();
pTP->m_pGridCtrl->UpdateWindow();
}
//行计数
++lRow;
//列计数
for(long n = 0; n < nCols; n++)
{
try
{
if(!pChildFrame->m_bCanceled)
{
//得到第n列的值
hr = ptrFields->get_Item((vCol = n), &ptrField);
if(FAILED(hr))
{
if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
lRow+1, 0L) == -1)
TRACE(_T("Unable to Allocate Memory for FlexGrid.\n"));
_com_issue_error(hr);
}
//获得第n列的类型并转换成字符串,满足put_TextMatrix函数的输入要求
lType = ptrField->Type;
if(lType == ADODB::adLongVarBinary ||
lType == ADODB::adVarBinary ||
lType == ADODB::adBinary)
bstrBuff = L"<Binary>/<Raw>";
else
bstrBuff = (_bstr_t)ptrField->Value;
}
}
catch(...)
{
//进入此处可能是由于字段类型不匹配导致的异常
if(!pChildFrame->m_bCanceled)
{
VARIANT _result;
VariantInit(&_result);
hr = ptrField->get_Value(&_result);
if(FAILED(hr))
{
if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
lRow+1, 0L) == -1)
TRACE(_T("Unable to Allocate Memory for FlexGrid\n"));
_com_issue_error(hr);
}
//关于CrackStrVariant在COM与VC之间的类型转换,我们
//在第四章中有论述
bstrBuff = (LPCTSTR)CHelpers::CrackStrVariant(_result);
}
}
//调用put_TextMatrix函数在lRow x n处设置bstrBuff值
hr = pTP->m_ptrGridCtrl->put_TextMatrix(lRow, n, bstrBuff);
if(FAILED(hr))
{
if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
lRow+1, 0L) == -1)
TRACE(_T("Unable to Allocate Memory for FlexGrid\n"));
throw _T("Subscript out of range.");
}
}
if(!pChildFrame->m_bCanceled)
{
hr = ptrRS->raw_MoveNext();
if(FAILED(hr))
{
if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
lRow+1, 0L) == -1)
TRACE(_T("Unable to Allocate Memory for FlexGrid\n"));
if(!pChildFrame->m_bCanceled && !pChildFrame->m_bExecuteCompleteHandled)
{
sBuff.Format(
_T("[%d row(s) affected (application specific)]"),
lRow
);
if(pChildFrame->m_strMessages.length())
pChildFrame->m_strMessages += _T("\n\n");
pChildFrame->m_strMessages += sBuff;
}
_com_issue_error(hr);
}
}
}
if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
lRow+1, 0L) == -1)
throw _T("Unable to Allocate Memory for FlexGrid.");
}
if(pChildFrame->m_bCanceled)
CQryToolConnectionEvents::m_lRow = lRow+1;
else
{
if(!pChildFrame->m_bExecuteCompleteHandled)
{
sBuff.Format(
_T("[%d row(s) affected (application specific)]"),
lRow
);
if(pChildFrame->m_strMessages.length())
pChildFrame->m_strMessages += _T("\n\n");
pChildFrame->m_strMessages += sBuff;
}
}
}
}
if(!pChildFrame->m_bIsMultiSetSupported)
break;
}//循环结束条件
while(!pChildFrame->m_bCanceled &&
(ptrRS = ptrRS->NextRecordset(&vRowsAffected)) != NULL);
pChildFrame->CloseRecordset();
return hr;
}
//设置表头信息
void CQryToolConnectionEvents::SetGridHeaderInfo(const MSFlexGridLib::IMSFlexGridPtr&
ptrGridCtrl, const ADODB::FieldsPtr& ptrFields, const long& lCols)
{
if(lCols)
{
ASSERT(ptrGridCtrl != NULL);
ASSERT(ptrFields != NULL);
long lColWidth = 0L;
long nDefinedSize = 0L;
long lFieldNameLength = 0L;
int nArbitraryFactor = 110;
long nMaxWidth = 50;
ADODB::FieldPtr ptrField = NULL;
long lType = ADODB::adEmpty;
_variant_t vCol((long)-1);
for(long n = 0; n < lCols; n++)
{
HRESULT hr = ptrFields->get_Item((vCol = n), &ptrField);
if(FAILED(hr))
_com_issue_error(hr);
nDefinedSize = ptrField->DefinedSize;
lFieldNameLength = ptrField->Name.length();
lType = ptrField->Type;
if(lType == ADODB::adLongVarBinary ||
lType == ADODB::adVarBinary ||
lType == ADODB::adBinary)
{
if(8 < lFieldNameLength)
lColWidth = lFieldNameLength;
else
lColWidth = 8;
}
else
{
if(nDefinedSize < lFieldNameLength)
lColWidth = lFieldNameLength;
else if(nDefinedSize > nMaxWidth)
lColWidth = nMaxWidth;
else
lColWidth = nDefinedSize;
}
hr = ptrGridCtrl->put_ColAlignment(n, MSFlexGridLib::flexAlignLeftCenter);
if(FAILED(hr))
_com_issue_error(hr);
hr = ptrGridCtrl->put_ColWidth(n, (lColWidth+5)*nArbitraryFactor);
if(FAILED(hr))
_com_issue_error(hr);
hr = ptrGridCtrl->put_TextMatrix(0, n, ptrField->Name);
if(FAILED(hr))
_com_issue_error(hr);
}
}
}
UINT ExecuteSQLProcProc(LPVOID lpVoid)
{
ThreadParam* pTP = (ThreadParam*)lpVoid;
ASSERT(pTP != NULL);
CChildFrame* pChildFrame = pTP->m_pFrame;
ASSERT(pChildFrame != NULL);
HRESULT hr = S_OK;
bool bCaughtException = false;
ADODB::_RecordsetPtr ptrRS = pTP->m_ptrRS;
CString sMsg;
try
{
long lState = ADODB::adStateClosed;
hr = ptrRS->get_State(&lState);
if(FAILED(hr))
_com_issue_error(hr);
if(lState != ADODB::adStateClosed)
{
while(!pChildFrame->m_bCanceled && ptrRS != NULL && !ptrRS->adoBOF)
{
while(!pChildFrame->m_bCanceled && !ptrRS->adoEOF)
{
if(!pChildFrame->m_bCanceled)
pChildFrame->m_strProcText += (LPCTSTR)(_bstr_t)ptrRS->Fields->
GetItem(_variant_t((long)0))->Value;
if(!pChildFrame->m_bCanceled)
ptrRS->MoveNext();
}
if(!pChildFrame->m_bCanceled)
pChildFrame->m_strProcText += _T("\n\n");
if(!pChildFrame->m_bCanceled && pChildFrame->m_bIsMultiSetSupported)
ptrRS = ptrRS->NextRecordset(NULL);
}
if(!pChildFrame->m_bCanceled && !pChildFrame->m_strProcText.length())
pChildFrame->m_strProcText = _T("NULL");
}
}
catch(const _com_error& e)
{
if(!pChildFrame->m_bCanceled)
{
bCaughtException = true;
if(pChildFrame->m_strMessages.length())
pChildFrame->m_strMessages += _T("\n\n");
CString sBuff = pChildFrame->GetProviderError();
if(!sBuff.IsEmpty())
pChildFrame->m_strMessages += sBuff;
else
pChildFrame->m_strMessages += pChildFrame->GetComError(e);
}
}
catch(CMemoryException* e)
{
if(!pChildFrame->m_bCanceled)
{
bCaughtException = true;
if(pChildFrame->m_strMessages.length())
pChildFrame->m_strMessages += _T("\n\n");
pChildFrame->m_strMessages += _T("Out-of-Memory.");
}
if(e)
e->Delete();
}
catch(...)
{
if(!pChildFrame->m_bCanceled)
{
bCaughtException = true;
if(pChildFrame->m_strMessages.length())
pChildFrame->m_strMessages += _T("\n\n");
pChildFrame->m_strMessages += _T("Errors occurred.");
}
}
pChildFrame->CloseRecordset();
try
{
if(pChildFrame->m_bIsTSQLSupported && !pChildFrame->m_bCanceled)
{
pChildFrame->m_strSQL.Empty();
if(pTP->m_strSQL.FindNoCase(_T("USE ")) != -1)
{
if(!pChildFrame->SelectDataBaseEx())
TRACE(_T("Error selecting database context.\n"));
}
}
}
catch(...)
{
TRACE(_T("Errors occurred.\n"));
}
try
{
::PostMessage(
pChildFrame->m_hWnd, WM_EXEC_PROC_COMPLETE, bCaughtException, 0L
);
}
catch(...)
{
TRACE(_T("Errors occurred.\n"));
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -