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

📄 select.cpp

📁 读取oracle的blob数据. 数据库连接以ODBC连接.
💻 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 + -