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

📄 schdb.c

📁 brew开发的日历程序 完全模仿mediaplayer的结构设计 值得初学者学习
💻 C
📖 第 1 页 / 共 2 页
字号:
/**
 * File Name    : SchDB.h                                                                 
 * Created      : 07/04/14                                                                        
 * Author       : ZhongNingLin@neusoft.com                                                                    
 * Model        : 05YOP                                                                           
 * Description  : [[CN]] 此文件的职责是: [[CN]]                           
**/
#include "SchDB.h"
#include "schedule.h"
#include "aeestdlib.h"
#include "SeventContent.h"

/**************************************************************************
*	Function Name	 :	ScheDB_InitClassData                                            
*	Description		 :	创建数据库对象
*	Input Parameters :	Schedule*					
*	Output Parameters:	None												
*	Return Value	 :	boolean			
*	Date			 :	2007/04/14											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
extern boolean  ScheDB_InitClassData(ScheDB** ppObj,Schedule* pAee)
{	
	ScheDB*	pMe = NULL;
	IDBMgr * pDBMgr = NULL;
	IShell * pIShell = pAee->a.m_pIShell;
	int count = 0;
    /*数据库类的创建*/
	pMe = (ScheDB*)MALLOC(sizeof(ScheDB));
	if(NULL == pMe)
	{
		return FALSE;
	}
	/*创建数据库对象*/
    if(ISHELL_CreateInstance(pIShell, AEECLSID_DBMGR, (void**)(&pDBMgr)) != SUCCESS)
      return FALSE;

   /*打开数据库 不存在就创建一个数据库 数据库打开了立即关闭IDBMgr*/ 
   if( ( pMe->m_pDatabase = IDBMGR_OpenDatabase(pDBMgr, SCHEDULE_DB_FILE, TRUE) ) == NULL ) 
   {
      IDBMGR_Release(pDBMgr);
	  
      return FALSE;
   }
   else
   {
      IDBMGR_Release(pDBMgr);	 
   }

   count = IDATABASE_GetRecordCount(pMe->m_pDatabase); 




   //ScheDB_EmptyEventDatabase( pMe );
   	*ppObj = pMe;
	return TRUE;
}

/**************************************************************************
*	Function Name	 :	ScheEvtDB_FreeClassData                                            
*	Description		 :	释放数据库资源
*	Input Parameters :	Schedule*					
*	Output Parameters:	None												
*	Return Value	 :	boolean			
*	Date			 :	2007/04/14											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
void ScheEvtDB_FreeClassData(Schedule* pMe)
{
    ScheDB*	pScheDB = NULL;
	pScheDB = pMe->m_pScheDB;
	//if( pMe->m_pScheDB == NULL)
	//	return;
    /*释放数据库*/
	(void)IBASE_Release(((IBase *)pScheDB->m_pDatabase));
    /*数据库置为NULL*/
    pScheDB->m_pDatabase = NULL;
    /*释放当前结构体*/
    FREEIF(pScheDB);
	pScheDB = NULL;

}

/**************************************************************************
*	Function Name	 :	ScheDB_ParseEventRecord                                            
*	Description		 :	ParseEventRecord return the data
*	Input Parameters :	.....					
*	Output Parameters:	None												
*	Return Value	 :	boolean			
*	Date			 :	2007/04/14											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
static boolean ScheDB_ParseEventRecord( IDBRecord* pRecord, EventData *data)
{
    uint16 nFieldLen;
    AEEDBFieldName rFieldName;
    AEEDBFieldType rFieldType;
    AECHAR* psStringPtr;
 
	/*事件编号*/
    data->index = (uint8)IDBRECORD_GetID(pRecord);

    /*重置数据库索引为-1*/
    IDBRECORD_Reset( pRecord );  

	/*得到记录的第一个字段*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
	/*获得日期*/
    psStringPtr = IDBRECORD_GetFieldString( pRecord );
	WSTRCPY( data->eDate, psStringPtr );

    /*获得第二个字段*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
    /*事件类型*/    
    IDBRECORD_GetFieldWord( pRecord, &data->eType );

	/*获得第三个字段的数据*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
	/*事件内容*/   
    psStringPtr = IDBRECORD_GetFieldString( pRecord );
    WSTRCPY( data->eContent, psStringPtr );    
	

	/*获得第四个字段*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
	/*姓名*/
    psStringPtr = IDBRECORD_GetFieldString( pRecord );
    WSTRCPY( data->eName, psStringPtr );


    /*下一个字段*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
	/*电话号码*/
    psStringPtr = IDBRECORD_GetFieldString( pRecord );
    WSTRCPY( data->eTelNo, psStringPtr );

	/*下一个字段*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
	/*事件时间*/
    psStringPtr = IDBRECORD_GetFieldString( pRecord );
    WSTRCPY( data->eTime, psStringPtr );

	/*下一个字段*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
    /*闹钟类型*/    
    IDBRECORD_GetFieldWord( pRecord, &data->eAlarm );

	/*下一个字段*/
    rFieldType = IDBRECORD_NextField( pRecord, &rFieldName, &nFieldLen );
    /*年龄*/        
	data->eAge = *IDBRECORD_GetField( pRecord, &rFieldName, &rFieldType, &nFieldLen ); 

   return TRUE;
}

/**************************************************************************
*	Function Name	 :	ScheDB_InitEventFieldStruct                                            
*	Description		 :	ParseEventRecord return the data
*	Input Parameters :	.....					
*	Output Parameters:	None												
*	Return Value	 :	boolean			
*	Date			 :	2007/04/14											
*	Author			 :	ZhongNingLin@neusoft.com              								
***************************************************************************/
static void ScheDB_InitEventFieldStruct( AEEDBField* pFieldArray,EventData *data)
{
	   
	//======================事件日期===================================

	/*数据库字段类型(文档)*/	
	pFieldArray[ DB_RECORD_FIELD_DATE ].fType = AEEDB_FT_STRING;
	/*数据库字段名称(文档)*/	
    pFieldArray[ DB_RECORD_FIELD_DATE ].fName = AEEDBFIELD_TEXT;
	/*字段的数据长度(不包括头)*/	
    pFieldArray[ DB_RECORD_FIELD_DATE ].wDataLen = WSTRSIZE( data->eDate );
	/*指向包含字段数据的缓冲区的指针*/
    pFieldArray[ DB_RECORD_FIELD_DATE ].pBuffer = data->eDate;

	//======================事件类型===================================
	pFieldArray[ DB_RECORD_FIELD_TYPE ].fType = AEEDB_FT_WORD;
    pFieldArray[ DB_RECORD_FIELD_TYPE ].fName = AEEDBFIELD_NONE;
    pFieldArray[ DB_RECORD_FIELD_TYPE ].wDataLen = sizeof( data->eType );
    pFieldArray[ DB_RECORD_FIELD_TYPE ].pBuffer = &data->eType;

	//======================事件内容===================================
	pFieldArray[ DB_RECORD_FIELD_CONTENT ].fType = AEEDB_FT_STRING; 
    pFieldArray[ DB_RECORD_FIELD_CONTENT ].fName = AEEDBFIELD_TEXT;
    pFieldArray[ DB_RECORD_FIELD_CONTENT ].wDataLen = WSTRSIZE( data->eContent );
    pFieldArray[ DB_RECORD_FIELD_CONTENT ].pBuffer = data->eContent;

    //========================姓名=====================================
    pFieldArray[ DB_RECORD_FIELD_NAME ].fType = AEEDB_FT_STRING;
    pFieldArray[ DB_RECORD_FIELD_NAME ].fName = AEEDBFIELD_TEXT;
    pFieldArray[ DB_RECORD_FIELD_NAME ].wDataLen = WSTRSIZE( data->eName );
    pFieldArray[ DB_RECORD_FIELD_NAME ].pBuffer = data->eName;

	//======================电话号码===================================
    pFieldArray[ DB_RECORD_FIELD_TEL ].fType = AEEDB_FT_STRING;
    pFieldArray[ DB_RECORD_FIELD_TEL ].fName = AEEDBFIELD_TEXT;
    pFieldArray[ DB_RECORD_FIELD_TEL ].wDataLen = WSTRSIZE( data->eTelNo );
    pFieldArray[ DB_RECORD_FIELD_TEL ].pBuffer = data->eTelNo;

    //======================事件时间===================================
	pFieldArray[ DB_RECORD_FIELD_TIME ].fType = AEEDB_FT_STRING;
    pFieldArray[ DB_RECORD_FIELD_TIME ].fName = AEEDBFIELD_TEXT;
    pFieldArray[ DB_RECORD_FIELD_TIME ].wDataLen = WSTRSIZE( data->eTime );
    pFieldArray[ DB_RECORD_FIELD_TIME ].pBuffer = data->eTime;

	//======================闹钟类型===================================
	pFieldArray[ DB_RECORD_FIELD_ALARMTYPE ].fType = AEEDB_FT_WORD;
    pFieldArray[ DB_RECORD_FIELD_ALARMTYPE ].fName = AEEDBFIELD_NONE;
    pFieldArray[ DB_RECORD_FIELD_ALARMTYPE ].wDataLen = sizeof( data->eAlarm );
    pFieldArray[ DB_RECORD_FIELD_ALARMTYPE ].pBuffer = &data->eAlarm;

	//=========================年龄====================================    
	pFieldArray[ DB_RECORD_FIELD_AGE ].fType = AEEDB_FT_BYTE;
    pFieldArray[ DB_RECORD_FIELD_AGE ].fName = AEEDBFIELD_NONE;
    pFieldArray[ DB_RECORD_FIELD_AGE ].wDataLen = sizeof( data->eAge );
    pFieldArray[ DB_RECORD_FIELD_AGE ].pBuffer = &data->eAge;
}

/**************************************************************************
*	Function Name	 :	ScheDB_AddEventItem                                            
*	Description		 :	ParseEventRecord return the data

⌨️ 快捷键说明

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