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

📄 tocidirpath.cpp

📁 调用OCI的C++类
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  	//allocate buff for input records  	m_uBufSize = m_uMaxRows*m_uRowSize+INDATA_SAVE_GUARD;  	m_inData = (void *)malloc(m_uBufSize);  	if(!m_inData)  		throw TOCIException("",ERR_GENERAL,"TOCIDirPath::prepare: malloc for indata FATAL");  	  	memset(m_inData,0,m_uBufSize);  		m_iErrorNo = OCIDirPathColArrayReset(m_hDirPathCA,m_hError);	checkError();	m_iErrorNo = OCIDirPathStreamReset(m_hDirPathStr,m_hError);	checkError();  	m_bPrepared = TRUE;}void TOCIDirPath::append(){	if(m_iRowOff>0)		for(int i=0;i<m_uMaxCols;i++)			if(!m_FieldAssigned[i])				setFieldNull(i);		int m_iMaxRows = m_uMaxRows;	if(m_iRowOff>=m_iMaxRows-1)	{		load(m_iRowOff);		m_iRowOff = 0;	}		m_iRowOff++;	for(int i=0;i<m_uMaxCols;i++)		m_FieldAssigned[i] = FALSE;}int TOCIDirPath::load(unsigned uRows){	int	iLoadCnt,iSaveOff;	bool continue_flag=true;		iSaveOff = 0;	while (continue_flag){    	m_iErrorNo = OCIDirPathColArrayToStream(m_hDirPathCA,m_hDirPathCtx,m_hDirPathStr,m_hError,m_iRowOff+1,iSaveOff+1);        	if ( m_iErrorNo == OCI_CONTINUE){    	    continue_flag = true;    	}    	else {    	    checkError();    	    continue_flag = false;    	};    #ifdef _DEBUG_    	m_iErrorNo = OCIAttrGet((dvoid *)m_hDirPathStr,OCI_HTYPE_DIRPATH_COLUMN_ARRAY,    							(dvoid *)&iLoadCnt,(ub4 *)0,    							OCI_ATTR_ROW_COUNT,m_hError);    	cout<<iLoadCnt<<" rows records have converted!"<<endl;    	m_iErrorNo = OCIAttrGet((dvoid *)m_hDirPathStr,OCI_HTYPE_DIRPATH_COLUMN_ARRAY,    							(dvoid *)&iLoadCnt,(ub4 *)0,    							OCI_ATTR_COL_COUNT,m_hError);    	cout<<iLoadCnt<<" cols records have converted!"<<endl;#endif /*_DEBUG */    	m_iErrorNo =OCIDirPathLoadStream(m_hDirPathCtx,m_hDirPathStr,m_hError);    	checkError();    	    	m_iErrorNo = OCIAttrGet((dvoid *)m_hDirPathStr,OCI_HTYPE_DIRPATH_STREAM,    							(dvoid *)&iLoadCnt,(ub4 *)0,    							OCI_ATTR_ROW_COUNT,m_hError);    	iSaveOff += iLoadCnt;    	m_lSaveCount += iLoadCnt;    	checkError();    	//cout<<iLoadCnt<<" records have loaded!"<<endl;    	    	//save!    	    	m_iErrorNo = OCIDirPathDataSave(m_hDirPathCtx,m_hError,(ub4)OCI_DIRPATH_DATASAVE_SAVEONLY);		    checkError();    	m_iErrorNo = OCIDirPathStreamReset(m_hDirPathStr,m_hError);    	checkError();	}		m_iRowOff = 0;	m_uBufCurPos = 0;	m_iErrorNo = OCIDirPathColArrayReset(m_hDirPathCA,m_hError);	checkError();	return 0;//add return load rows}void TOCIDirPath::save(){	if(m_iRowOff>0)		load(m_iRowOff);	//m_iErrorNo = OCIDirPathDataSave(m_hDirPathCtx,m_hError,(ub4)OCI_DIRPATH_DATASAVE_SAVEONLY);		//checkError();}void TOCIDirPath::abort(){	OCIDirPathAbort(m_hDirPathCtx,m_hError);}	void TOCIDirPath::finish(){	OCIDirPathFinish(m_hDirPathCtx,m_hError);	checkError();	m_bPrepared = FALSE;	}	void TOCIDirPath::setField(char *strFieldName,char *fieldValue){	unsigned i = 0;	for(;i<m_uMaxCols;i++)		if(!strcasecmp(strFieldName,m_Query->field(i).name))			break;		if(i==m_uMaxCols)		throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName);		setField(i,fieldValue);}void TOCIDirPath::setField(char *strFieldName,int	fieldValue){	unsigned i = 0;	for(;i<m_uMaxCols;i++)		if(!strcasecmp(strFieldName,m_Query->field(i).name))			break;		if(i==m_uMaxCols)		throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName);		setField(i,fieldValue);}void TOCIDirPath::setField(char *strFieldName,double	fieldValue){	unsigned i = 0;	for(;i<m_uMaxCols;i++)		if(!strcasecmp(strFieldName,m_Query->field(i).name))			break;		if(i==m_uMaxCols)		throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName);		setField(i,fieldValue);}void TOCIDirPath::setField(char *strFieldName,long	fieldValue){	unsigned i = 0;	for(;i<m_uMaxCols;i++)		if(!strcasecmp(strFieldName,m_Query->field(i).name))			break;		if(i==m_uMaxCols)		throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName);		setField(i,fieldValue);}void TOCIDirPath::setField(unsigned uIndex,char *fieldValue){	ub1	cflg;	unsigned clen;			if(uIndex<0||uIndex>=m_uMaxCols)		throw	TOCIException(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField");		clen = strlen(fieldValue);		if(clen>0)		cflg = OCI_DIRPATH_COL_COMPLETE;	else 		cflg = OCI_DIRPATH_COL_NULL;				/*if ( m_Query->field(uIndex).type == DATE_TYPE){	    OCIDate date;	    clen = 14;	    date = StrToOCIDate(fieldValue);	    memcpy((char *)m_inData+m_uBufCurPos,(unsigned char *)&date,clen);	}	else*/	    memcpy((char *)m_inData+m_uBufCurPos,fieldValue,clen);		m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError,								m_iRowOff,uIndex,								(unsigned char *)m_inData+m_uBufCurPos,(ub4)clen,cflg);	checkError();	m_uBufCurPos += clen;	m_FieldAssigned[uIndex] = TRUE;	}void TOCIDirPath::setField(unsigned uIndex,int	fieldValue){		if(uIndex<0||uIndex>=m_uMaxCols)		throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField");		ub1	cflg;	cflg = OCI_DIRPATH_COL_COMPLETE;		char temp[12];	unsigned ulen;		sprintf(temp,"%d",fieldValue);	ulen = strlen(temp);			memcpy((void *)((char *)m_inData+m_uBufCurPos),(void *)temp,ulen);		m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError,								m_iRowOff,uIndex,								(unsigned char *)m_inData+m_uBufCurPos,(ub4)ulen,cflg);	checkError();	m_uBufCurPos += ulen;	m_FieldAssigned[uIndex] = TRUE;	}void TOCIDirPath::setField(unsigned uIndex,double	fieldValue){	if(uIndex<0||uIndex>=m_uMaxCols)		throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField");		ub1	cflg;	cflg = OCI_DIRPATH_COL_COMPLETE;	memcpy((void *)((char *)m_inData+m_uBufCurPos),(void *)&fieldValue,sizeof(double));		m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError,								m_iRowOff,uIndex,								(unsigned char *)m_inData+m_uBufCurPos,(ub4)sizeof(double),cflg);	checkError();	m_uBufCurPos += sizeof(double);	m_FieldAssigned[uIndex] = TRUE;	}void TOCIDirPath::setField(unsigned uIndex,long	fieldValue){	if(uIndex<0||uIndex>=m_uMaxCols)		throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField");		ub1	cflg;	cflg = OCI_DIRPATH_COL_COMPLETE;	char temp[12];	unsigned ulen;		sprintf(temp,"%ld",fieldValue);	ulen = strlen(temp);		memcpy((void *)((char *)m_inData+m_uBufCurPos),(void *)temp,ulen);		m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError,								m_iRowOff,uIndex,								(unsigned char *)m_inData+m_uBufCurPos,(ub4)ulen,cflg);	checkError();	m_uBufCurPos += ulen;	m_FieldAssigned[uIndex] = TRUE;								}void TOCIDirPath::setFieldNull(unsigned uIndex){	if(uIndex<0||uIndex>=m_uMaxCols)		throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField");	ub1	cflg;	cflg = OCI_DIRPATH_COL_NULL;		m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError,								m_iRowOff,uIndex,								(unsigned char *)NULL,(ub4)sizeof(long),cflg);	checkError();								}void TOCIDirPath::checkError(){ 	switch (m_iErrorNo) 	 { 	 case OCI_SUCCESS: 	   break; 	 case OCI_SUCCESS_WITH_INFO: 	   (void) printf( "Error - OCI_SUCCESS_WITH_INFO\n"); 	   errprint(m_hError, OCI_HTYPE_ERROR, &m_iErrorNo); 	   break; 	 case OCI_NEED_DATA: 	   (void) printf( "Error - OCI_NEED_DATA\n"); 	   break; 	 case OCI_NO_DATA: 	   (void) printf( "Error - OCI_NODATA\n"); 	   break; 	 case OCI_ERROR: 		errprint(m_hError, OCI_HTYPE_ERROR, &m_iErrorNo); 	   break; 	 case OCI_INVALID_HANDLE: 	   (void) printf( "Error - OCI_INVALID_HANDLE\n"); 	   break; 	 case OCI_STILL_EXECUTING: 	   (void) printf( "Error - OCI_STILL_EXECUTE\n"); 	   break; 	 case OCI_CONTINUE: 	   (void) printf( "Error - OCI_CONTINUE\n"); 	   break; 	 default: 	   break; 	 }	}

⌨️ 快捷键说明

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