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

📄 bag.cpp

📁 ADO查看数据库工具的原码
💻 CPP
字号:
// Bag.cpp: implementation of the CBag class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
 
#include "Bag.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBag::CBag()
{
	m_pBagTagList=NULL;
	m_OpenFlag =FALSE;
}

CBag::~CBag()
{
	if (m_pBagTagList!=NULL) delete m_pBagTagList;
}
int CBag::OpenMem(char *buf,int len,int mode)
{
	if (IsOpen()) Close();
	
	int ret=  m_DbFile.OpenMem(buf,len,mode);
	if (ret<0) return ret;
	if (mode==BAG_MODE_READ){
	///	m_DbFile.SetFieldMask(2,1);
		CreateID();
	}
	if (mode==BAG_MODE_CREATE){
		m_DbFile.AddInfo("Test",4);
		m_DbFile.SetTableSize(3);
		m_DbFile.SetTableName(0,"ID",0);
		m_DbFile.SetTableName(1,"文件名",0);
		m_DbFile.SetTableName(2,"数据区",0);
		m_DbFile.AddTable();
	}
	m_OpenFlag= TRUE;
	return ret;
}
int CBag::Open(char *bagfn,int mode)
{
	if (IsOpen()) Close();
	
	int ret=  m_DbFile.Open(mode,bagfn);
	if (ret<0) return ret;
	if (mode==BAG_MODE_READ){
		CreateID();
	}
	if (mode==BAG_MODE_CREATE){
		m_DbFile.AddInfo("Test",4);
		m_DbFile.SetTableSize(3);
		m_DbFile.SetTableName(0,"ID",0);
		m_DbFile.SetTableName(1,"文件名",0);
		m_DbFile.SetTableName(2,"数据区",0);
		m_DbFile.AddTable();
	}
///	m_DbFile.SetFieldMask(2,1);
	m_OpenFlag= TRUE;
	return ret;
}
void CBag::Close()
{
	if (IsOpen())  m_DbFile.Close();
	m_OpenFlag=FALSE;
}

int CBag::Add(CBagTag *ptag)
{
	ChangePkgFmt(ptag,TRUE);
	m_DbFile.SetTableSize(BAG_TABLE_SIZE);
	//id
	m_DbFile.SetFieldData(BAG_ID_POS,ptag->strID.GetBuffer(0),ptag->strID.GetLength());
	//filename
	m_DbFile.SetFieldData(BAG_FILENAME_POS,ptag->strFileName.GetBuffer(0),ptag->strFileName.GetLength());
	//buffer
	m_DbFile.SetFieldData(BAG_BUFFER_POS,(char *)ptag->buffer,ptag->nBufferSize);
	int ret = m_DbFile.AddRecord();
	if(ret<0){ return -1; }
	return 0;
}


int CBag::Add(CBag *pBag)
{
	
	return 0;
}

int CBag::SeekID(CString idstr)
{
	if( m_pBagTagList==NULL) return -1;
	int count = GetBagCount();
	for(int i=0;i<count;i++){
		if (!idstr.Compare(m_pBagTagList[i].ID)) return i;
	}
	return -1;
}

int CBag::GetData(int pos, CBagTag *pdata,int *flag)
{
	if (pos<0) return -1;
	m_DbFile.GetRecord(pos);
	pdata->strID.Format("%s",m_DbFile.GetFieldData(BAG_ID_POS));
	pdata->strFileName.Format("%s",m_DbFile.GetFieldData(BAG_FILENAME_POS));
	pdata->buffer =(BYTE *) m_DbFile.GetFieldDataBin(BAG_BUFFER_POS,(int *)&pdata->nBufferSize);
	if (flag){ *flag = m_DbFile.IsDBFormat((char *)pdata->buffer);	}
	return 0;
}

 
int CBag::ChangePkgFmt(CBagTag *pData, BOOL bSave)
{
	CString str;
	int iType;
	if(!bSave)
	{
		iType=pData->strFileName[0]-'A';
		if(iType>=0 && iType<=20)
		{
			pData->nType=iType;
			str=pData->strFileName.Mid(1);
			pData->strFileName=str;
		}
		else
			pData->nType=-1;
	}
	else
	{
		if(pData->nType>=0)
		{
			str.Format("%c",pData->nType+'A');
			str+=pData->strFileName;
			pData->strFileName=str;
		}
	}
	return 0;
}


int CBag::GetBagCount()
{
	return m_DbFile.GetCount();
}

int CBag::CreateID()
{
	int count;
	count = GetBagCount();
	if (m_pBagTagList!=NULL) delete m_pBagTagList;
	m_pBagTagList = new BagTagList[count];
	CBagTag bagtag;
	for(int i=0;i<count;i++){
		GetData(i,&bagtag);
		sprintf(m_pBagTagList[i].ID,bagtag.strID.GetBuffer(0));
		m_pBagTagList[i].pos = i;
	}
	return 0;
}

BOOL CBag::IsOpen()
{
	return m_OpenFlag;
}

char * CBag::GetBagMem(int *len)
{
	return m_DbFile.GetMem(len);
}

void CBag::SetGetMode(BOOL flag)
{
	m_DbFile.SetFieldMask(2,(flag)?0:1);
}

⌨️ 快捷键说明

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