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

📄 query.cpp

📁 CT工作站具有打印报告、病历管理、图像处理专家词库等功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	dlg.DoModal();
}

void
Query::OnDblClickMsflexgrid1() 
{
	INT	iCol	= m_grd.GetCol();

	m_bSortInc	= !m_bSortInc;
	m_grd.SetCol(iCol);

	if	(8 == iCol)	m_grd.SetSort((m_bSortInc) ? (7) : (8));
	else			m_grd.SetSort((m_bSortInc) ? (1) : (2));
}

BOOL
Query::RecordExist(CHAR *sID)
{
	return	(TRUE);
}

void
Query::SetSQLOrder(WPARAM wParam, LPARAM lParam)
{
	m_sSQLOrder	= (NULL == lParam) ? (_T("")) : ((CHAR *)(lParam));
}

void
Query::SetSQLWhere(WPARAM wParam, LPARAM lParam)
{
	m_sSQLWhere	= (NULL == lParam) ? (_T("")) : ((CHAR *)(lParam));
}

BOOL
Query::NormalQuery()
{
	CString			sField;
	HENV			henv;
	HDBC			hdbc;
	HSTMT			hStmt;
	CString			sSQL;
	CString			sSQLGetCount;
	CHAR			sBuffer[1000];
	INT				iRecordCount;
	INT				iRow, iCol;

	sSQL			= "SELECT ID,NAME,SEX,AGE,CLASS,ILLNAME,CHECKPOS,CHECKDATE FROM REPORT";
	sSQLGetCount	= "SELECT COUNT(*) FROM REPORT";

	if		(!m_sSQLWhere.IsEmpty())	//	连接 WHERE 子句
	{
		sSQL			+= " ";
		sSQL			+= m_sSQLWhere;
		sSQLGetCount	+= " ";
		sSQLGetCount	+= m_sSQLWhere;
	}

	if		(!m_sSQLOrder.IsEmpty())	//	连接 ORDER BY 子句
	{
		sSQL			+= " ";
		sSQL			+= m_sSQLOrder;
	}

	//	创建 ODBC 环境
	SQLAllocEnv(&henv);
	SQLAllocConnect(henv,&hdbc);
	SQLConnect(hdbc,(unsigned char *)"BXT",SQL_NTS,NULL,0,NULL,0);
	SQLAllocStmt(hdbc,&hStmt);

	SQLFreeStmt(hStmt,SQL_CLOSE);
	SQLFreeStmt(hStmt,SQL_CLOSE);
	RETCODE rt;
	SDWORD cbValue;

	//	获得符合条件的记录数目,并据此来设置表格的行数
	rt	= ::SQLExecDirect(hStmt, (unsigned char *)(sSQLGetCount.GetBuffer(sSQLGetCount.GetLength())), SQL_NTS);
	rt	= ::SQLFetch(hStmt);
	rt	= ::SQLGetData(hStmt, 1, SQL_C_LONG, &iRecordCount, sizeof(INT), &cbValue);
	::SQLFreeStmt(hStmt, SQL_CLOSE);
	m_grd.SetRows(1);
	m_grd.SetRows(iRecordCount + 1);

	rt = SQLExecDirect(hStmt, (unsigned char *)(sSQL.GetBuffer(sSQL.GetLength())), SQL_NTS);

	for	(iRow = 2;; iRow++)
	{
		rt	= SQLFetch(hStmt);
		if	(rt != SQL_SUCCESS && rt != SQL_SUCCESS_WITH_INFO) break;

		m_grd.SetRow(iRow - 1);

		for	(iCol = 1; iCol <= 8; iCol++)
		{
			m_grd.SetCol(iCol);
			if	(4 != iCol)
			{
				memset(sBuffer, 0, sizeof(sBuffer));
				rt		= SQLGetData(hStmt, iCol, SQL_C_CHAR, sBuffer, sizeof(sBuffer), &cbValue);
				sField	= sBuffer;
				sField.TrimLeft();
				sField.TrimRight();
			}
			else
			{
				int		age;
				char	buf[10];
				rt		= SQLGetData(hStmt, iCol, SQL_C_SLONG, &age, sizeof(int), &cbValue);
				sField	= itoa(age, buf, 10);
			}
			m_grd.SetText(sField);
		}
	}
	m_bResultIsEmpty	= (iRow == 2) ? (TRUE) : (FALSE);

	//	释放 ODBC 
	SQLFreeStmt(hStmt,SQL_DROP);
	SQLDisconnect(hdbc);
	SQLFreeConnect(hdbc);
	SQLFreeEnv(henv);

	ShowCurrentRecordInfo();
	UpdateData(FALSE);
	return	(TRUE);
}

BOOL
Query::SimpleQuery(CWnd *pCallerWnd)
{
	CRecordFile			rf;
	BOOL				bReturn;
	INT					iRowIndex;
	CString				sImagePathBackup;

	sImagePathBackup	= ((CBxtDlg *)AfxGetMainWnd())->m_imagepath;
	((CBxtDlg *)AfxGetMainWnd())->m_imagepath	= rf.GetDataPath();

	pCallerWnd->SendMessage(WX_SETRESTRICT, 0, (LPARAM)(&rf));

	bReturn		= rf.OpenFile(RF_FIRST_FILE);
	iRowIndex	= 1;

	m_bResultIsEmpty	= TRUE;
	while	(bReturn)
	{
		if	(rf.IsMatch())
		{
			m_bResultIsEmpty	= FALSE;
			RetrieveRecord((WPARAM)(iRowIndex++), (LPARAM)(&rf));
		}
		bReturn	= rf.OpenFile(RF_NEXT_FILE);
	}
	rf.CloseFile();

	((CBxtDlg *)AfxGetMainWnd())->m_imagepath	= sImagePathBackup;

	m_grd.SetRows(iRowIndex);

	return	(TRUE);
}

BOOL
Query::RetrieveRecord(WPARAM wParam, LPARAM lParam)
{
	LONG		iRowIndex	= (LONG)(wParam);
	CRecordFile	*pRf		= (CRecordFile *)(lParam);
	CHAR		buf[10];
	CString		sBuffer;

	if	(m_grd.GetRows() <= iRowIndex)	m_grd.SetRows(iRowIndex + 1);
	m_grd.SetRow(iRowIndex);

	m_grd.SetCol(1);
	m_grd.SetText(pRf->m_Record.m_Record.m_sID);

	m_grd.SetCol(2);
	m_grd.SetText(pRf->m_Record.m_Record.m_sName);

	m_grd.SetCol(3);
	m_grd.SetText(pRf->m_Record.m_Record.m_sSex);

	m_grd.SetCol(4);
	m_grd.SetText(itoa(pRf->m_Record.m_Record.m_iAge, buf, 10));

	m_grd.SetCol(5);
	m_grd.SetText(pRf->m_Record.m_Record.m_sClass);

	m_grd.SetCol(6);
	m_grd.SetText(pRf->m_Record.m_Record.m_sIllName);

	m_grd.SetCol(7);
	m_grd.SetText(pRf->m_Record.m_Record.m_sCheckPos);

	m_grd.SetCol(8);
	m_grd.SetText(pRf->m_Record.m_Record.m_sCheckDate);

	m_result	= pRf->m_Record.m_Record.m_sResult;


	sBuffer		= pRf->m_Record.m_sReport;
	EDITSTREAM	es	= {(DWORD)(&sBuffer), 0, EditStreamCallBack};
	m_rich.StreamIn(SF_RTF, es);

	return	(TRUE);
}

void
Query::OnButtonSaveAsFile() 
{
	CString			sField;
	HENV			henv;
	HDBC			hdbc;
	SQLHSTMT		hStmt;
	CString			sSQL;
	CString			sSQLGetCount;
	CHAR			sBuffer[10000];
	INT				iRecordCount;
	INT				iRow, iCol;
	CString			sBaseImagePath;
	CHAR			sImagePath[MAX_PATH];
	CHAR			sFileName[MAX_PATH];

	sBaseImagePath	= ((CBxtDlg *)AfxGetMainWnd())->m_imagepath;

	sSQL			= "SELECT ";
	sSQL			+= "AGE,POSTCODE,ID,NAME,SEX,";
	sSQL			+= "CLASS,CHECK,ADDRESS,TELPHONE,CHECKDATE,";
	sSQL			+= "DOCTER,DEVICE,HOSPITAL,RESULT,ILLNAME,";
	sSQL			+= "HOSPID,BEDID,CHECKSTYLE,CHECKPOS,REPORT";
	sSQL			+= " FROM REPORT";

	sSQLGetCount	= "SELECT COUNT(*) FROM REPORT";

	if		(!m_sSQLWhere.IsEmpty())	//	连接 WHERE 子句
	{
		sSQL			+= " ";
		sSQL			+= m_sSQLWhere;
		sSQLGetCount	+= " ";
		sSQLGetCount	+= m_sSQLWhere;
	}

	if		(!m_sSQLOrder.IsEmpty())	//	连接 ORDER BY 子句
	{
		sSQL			+= " ";
		sSQL			+= m_sSQLOrder;
	}

	//	创建 ODBC 环境
	RETCODE rt;
	rt	= SQLAllocEnv(&henv);
	rt	= SQLAllocConnect(henv,&hdbc);
	rt	= SQLConnect(hdbc,(unsigned char *)"BXT",SQL_NTS,NULL,0,NULL,0);
	rt	= SQLAllocStmt(hdbc,&hStmt);

	
	rt	= SQLFreeStmt(hStmt,SQL_CLOSE);
	rt	= SQLFreeStmt(hStmt,SQL_CLOSE);
	SDWORD cbValue;

	//	获得符合条件的记录数目,并据此来设置表格的行数
	rt	= ::SQLExecDirect(hStmt, (unsigned char *)(sSQLGetCount.GetBuffer(sSQLGetCount.GetLength())), SQL_NTS);
	rt	= ::SQLFetch(hStmt);
	rt	= ::SQLGetData(hStmt, 1, SQL_C_LONG, &iRecordCount, sizeof(INT), &cbValue);
	::SQLFreeStmt(hStmt, SQL_CLOSE);

	rt = SQLExecDirect(hStmt, (unsigned char *)(sSQL.GetBuffer(sSQL.GetLength())), SQL_NTS);

	CRecordFile	rf;
	VOID*		pFields[] =
	{
		&(rf.m_Record.m_Record.m_iAge),
		&(rf.m_Record.m_Record.m_iPostCode),
		rf.m_Record.m_Record.m_sID,
		rf.m_Record.m_Record.m_sName,
		rf.m_Record.m_Record.m_sSex,
		rf.m_Record.m_Record.m_sClass,
		rf.m_Record.m_Record.m_sCheck,
		rf.m_Record.m_Record.m_sAddress,
		rf.m_Record.m_Record.m_sTelephone,
		rf.m_Record.m_Record.m_sCheckDate,
		rf.m_Record.m_Record.m_sDoctor,
		rf.m_Record.m_Record.m_sDevice,
		rf.m_Record.m_Record.m_sHospital,
		rf.m_Record.m_Record.m_sResult,
		rf.m_Record.m_Record.m_sIllName,
		rf.m_Record.m_Record.m_sHospID,
		rf.m_Record.m_Record.m_sBedID,
		rf.m_Record.m_Record.m_sCheckStyle,
		rf.m_Record.m_Record.m_sCheckPos,
		&(rf.m_Record.m_sReport)
	};
	LONG		iLen;

	for (iRow = 2;; iRow++)
	{
		rt	= SQLFetch(hStmt);
		if	(rt != SQL_SUCCESS && rt != SQL_SUCCESS_WITH_INFO) break;

		for	(iCol = 1; iCol <= 2; iCol++)
		{
			rt	= SQLGetData(hStmt, iCol, SQL_C_LONG, &sBuffer, sizeof(sBuffer), &iLen);
			*(INT *)(pFields[iCol - 1]) = *(INT *)sBuffer;
		}

		for	(iCol = 3; iCol <= 19; iCol++)
		{
			rt				= SQLGetData(hStmt, iCol, SQL_C_CHAR, &sBuffer, sizeof(sBuffer), &iLen);
			sBuffer[iLen]	= NULL;
			sField			= sBuffer;
			sField.TrimLeft();
			sField.TrimRight();
			wsprintf((CHAR *)(pFields[iCol - 1]), sField);
		}

		for	(iCol = 20; iCol <= 20; iCol++)
		{
			rt				= SQLGetData(hStmt, iCol, SQL_C_CHAR, &sBuffer, sizeof(sBuffer), &iLen);
			if	(rt != SQL_SUCCESS_WITH_INFO && rt != SQL_SUCCESS)
			{
				SQLRETURN	sr;
				sr	= SQL_NO_DATA;
				sr	= SQL_STILL_EXECUTING;
				sr	= SQL_ERROR;
				sr	= SQL_INVALID_HANDLE;
				sr	= SQL_SUCCESS_WITH_INFO;
				sr	= SQL_SUCCESS;
				switch	(rt)
				{
				case	SQL_NO_DATA:
					break;
				case	SQL_STILL_EXECUTING:
					break;
				case	SQL_ERROR:
					break;
				case	SQL_INVALID_HANDLE:
					break;
				}
			}
			
			sBuffer[iLen]	= NULL;
			*(CString *)(pFields[iCol - 1])	= sBuffer;
		}
		wsprintf(sImagePath, "%s%s\\", sBaseImagePath, rf.m_Record.m_Record.m_sID);
		rf.SetImagePath(sImagePath);
		rf.SetSavePath(m_pCfg->sBackupPath);
		wsprintf(sFileName, "%s.dat", rf.m_Record.m_Record.m_sID);
		rf.SaveFile(sFileName);
	}

	//	释放 ODBC 
	SQLFreeStmt(hStmt, SQL_DROP);
	SQLDisconnect(hdbc);
	SQLFreeConnect(hdbc);
	SQLFreeEnv(henv);

	ShowCurrentRecordInfo();
	UpdateData(FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -