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

📄 executesqlproc.cpp

📁 快速SQL交互工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			{
				if(pChildFrame->m_bSQLRowCountSupported && !pChildFrame->m_bCanceled)
				{
					nRowsAffected = -1;
					if(::SQLRowCount(pChildFrame->m_pSet->m_hstmt, &nRowsAffected) !=
						SQL_SUCCESS)
						TRACE(_T("Error getting rows affected info.\n"));
					
					if(nRowsAffected != -1)
						sBuff.Format(_T("(%d row(s) affected)"), nRowsAffected);
					if(pChildFrame->m_strMessages.length())
						pChildFrame->m_strMessages += _T("\n\n");
					pChildFrame->m_strMessages += sBuff;
				}
			}
			else
			{
				if(::SendMessage(pChildFrame->m_hWnd, WM_GET_GRID_CTRL,
					nCols, 0L) == -1)
					throw _T("Failed to create grid control.");
				if(!pChildFrame->m_bCanceled)
					CExecuteSQLProc::SetGridHeaderInfo(
						pTP->m_ptrGridCtrl, pChildFrame->m_pSet
						);
				if(!pChildFrame->m_bCanceled && !pChildFrame->m_pSet->IsBOF())
				{
					if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
						lMaxRows, 0L) == -1)
						throw _T("Unable to Allocate Memory for FlexGrid.");
					
					if(pChildFrame->m_bCanceled)
						CExecuteSQLProc::m_lRow = lRow+1;
					
					try
					{
						pChildFrame->m_pSet->MoveNext();
					}
					catch(CDBException* e)
					{
						if(e)
						{
							if(!pChildFrame->m_bCanceled)
							{
								if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
									lRow+1, 0L) == -1)
									TRACE(_T("Unable to Allocate Memory for FlexGrid\n"));
							
								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;
							}

							throw e;
						}
					}

					while(!pChildFrame->m_bCanceled && !pChildFrame->m_pSet->IsEOF())
					{     
						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;
						CExecuteSQLProc::m_lRow = lRow+1;
						for(int n = 0; n < nCols; n++)
						{
							try
							{
								pChildFrame->m_pSet->GetFieldValue(n, sBuff);
							}
							catch(CDBException* e)
							{
								if(e)
								{
									if(!pChildFrame->m_bCanceled)
										if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
											lRow+1, 0L) == -1)
											TRACE(_T("Unable to Allocate Memory for FlexGrid.\n"));
									
									throw e;
								}
							}
							bstrBuff = (LPCTSTR)sBuff;
							if(FAILED(pTP->m_ptrGridCtrl->put_TextMatrix(
								lRow, n, bstrBuff)))
							{
								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)
						{
							try
							{
								pChildFrame->m_pSet->MoveNext();
							}
							catch(CDBException* e)
							{
								if(e)
								{
									if(!pChildFrame->m_bCanceled)
									{
										if(::SendMessage(pChildFrame->m_hWnd, WM_SET_GRID_ROWS,
											lRow+1, 0L) == -1)
											TRACE(_T("Unable to Allocate Memory for FlexGrid\n"));
									
										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;
									}

									throw e;
								}
							}
						}
					}
					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)
					CExecuteSQLProc::m_lRow = lRow+1;
				else
				{
					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;
				}
			}
		}
	}
	pChildFrame->CloseRecordset();
}

void CExecuteSQLProc::SetGridHeaderInfo(const MSFlexGridLib::IMSFlexGridPtr&
	ptrGridCtrl, CRecordsetEx* pSet)
{
	ASSERT(ptrGridCtrl != NULL);
	ASSERT(pSet != NULL);

	CODBCFieldInfo fieldInfo;
	int nPrecision = 0;
	int nFieldLength = 0;
	int nArbitraryFactor = 110;
	int nCols = pSet->GetODBCFieldCount();
	UINT nMaxWidth = 50;
	for(int n = 0; n < nCols; n++)
	{
		pSet->GetODBCFieldInfo(n, fieldInfo);
		nFieldLength = fieldInfo.m_strName.GetLength();
		if(fieldInfo.m_nPrecision < (UDWORD)nFieldLength)
			nPrecision = nFieldLength;
		else if(fieldInfo.m_nPrecision > nMaxWidth)
			nPrecision = nMaxWidth;
		else
			nPrecision = fieldInfo.m_nPrecision;

		ptrGridCtrl->put_ColAlignment(
			n, MSFlexGridLib::flexAlignLeftCenter
			);
		ptrGridCtrl->put_ColWidth(
			n, (nPrecision+fieldInfo.m_nScale)*nArbitraryFactor
			);
		ptrGridCtrl->put_TextMatrix(
			0, n, (_bstr_t)fieldInfo.m_strName
			);
	}
}

UINT ExecuteSQLProcProc(LPVOID lpVoid)
{
	ThreadParam* pTP = (ThreadParam*)lpVoid;
	ASSERT(pTP != NULL);
	CChildFrame* pChildFrame = pTP->m_pFrame;
	ASSERT(pChildFrame != NULL);
	pChildFrame->m_strProcText.erase();
	bool bCaughtException = false;
	CString sBuff;
	try
	{
		pChildFrame->CloseRecordset();
		if(!pChildFrame->m_bCanceled && pChildFrame->m_pSet->ExecDirect(pTP->m_strSQL))
		{
			if(!pChildFrame->m_bCanceled && !pChildFrame->m_pSet->IsBOF() &&
				pChildFrame->m_pSet->GetODBCFieldCount())
			{
				while(!pChildFrame->m_bCanceled && !pChildFrame->m_pSet->IsEOF())
				{
					pChildFrame->m_pSet->GetFieldValue((short)0, sBuff);
					pChildFrame->m_strProcText += (LPCTSTR)sBuff;
					if(!pChildFrame->m_bCanceled)
						pChildFrame->m_pSet->MoveNext();
				}
			}
			
			// while <::SQLMoreResults> loop. Also, reset the cursor state
			// Microsoft SQL Server, SybaseSQLAnywhere, and Oracle will bail
			// here.
			while(!pChildFrame->m_bCanceled && pChildFrame->m_bIsMultiSetSupported &&
				pChildFrame->m_pSet->FlushResultSet())
			{							
				// Clean up the old column info and build  new one
				if(!pChildFrame->m_bCanceled)
					pChildFrame->m_pSet->AllocAndCacheFieldInfo();
				if(!pChildFrame->m_bCanceled && !pChildFrame->m_pSet->IsBOF() &&
					pChildFrame->m_pSet->GetODBCFieldCount())
				{
					pChildFrame->m_strProcText += _T("\n\n");

					if(!pChildFrame->m_bCanceled)
						pChildFrame->m_pSet->MoveNext();

					while(!pChildFrame->m_bCanceled && !pChildFrame->m_pSet->IsEOF())
					{
						pChildFrame->m_pSet->GetFieldValue((short)0, sBuff);
						pChildFrame->m_strProcText += sBuff;
						if(!pChildFrame->m_bCanceled)
							pChildFrame->m_pSet->MoveNext();
					}
				}
			}

			if(!pChildFrame->m_bCanceled && !pChildFrame->m_strProcText.length())
				pChildFrame->m_strProcText = _T("NULL");
		}
	}
	catch(CDBException* e)
	{
		if(e)
		{
			if(!pChildFrame->m_bCanceled)
			{
				bCaughtException = true;
				
				if(pChildFrame->m_strMessages.length())
					pChildFrame->m_strMessages += _T("\n\n");
			
				if(!e->m_strError.IsEmpty())
					sBuff.Format(
						_T("%s%s"), (LPCTSTR)e->m_strError, (LPCTSTR)e->m_strStateNativeOrigin
						);
				else
					sBuff = e->m_strStateNativeOrigin;
				
				if(sBuff.IsEmpty())
					sBuff = "Errors occurred.";

				pChildFrame->m_strMessages += sBuff;
			}

			e->Delete();
	   }
	}
	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)
		{
			if(pTP->m_strSQL.FindNoCase(_T("USE ")) != -1)
			{
				if(!pChildFrame->SelectDatabase())
					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 + -