📄 select.cpp
字号:
// Select.cpp : implementation file
//
#include "stdafx.h"
#include "CBlob.h"
#include "Select.h"
#include "DatabaseX.h"
#include "RecSet.h"
#include "CBlobDoc.h"
#include "CBlobView.h"
extern CCBlobView *m_view;
int trim(char*);
extern CDatabaseX m_database;
CRecSet *m_set = 0;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSelect dialog
CSelect::CSelect(CWnd* pParent /*=NULL*/)
: CDialog(CSelect::IDD, pParent)
{
//{{AFX_DATA_INIT(CSelect)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CSelect::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSelect)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSelect, CDialog)
//{{AFX_MSG_MAP(CSelect)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSelect message handlers
void CSelect::OnButton1()
{
// TODO: Add your control notification handler code here
if (m_database.IsOpen()==0)
{
AfxMessageBox("请先登录到一个数据源");
return;
}
char sql[1024];
char cbuf[1024];
char table[128];
char *tok;
int j;
char fld[128];
//取SQL语句: select * from xxxx
GetDlgItemText(IDC_EDIT1, sql,1024);
if (strlen(sql)==0) return;
//关闭先前打开的数据集合
if (m_set)
{
if (m_set->IsOpen())
{
m_set->Close();
}
delete m_set;
}
//提取FROM后的表名
strcpy(cbuf, sql);
tok = strtok(cbuf, " ");
while(tok)
{
_strupr(tok);
if (strcmp(tok, "FROM")==0)
{
tok = strtok(NULL," ");
strcpy(table, tok);
break;
}
tok = strtok(NULL," ");
}
//声明一个结果集对象
m_set = new CRecSet(&m_database, table, table);
//打开(执行查询)
m_set->Open(sql); //注意,当打开后,指针停留在第一记录处。
if (!m_set->IsOpen())
{
AfxMessageBox("SQL Error");
}
else
{
//取结果集合内的字段表
for (j=0; j<m_set->m_nFields; j++)
{
strcpy(fld, m_set->m_strName[j]); trim(fld); _strupr(fld);
fldnames[j] = fld;
}
//显示第一个记录
OnButton2();
}
}
void CSelect::OnButton2()
{
// TODO: Add your control notification handler code here
if (m_set==0) return;
if (!m_set->IsOpen()) return;
if (m_set->IsEof())
{
return;
}
char cbuf[8192];
int nc;
int j;
int irow=0;
char *pstr;
CEdit &edit = m_view->GetEditCtrl();
edit.ReplaceSel("=============================================================================\r\n");
pstr = new char[MAXBUFFER+1];
//循环取当前记录的各个字段:
for (j=0; j<m_set->m_nFields; j++)
{
//返回字段的数据长度,对于数值字段,都转换为了字符串(为了显示),可修改getData()函数,使其
// 返回数值。
int DataType = m_set->m_Type[j];
nc=m_set->getData(j, irow, pstr);
if (DataType==SQL_SQL_NTEXT ||
DataType== SQL_BINARY ||
DataType== SQL_VARBINARY ||
DataType== SQL_LONGVARCHAR ||
DataType== SQL_LONGVARBINARY ||
DataType== SQL_ORA_LOB)
{
//long raw字段的数据长度
sprintf(cbuf,"%-24s: -----LONG RAW------ [%d BYTES]\r\n", fldnames[j], nc);
}
else
{
sprintf(cbuf,"%-24s: %s\r\n", fldnames[j], pstr);
}
edit.ReplaceSel(cbuf);
}
m_set->ReadNext();
delete pstr;
}
BOOL CSelect::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetDlgItemText(IDC_EDIT1,"select * from DAOHANG where cexianhao like '86PR%'");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSelect::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
if (m_set)
{
if (m_set->IsOpen())
{
m_set->Close();
}
delete m_set;
}
m_set = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -