📄 query.cpp
字号:
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 + -