void CIndustryDetailDialog_Commodities::Save()
{
    CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
    //
    for( int i=0;i<m_ctlCommodityListIn.GetItemCount();i++ )
    {
        if( m_ctlCommodityListIn.GetCheck(i) )
        {
            int iCommodityFK = m_ctlCommodityListIn.GetItemData(i);
            int iLoadEmpty = atoi(m_ctlCommodityListIn.GetItemText(i,1));
            int iQuanHigh = atoi(m_ctlCommodityListIn.GetItemText(i,2));
            int iQuanLow = atoi(m_ctlCommodityListIn.GetItemText(i,3));
            int iPercent = atoi(m_ctlCommodityListIn.GetItemText(i,4));
            CString sSQL;
            sSQL.Format("INSERT INTO Industries_Commodities (Industries_FK,Commodities_FK,InOut,LoadEmptyDays,Quantity_low,Quantity_high,Quantity_percentage) VALUES (%d,%d,0,%d,%d,%d,%d);",m_iIndustryID,iCommodityFK,iLoadEmpty,iQuanLow,iQuanHigh,iPercent);
            CppSQLite3Query q = pDB->execQuery(sSQL);
            q.finalize();
        }
    }
    for( i=0;i<m_ctlCommodityListOut.GetItemCount();i++ )
    {
        if( m_ctlCommodityListOut.GetCheck(i) )
        {
            int iCommodityFK = m_ctlCommodityListOut.GetItemData(i);
            int iLoadEmpty = atoi(m_ctlCommodityListOut.GetItemText(i,1));
            int iQuanHigh = atoi(m_ctlCommodityListOut.GetItemText(i,2));
            int iQuanLow = atoi(m_ctlCommodityListOut.GetItemText(i,3));
            int iPercent = atoi(m_ctlCommodityListOut.GetItemText(i,4));
            CString sSQL;
            sSQL.Format("INSERT INTO Industries_Commodities (Industries_FK,Commodities_FK,InOut,LoadEmptyDays,Quantity_low,Quantity_high,Quantity_percentage) VALUES (%d,%d,1,%d,%d,%d,%d);",m_iIndustryID,iCommodityFK,iLoadEmpty,iQuanLow,iQuanHigh,iPercent);
            CppSQLite3Query q = pDB->execQuery(sSQL);
            q.finalize();
        }
    }
}
//private
void RPGMapItemsMenuLayer::loadItemsData()
{
    //道具数据
    this->m_itemsList->removeAllObjects();
    
    CppSQLite3Query query = this->m_db->execQuery(ITEMS_EXISTING_QUERY);
    while(!query.eof())
    {
        RPGExistingItems *itemsData = RPGExistingItems::create();
        itemsData->m_dataId = query.getIntField("id");
        itemsData->m_name = query.getStringField("name_cns");
        itemsData->m_buy = query.getIntField("buy");
        itemsData->m_sell = query.getIntField("sell");
        itemsData->m_type = query.getIntField("type");
        itemsData->m_attack = query.getFloatField("attack");
        itemsData->m_defense = query.getFloatField("defense");
        itemsData->m_speed = query.getFloatField("speed");
        itemsData->m_skillAttack = query.getFloatField("skill_attack");
        itemsData->m_skillDefense = query.getFloatField("skill_defense");
        itemsData->m_total = query.getIntField("total");
        this->m_itemsList->addObject(itemsData);
        
        query.nextRow();
    }
    query.finalize();
    
    CCTableView *tableView = (CCTableView*)this->getChildByTag(kRPGMapItemsMenuLayerTagItemListTable);
    tableView->reloadData();
}
BOOL CLocationDetailDialog::OnInitDialog()
{
    CDialog::OnInitDialog();

    if( m_iLocationID == -1 )
        m_ctlOK.EnableWindow(FALSE);
    else
    {
        CString sSQL;
        sSQL.Format("SELECT name,notes FROM Locations WHERE id=%d;",m_iLocationID);
        CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
        CppSQLite3Query q = pDB->execQuery(sSQL);
        //
        if (!q.eof())
        {
            m_sLocationName = q.getStringField("name");
            m_sLocalInstructions = q.getStringField("notes");
        }
        q.finalize();
        UpdateData(FALSE);
    }

    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CCarTypesDetailDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here

    if( m_iCarTypeFK != -1 )
    {
        CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
        CString sSQL;
        sSQL.Format("SELECT * FROM CarTypes WHERE id=%d",m_iCarTypeFK);
        CppSQLite3Query q = pDB->execQuery((LPCTSTR)sSQL);
        if( !q.eof() )
        {
            m_sCarTypeDescription = q.getStringField("description");
            m_sCarTypeID = q.getStringField("type_id");
            m_bPassenger = q.getIntField("passenger")==1?TRUE:FALSE;
        }
        q.finalize();
    }


    UpdateData(FALSE);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
Exemple #5
0
void   CBrainMemory::SetSystemItem(int64 Item,AnsiString Info){
	CppSQLite3Buffer SQL;
	CppSQLite3Query  Result;
	char a[30],b[30];
     int64toa(ROOM_SYSTEM,a);
	 int64toa(Item,b);

    SQL.format("select b from \"%s\" where a = \"%s\";",a,b);				
	Result = BrainDB.execQuery(SQL);
	bool Find = !Result.eof();
    Result.finalize();

	if(!Find){
		SQL.format("insert into \"%s\" values (\"%s\", ?)",
			a,
			b);
	}else{
		SQL.format("update \"%s\" set b = ? where a = \"%s\";",
			a,
			b
			);
	}

	CppSQLite3Statement State = BrainDB.compileStatement(SQL);
	State.bind(1,Info.c_str()); //替换第一个问号
	State.execDML();

}
void CTerminateNewLocationDialog::OnSelchangeLocationlist() 
{
    int iLocationID = m_ctlLocationList.GetItemData(m_ctlLocationList.GetCurSel());
    CString sSQL;
    sSQL.Format("SELECT Industries.id,Industries.name FROM Industries,Sidings WHERE Industries.Sidings_FK=Sidings.id AND Sidings.Locations_FK=%d",iLocationID);
    TRACE(sSQL);
    //
    CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
    CppSQLite3Query q = pDB->execQuery(sSQL);
    //
    while( m_ctlIndustryList.GetCount() > 0 )
        m_ctlIndustryList.DeleteString(0);
    //
    while (!q.eof())
    {
        int nIndex = m_ctlIndustryList.AddString(q.getStringField("name"));
        m_ctlIndustryList.SetItemData(nIndex,q.getIntField("id"));
        q.nextRow();
    }
    //
    sSQL.Format("SELECT id,name FROM Sidings WHERE Locations_FK=%d;",iLocationID);
    q = pDB->execQuery(sSQL);
    //
    while( m_ctlSidingList.GetCount() > 0 )
        m_ctlSidingList.DeleteString(0);
    //
    while (!q.eof())
    {
        int nIndex = m_ctlSidingList.AddString(q.getStringField("name"));
        m_ctlSidingList.SetItemData(nIndex,q.getIntField("id"));
        q.nextRow();
    }
    q.finalize();
}
CString CEquipmentLocationDialog::GetCarType(int iCarTypeFK)
{
    CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
    CString sSQL;
    sSQL.Format("SELECT description FROM CarTypes WHERE id=%d;",iCarTypeFK);
    CppSQLite3Query q = pDB->execQuery(sSQL);
    CString sType("");
    if( !q.eof() )
        sType = q.getStringField("description");
    q.finalize();
    return sType;
}
bool RPGMapSceneLayer::init(float showObjectTime)
{
    if(RPGBaseSceneLayer::init())
    {        
        CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("joystick.plist");
        CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("main.plist");
        
        //加载语言文件
        string languageFile = CCFileUtils::sharedFileUtils()->fullPathForFilename("scene_map_cns.plist");
        this->m_stringList = CCDictionary::createWithContentsOfFileThreadSafe(languageFile.c_str());
        this->m_stringList->retain();
        
        //数据库部分,读取进度记录
        CppSQLite3Query query = this->m_db.execQuery(SAVEDATA_MAP_QUERY);
        this->m_mapData.mapId = query.getIntField("map_id");
        this->m_mapData.mapName = query.getStringField("map_name");
        this->m_mapData.hasEnemy = query.getIntField("has_enemy") == 1 ? true : false;
        this->m_mapData.bgAudio = query.getStringField("bg_audio");
        this->m_mapData.playerToX = query.getFloatField("player_to_x");
        this->m_mapData.playerToY = query.getFloatField("player_to_y");
        this->m_mapData.playerDirection = query.getStringField("player_direction");
        this->m_mapData.location = query.getStringField("location_cns");
        this->m_mapData.gold = query.getIntField("gold");
        query.finalize();
        
        CCTMXTiledMap *bgMap = CCTMXTiledMap::create(this->m_mapData.mapName.c_str());
        bgMap->setTag(kRPGMapSceneLayerTagBgMap);
        bgMap->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - bgMap->getContentSize().width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - bgMap->getContentSize().height) / 2.0));
        this->addChild(bgMap);
        
        //背景音乐
        if(SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying())
        {
            SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true);
            SimpleAudioEngine::sharedEngine()->playBackgroundMusic(this->m_mapData.bgAudio.c_str(), true);
        }
        
        this->m_playerMoveAct = NULL;
        this->m_playerMoveSpeed = GAME_PLAYER_MOVESPEED;
        this->m_touchedDialogNPC = NULL;
        this->m_dialogDirection = kRPGMapSceneLayerDialogDirectionNone;
        
        this->m_hasEnemy = this->m_mapData.hasEnemy; //是否会遇敌
        this->m_releaseTexture = false; //是否在释构方法里面释放占用纹理
        
        this->scheduleOnce(schedule_selector(RPGMapSceneLayer::startPlay), showObjectTime);
        
//        CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
        return true;
    }
    return false;
}
CppSQLite3Query* StoreDatabase::execute(CppSQLite3DB* db, CCString* sql)
{
    CppSQLite3Query* query = new CppSQLite3Query();
    try {
        *query = db->execQuery(sql->getCString());
    } catch (CppSQLite3Exception &e) {
        CCLOG("%d : %s", e.errorCode(), e.errorMessage());
        query->finalize();
        CC_SAFE_DELETE(query);
        query = NULL;
    }
    return query;
}
Exemple #10
0
void CRcGen::_FormatList(int nIdList)
{
	int iSize=0;
	CStringA sQuery;	
	CppSQLite3Query q;
	m_listctrl->SetExtendedStyle(LVS_EX_FULLROWSELECT);	

	try
	{
		sQuery.Format("select count(*) from reslists where IDList = %d", nIdList);

		q = m_pDB->execQuery(sQuery); 
		
		if(!q.eof())
		{
			q.finalize();

			sQuery.Format("select * from reslists where idlist = %d", nIdList);
			q = m_pDB->execQuery(sQuery);

			CRect r;
			m_listctrl->GetWindowRect(r);		

			//iSize = (r.right - r.left) / q.getIntField(0);
			iSize = q.getIntField("Largura");

			for(int i=0;!q.eof();i++)
			{
				//m_listctrl->InsertColumn(i, CString(q.getStringField("NomeColuna")), LVCFMT_LEFT, DRA::SCALEX(iSize));
				m_listctrl->InsertColumn(i, CString(q.getStringField("NomeColuna")), LVCFMT_LEFT, iSize);
				q.nextRow();
			}
			q.finalize();						
		}		
	}
	catch(CppSQLite3Exception e)
	{
	}
}
Exemple #11
0
bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    CCDirector* pDirector = CCDirector::sharedDirector();
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

    pDirector->setOpenGLView(pEGLView);
	
    CCEGLView::sharedOpenGLView()->setDesignResolutionSize(960, 640, kResolutionShowAll);
    
    // turn on display FPS
    pDirector->setDisplayStats(false);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    //将数据库复制到可写目录
    string dbSrc = CCFileUtils::sharedFileUtils()->fullPathForFilename(GAME_SYS_DB);
    string dbDes = CCFileUtils::sharedFileUtils()->getWritablePath();
    dbDes.append(GAME_SYS_DB);
    
    if(!OzgFileUtility::fileExists(dbDes))
        OzgFileUtility::copyFile(dbSrc.c_str(), dbDes.c_str());
    CCLog("%s", dbDes.c_str());
    
    //记录检查,如果没有记录则生成
    CppSQLite3DB db;
    db.open(dbDes.c_str());
    
    CppSQLite3Query query = db.execQuery("select count(id) from save_data");
    //    CCLog("%i", query.getIntField(0));
    if(query.getIntField(0) == 0)
        db.execDML(GAME_INIT_SQL);
    
    query.finalize();
    db.close();
    
    //初始化背景音乐和效果音的默认大小值
    SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(CCUserDefault::sharedUserDefault()->getFloatForKey(GAME_BG_AUDIO_VOLUME, 1.0));
    SimpleAudioEngine::sharedEngine()->setEffectsVolume(CCUserDefault::sharedUserDefault()->getFloatForKey(GAME_EFFECT_AUDIO_VOLUME, 1.0));
    
    // create a scene. it's an autorelease object
    CCScene *pScene = RPGStartSceneLayer::scene();

    // run
    pDirector->runWithScene(pScene);

    return true;
}
Exemple #12
0
void CDlgEventList::ShowPage(int nPageIndex)
{
	CString str;
	int i = 0;
	int nStartIndex = 0;
	int nOffset = 0;

	CppSQLite3DB db;
	db.open(PATH_SQLITE_DB_808);	//打开数据库
	
	//查询记录总数量
	m_nRecordCount = db.execScalar("SELECT count(*) FROM event_info;");
	//计算总页数
	if(m_nRecordCount > 0)
		m_nPageCount = (m_nRecordCount-1)/elist_count+1;
	else
		m_nPageCount = 1;

	//在数据库中查询第nPageIndex页的elist_count条数据
	char szSqlBuffer[512];
	sprintf(szSqlBuffer, "SELECT * FROM event_info ORDER BY event_ID DESC LIMIT %d, %d;", nPageIndex*elist_count, elist_count);
	CppSQLite3Query q = db.execQuery(szSqlBuffer);

	for( i = 0; i < elist_count; i++ )
	{
		if ( !q.eof() )	//数据行
		{
			m_nEvent_ID[i]		= q.getIntField("event_ID");
			m_list[i].chChar	= q.fieldValue("event_content");
			m_list[i].nState	= BTN_STATE_NORMAL;
			q.nextRow();
		}
		else			//空白行
		{
			m_ItemState[i]		= 0;
			m_list[i].chChar	= _T("");
			m_list[i].nState	= BTN_STATE_DISABLE;
		}
	}
	//释放statement
	q.finalize();

	db.close();	//关闭数据库
	return;
}
Exemple #13
0
/**
 * Metodo para executar a contagem de registros
 */
long CTableBase::Count(CppSQLite3DB *pDB)
{
	long count = 0;

	CString s = BuildCountQuery();
	CStr s1(s);
	CppSQLite3Query q = pDB->execQuery(s1);
    if(!q.eof())
	{
		TCHAR *endp;
		CString s2(q.fieldValue(0));
		count = _tcstol(s2, &endp, 10);
	}

	q.finalize();

	return count;
}
BOOL CTerminateNewLocationDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
    CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
    CppSQLite3Query q = pDB->execQuery("SELECT id,name FROM Locations;");
    //
    while (!q.eof())
    {
        int nIndex = m_ctlLocationList.AddString(q.getStringField("name"));
        m_ctlLocationList.SetItemData(nIndex,q.getIntField("id"));
        q.nextRow();
    }
    q.finalize();
    
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
void RPGResultsLogic::deductionsItems(CppSQLite3DB *db, int itemsId)
{
    CCString *sql = NULL;
    CppSQLite3Query query = db->execQuery(CCString::createWithFormat(ITEMS_GET, itemsId)->getCString());
    while(!query.eof())
    {
        if(query.getIntField("total") <= 1)
            sql = CCString::createWithFormat(ITEMS_DISCARD, itemsId);
        else
            sql = CCString::createWithFormat(ITEMS_DEDUCTIONS, itemsId);
        
        query.nextRow();
    }
    query.finalize();
    
    if(sql)
        db->execDML(sql->getCString());

}
int RPGResultsLogic::battleSkill(CppSQLite3DB* db, RPGBaseRole* srcObjData, int skillId, RPGBaseRole* targetObjData)
{
    RPGSkill *skill = NULL;
    
    CppSQLite3Query srcSkillQuery = db->execQuery(CCString::createWithFormat(SKILL_DETAIL_QUERY, skillId)->getCString());
    while(!srcSkillQuery.eof())
    {
        skill = RPGSkill::create();
        skill->m_dataId = srcSkillQuery.getIntField("id");
        skill->m_MP = srcSkillQuery.getIntField("mp");
        skill->m_name = srcSkillQuery.getStringField("name_cns");
        skill->m_skillAttack = srcSkillQuery.getFloatField("skill_attack");
        skill->m_attr = srcSkillQuery.getFloatField("attr");
        
        srcSkillQuery.nextRow();
    }
    srcSkillQuery.finalize();
    
    if(skill)
    {
        //扣减MP
        srcObjData->m_MP -= skill->m_MP;
        if(srcObjData->m_MP < 0)
            srcObjData->m_MP = 0;
        
        switch (skill->m_dataId)
        {
            case 2:
                //回复
                return RPGComputingResults::skillCureResults(srcObjData->m_skillAttack, skill->m_skillAttack);
                break;
                
            default:
            {
                //火焰
                int val = RPGComputingResults::skillAttackResults(srcObjData->m_skillAttack, skill->m_skillAttack, (RPGSkillAttr)skill->m_attr, targetObjData->m_skillDefense, kRPGSkillAttrNormal); //后面的参数暂定为普通属性
                return -val;
            }
                break;
        }
    }
    return 0;
}
void CLocationDialog::ReadDB()
{
    m_ctlLocationList.DeleteAllItems();
    //
    //  Read data
    //
    CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
    CppSQLite3Query q = pDB->execQuery("select id,name from Locations;");
    //
    while (!q.eof())
    {
        TRACE("%s %s\n",q.fieldValue(0),q.fieldValue(1));
        int nIndex = m_ctlLocationList.InsertItem(1,q.fieldValue(1));
        m_ctlLocationList.SetItemData(nIndex,atoi(q.fieldValue(0)));
        q.nextRow();
    }
    q.finalize();

    m_ctlEditButton.EnableWindow(FALSE);
    m_ctlDeleteButton.EnableWindow(FALSE);
}
RPGMapSceneLayer::~RPGMapSceneLayer()
{
    OzgJoystickLayer *joystick = (OzgJoystickLayer*)this->getChildByTag(kRPGMapSceneLayerTagJoystick);
    joystick->m_target = NULL;
    joystick->inactive();
    
    this->removeAllChildrenWithCleanup(true);
    CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile("joystick.plist");
    
    if(this->m_stringList)
    {
        this->m_stringList->release(); //释放语言数据
        this->m_stringList = NULL;
    }
    
    if(this->m_releaseTexture)
    {
        CCTextureCache::sharedTextureCache()->removeTextureForKey("map.png");
        
        //player部分
        CCTextureCache::sharedTextureCache()->removeTextureForKey("actor4_0.png");
        CCTextureCache::sharedTextureCache()->removeTextureForKey("joystick.png");
        
    }
    
    //数据库部分,释放npc的纹理
    CppSQLite3Query query = this->m_db.execQuery(CCString::createWithFormat(NPC_QUERY, this->m_mapData.mapId)->getCString());
    while(!query.eof())
    {
        CCTextureCache::sharedTextureCache()->removeTextureForKey(query.getStringField("map_texture"));
        query.nextRow();
    }
    query.finalize();
    
//    CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
    CCLog("RPGMapSceneLayer 释放");
}
Exemple #19
0
void    CDlgAnswerList::ShowPage(int nPageIndex)
{
	CString str = _T("");
	int i = 0;
	int nStartIndex = 0;
	int nOffset = 0;
	
	CppSQLite3Table t;
	CppSQLite3Query q;
	CppSQLite3DB db;
	db.open(PATH_SQLITE_DB_808);	//打开数据库
	char szSqlBuffer[1024];
	memset(szSqlBuffer, 0, sizeof(szSqlBuffer));
	//查询记录总数量
// 	sprintf(szSqlBuffer, "SELECT COUNT(*) FROM answer \
// 						 WHERE UID IN (SELECT UID FROM question ORDER BY question_datatime DESC LIMIT %d, 1) \
// 						 ORDER BY answer_ID;", 
// 						 m_nQuestionIndex);
// 	m_nRecordCount = db.execScalar( szSqlBuffer );

	sprintf(szSqlBuffer, "SELECT * FROM answer where UID = '%d';", m_nQuestionIndex);
	t = db.getTable(szSqlBuffer);
	m_nRecordCount = t.numRows();
	
	//计算总页数
	if(m_nRecordCount > 0)
		m_nPageCount = (m_nRecordCount-1)/elist_count+1;
	else
		m_nPageCount = 1;

	memset(szSqlBuffer, 0, sizeof(szSqlBuffer));
	sprintf(szSqlBuffer, "SELECT * FROM question where UID = '%d';", m_nQuestionIndex);
	q = db.execQuery(szSqlBuffer);
	int nFlag = q.getIntField("flag");
	const char* ccText = q.fieldValue("question_content");
	str = ccText;

	//在数据库中查询第nPageIndex页的elist_count条数据
// 	sprintf(szSqlBuffer, "SELECT * FROM answer \
// 						 WHERE UID IN (SELECT UID FROM question ORDER BY question_datatime DESC LIMIT %d, 1) \
// 						 ORDER BY answer_ID LIMIT %d, %d;", 
// 						 m_nQuestionIndex, nPageIndex*elist_count, elist_count);
// 	q = db.execQuery(szSqlBuffer);

	memset(szSqlBuffer, 0, sizeof(szSqlBuffer));
	sprintf(szSqlBuffer, "SELECT * FROM answer where UID = '%d' LIMIT %d, %d;", 
				m_nQuestionIndex, (nPageIndex)*elist_count, elist_count);
	q = db.execQuery(szSqlBuffer);

	for( i = 0; i < elist_count; i++ )
	{
		if ( !q.eof() )	//数据行
		{
			m_nAnswerID[i]		= q.getIntField("answer_ID");
			m_list[i].chChar	= q.fieldValue("answer_content");
			m_list[i].nState	= BTN_STATE_NORMAL;
			q.nextRow();
		}
		else			//空白行
		{
			m_ItemState[i]		= 0;
			m_list[i].chChar	= _T("");
			m_list[i].nState	= BTN_STATE_DISABLE;
		}
	}
	//释放statement
	q.finalize();
	db.close();	//关闭数据库

	if(nFlag)
		TTSSpeaking( str );

	return;
}
Exemple #20
0
void CSetTimeDlg::OnButSend() 
{
//        swprintf(pTTTW->szText,L"%s",strB); 
 //      swprintf((wchar_t *)pTTTW->szText,L"%s",tooltip.AllocSysString()); 
//			 _stprintf((LPTSTR)word,_T("%s"),strB);  

//	m_ndkSend = new  unsigned char[200]; 
//		GetDlgItem(IDC_COMBO_VERIFYT)->GetWindowText(cccc);
	CString strPointNo,cccc,strim2;
	UpdateData(TRUE);
		GetDlgItem(IDC_COMBO_VERIFYT)->GetWindowText(cccc);
		unsigned char nfds3 = m_Str2Data.String2Int(cccc);
		GetDlgItem(IDC_COMBO_PORT)->GetWindowText(cccc);
		int nfdsP = m_Str2Data.String2Int(cccc);
	unsigned char nfds =nfds3;

	if(chcommand == 0x54)   //校时
	{
//	GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE ,MF_DISABLED);
//	GetDlgItem(IDOK_SEND)-> EnableWindow(FALSE);
//	GetDlgItem(IDCANCEL)-> EnableWindow(FALSE);
        m_ndkSend = new  unsigned char[11];
    	CMainFrame* pFWnd=(CMainFrame*)AfxGetMainWnd();
		pFWnd->n_timer60 =1;
	}
	else if(chcommand == 0x4B)            //手动控制
	{
      	m_ndkSend = new  unsigned char[6];
		            m_ndkSend[0] = 0x7E;
		            m_ndkSend[1] = nfds3;
		            m_ndkSend[2] = chcommand;
		            m_ndkSend[3] = nfdsP;
					nfds = m_FUNCTION.GetCurSel();
					if(nfds >1)
					{
          	AfxMessageBox("请选择“吸合”或“断开”!", MB_OK);
			m_FUNCTION.SetCurSel(0);
         	delete m_ndkSend;
			return;
					}
		            m_ndkSend[4] = nfds;
		            m_ndkSend[5] = 0x21;
    	CNDKMessage message1(MANUALCONTROL);
					message1.Add(m_ndkSend , 200);
					theApp.Sync(message1,1);
					if(nfds ==0)
						cccc ="吸合";
					else if(nfds ==1)
						cccc ="断开";

					m_nchangev = chcommand;
        GetDlgItem(IDC_BUT_RES)->ShowWindow(SW_SHOW);
					strim2.Format("%d号分站手动控制:端口%d|%s",nfds3,nfdsP,cccc);
       g_Log.StatusOut(strim2);
	}
	else if(chcommand == 0x43)       //配置测点
	{
        	CString strSQL;
		if(m_SerialF[nfds].SFSd ==0)
		{
        	strSQL.Format("%d号分站没有巡检!",nfds3);
            AfxMessageBox(strSQL, MB_OK);
			return;
		}
      	m_ndkSend = new  unsigned char[166];
		theApp.m_RTDM.SendPP(nfds3);
	}
	else if(chcommand == 0x41)            //配置分站
	{
      	m_ndkSend = new  unsigned char[64];
		int n_fen;
		            m_ndkSend[0] = 0x7E;
		            m_ndkSend[1] = 0x01;
		            m_ndkSend[2] = chcommand;
        for(int nItem=0;nItem<60;nItem++)
		{
    		strPointNo=m_listC.GetItemText(nItem,2);
			n_fen = m_Str2Data.String2Int(strPointNo);
			if(n_fen >99 || n_fen <0)
				break;
			if(n_fen == 0)//输入其它数据时,也是0  重新设为0
	      		m_listC.SetItemText(nItem,2,"0");
              m_ndkSend[nItem+3] = n_fen;
		}
		if(n_fen >99 || n_fen <0)
		{
          	AfxMessageBox("串口号在0-99间选择!", MB_OK);
			m_listC.SetItemText(nItem,2,"0"); //重新设为0
         	delete m_ndkSend;
			return;
		}
		            m_ndkSend[63] = 0x21;
    	CNDKMessage message1(INFODEFINE);
					message1.Add(m_ndkSend , 64);
					theApp.Sync(message1,1);
        for( nItem=0;nItem<60;nItem++)
		{
            				try
							{
                             m_SControl.AbsolutePosition(nItem + 1);
         					 m_SControlNew->m_szSID = nItem+1;
	         				 m_SControlNew->m_szSerialnum = m_ndkSend[nItem+3];
					   	     m_SControlNew->Update();    //Update the recordset
							}
		     			    catch (CAxException *e)
							{
					        	AfxMessageBox(e->m_szErrorDesc, MB_OK);
				        		delete e;
							}
					strPointNo.Format("%d号分站,配串口%d  ",nItem+1,m_ndkSend[nItem+3]);
					strim2 +=strPointNo;
		}//for
		theApp.InitData();
       g_Log.StatusOut("配置分站:" +strim2);
          	AfxMessageBox("配置分站命令发送成功!", MB_OK);
	}
	else if(chcommand == 0x47)            //通讯测试
	{
      	m_ndkSend = new  unsigned char[4];
		            m_ndkSend[0] = 0x7E;
		            m_ndkSend[1] = nfds3;
		            m_ndkSend[2] = chcommand;
		            m_ndkSend[3] = 0x21;
    	CNDKMessage message1(TESTCOMMUNICATION);
					message1.Add(m_ndkSend , 200);
					theApp.Sync(message1,1);
 	  strim2.Format("通讯测试:%d号分站",nfds3);
      g_Log.StatusOut(strim2);
	}
	else if(chcommand == 0x5A)            //故障闭锁
	{
		if(m_SerialF[nfds3].SFSd ==0)
		{
        	strim2.Format("%d号分站没有巡检!",nfds3);
            AfxMessageBox(strim2, MB_OK);
			return;
		}
      	m_ndkSend = new  unsigned char[5];
				    m_ndkSend[0] = 0x7E;
		            m_ndkSend[1] = nfds3;
		            m_ndkSend[2] = chcommand;
					nfds = m_FUNCTION.GetCurSel();
					if(nfds >1)
					{
          	AfxMessageBox("请选择“使能”或“关闭”!", MB_OK);
			m_FUNCTION.SetCurSel(0);
         	delete m_ndkSend;
			return;
					}
		            m_ndkSend[3] = nfds;
		            m_ndkSend[4] = 0x21;
    	CNDKMessage message1(FAULTATRESIA);
					message1.Add(m_ndkSend , 200);
					theApp.Sync(message1,1);
					theApp.n_temp =nfds;

/*            				try
							{
                             m_SControl.AbsolutePosition(m_ndkSend[1]);
         					 m_SControlNew->m_szSID = m_ndkSend[1];
	         				 m_SControlNew->m_szSpeCtrol = (bool)m_ndkSend[3];
					   	     m_SControlNew->Update();    //Update the recordset
							}
		     			    catch (CAxException *e)
							{
					        	AfxMessageBox(e->m_szErrorDesc, MB_OK);
				        		delete e;
							}*/
 	  strim2.Format("%d分站,故障闭锁设为:",nfds3);
			if(nfds ==0)
				strim2 +="关闭";
			else if(nfds ==1)
				strim2 +="使能";
// 	  strim2.Format("%x||%x",nfds3,m_ndkSend[3]);
      g_Log.StatusOut(strim2);
	}
	else if(chcommand == 0x46)            //风电瓦斯闭锁
	{
		if(m_SerialF[nfds3].SFSd ==0)
		{
        	strim2.Format("%d号分站没有巡检!",nfds3);
            AfxMessageBox(strim2, MB_OK);
			return;
		}
		for(int i =0; i < 6 ;i++)//风电瓦斯闭锁关系定义的测点正常时可以初始化、修改
		{
			if(str_list[i].strl =="")
				break;
        	CString strf,strc,strSQL;
		    strf = str_list[i].strl.Mid(0,2);
    		strc = str_list[i].strl.Mid(3,2);
    		int nfds = m_Str2Data.String2Int(strf);
     		int nchan = m_Str2Data.String2Int(strc);
			unsigned char nstatus = m_SlaveStation[nfds][nchan].Channel_state;
			if(nstatus == 0x10 || nstatus == 0x20 || nstatus == 0xa0)
			{
            	strSQL.Format("%d号分站%s状态为%s,不能修改!",nfds,str_list[i].strl,theApp.m_RTDM.strstatus(nstatus));
                AfxMessageBox(strSQL, MB_OK);
	    		return;
			}
		}

      	m_ndkSend = new  unsigned char[10];
		bool b_gas =true;
		            m_ndkSend[0] = 0x7E;
		            m_ndkSend[1] = nfds3;
		            m_ndkSend[2] = chcommand;
        for(int nItem=0;nItem<6;nItem++)
		{
    		strPointNo=m_listC.GetItemText(nItem,2);
			if(strPointNo == "")
			{
				b_gas =false;
				break;
			}
			strPointNo = strPointNo.Mid(3,2);
			nfds = m_Str2Data.String2Int(strPointNo);
	        		m_ndkSend[nItem+3] = nfds;
		}
		if(b_gas)
		{
		            m_ndkSend[9] = 0x21;
                	CNDKMessage message1(WINDGASATRESIA);
					message1.Add(m_ndkSend , 200);
					theApp.Sync(message1,1);

        	for(int i =0;i<6;i++)
        		str_list[i].strl=m_listC.GetItemText(i,2);
        	strim2.Format("设置%d号分站风电瓦斯闭锁:",nfds3);
            AfxMessageBox(strim2);
            g_Log.StatusOut(strim2);
		}
		else
		{
        	delete m_ndkSend;
			strPointNo.Format("第%d项不能为空!",nItem+1);
            AfxMessageBox(strPointNo);
	    	return;
		}
	}
	else if(chcommand == 0xf0)            //双风门、主扇备扇报警
	{
      	m_ndkSend = new  unsigned char[11];
       	LPCTSTR str1 = "",str2 = "",str3 = "";
      	CString  m_strsel,m_strsel2 ,str11,str12;
		int kkk=0;
            				try
							{
         					 m_Fans.m_szFansID = m_nSecond;
							 m_PORT.GetWindowText(m_strsel);
           	m_Str2Data.SplittoCString(m_strsel,str1,str2,str3);
			str11 =str1;
			m_strsel =str2;
			m_strsel +="|";
			m_strsel +=str3;
	         				 m_Fans.m_szName1 = m_strsel;
	         				 m_Fans.m_szpointnum1 = str11 ;
							 m_FUNCTION.GetWindowText(m_strsel2);
           	m_Str2Data.SplittoCString(m_strsel2,str1,str2,str3);
			str12 =str1;
			m_strsel2 =str2;
			m_strsel2 +="|";
			m_strsel2 +=str3;
	         				 m_Fans.m_szName2 = m_strsel2;
	         				 m_Fans.m_szpointnum2 = str12;
				if(str11 == str12)
				{
                 	AfxMessageBox("点号不能相同,请重选!", MB_OK);
                   	delete m_ndkSend;
          			return;
				}
				for ( int i = 0 ; i < m_Records1.size() ; i++ )
				{
    				if((str11 == m_Records1[i])&&(str12 == m_Records2[i]))
					{
						kkk =100;
                    	AfxMessageBox("关联点号已定义,请重选!", MB_OK);
                     	delete m_ndkSend;
           	    		break;
					}
				}
				if(kkk == 100)
           	    		return;

				kkk = m_Records1.size();
				  m_listC.InsertItem(kkk, str11);
    			  m_listC.SetItemText(kkk, 1, m_strsel);
    			  m_listC.SetItemText(kkk, 2, str12);
    			  m_listC.SetItemText(kkk, 3, m_strsel2);
		strim2 = str11 +" "+m_strsel+"   "+str12 + " "+m_strsel2+ "   ";  
            m_strsel.Format(_T("%d态"), m_VERIFYT.GetCurSel());
			strim2 += m_strsel+"   "+theApp.curuser;
    			  m_listC.SetItemText(kkk, 4, m_strsel);
            m_strsel.Format(_T("%d"), m_nSecond);
    			  m_listC.SetItemText(kkk, 5, m_strsel);

				  m_Records1.push_back(str11);
				  m_Records2.push_back(str12);
	
				m_Fans.m_szAStatus = m_VERIFYT.GetCurSel();

      						m_Fans.AddNew();  //Add a new, blank record
					   	    m_Fans.Update();    //Update the recordset
						    m_Fans.Requery();
							m_nSecond++;
							}
		     			    catch (CAxException *e)
							{
					        	AfxMessageBox(e->m_szErrorDesc, MB_OK);
				        		delete e;
							}
		theApp.InitData();

      g_Log.StatusOut("双设备报警关系添加:" +strim2);
	}
	else if(chcommand == 0xf1)            //数据显示页属性
	{
      	m_ndkSend = new  unsigned char[11];
		if(m_nSecond <1)
		{
                 	AfxMessageBox("请选择文件名!", MB_OK);
          			return;
		}
    	CString strPointNo,strrsy,strrsy1,strSQL;
		int ishave=0;
		strrsy1 ="dispoint"+strMetrics;
		strrsy.Format("LP%d",m_nSecond);
		CppSQLite3Query q;
		GetDlgItem(IDC_COMBO_PORT)->GetWindowText(cccc);
//				strSQL.Format("UPDATE '%s' SET LP1='' WHERE DISID =0;",
//					strrsy1);
				strSQL.Format("UPDATE '%s' SET '%s'='%s' WHERE DISID =1;",
					strrsy1,strrsy,cccc);
             q = theApp.db3.execQuery(strSQL);
		GetDlgItem(IDC_COMBO_FUNCTION)->GetWindowText(cccc);

		 if(cccc =="1")
		 {
           for(int m =0; m < 25 ;m++)
		   {
			   if(m < 8)
				strSQL.Format("UPDATE '%s' SET '%s'='%s' WHERE DISID = %d;",
					strrsy1,strrsy,m_listC.GetItemText(m,2),m+11);
			   else
				strSQL.Format("UPDATE '%s' SET '%s'='%s' WHERE DISID = %d;",
					strrsy1,strrsy,m_listC.GetItemText(m,2),m+12);
                q = theApp.db3.execQuery(strSQL);
		   }
		 }
		 else if(cccc =="2")
		 {
           for(int m =0; m < 25 ;m++)
		   {
			   if(m < 8)
				strSQL.Format("UPDATE '%s' SET '%s'='%s' WHERE DISID = %d;",
					strrsy1,strrsy,m_listC.GetItemText(m,2),m+111);
			   else
				strSQL.Format("UPDATE '%s' SET '%s'='%s' WHERE DISID = %d;",
					strrsy1,strrsy,m_listC.GetItemText(m,2),m+112);
             q = theApp.db3.execQuery(strSQL);
		   }
		 }
		 else if(cccc =="3")
		 {
           for(int m =0; m < 25 ;m++)
		   {
			   if(m < 8)
				strSQL.Format("UPDATE '%s' SET '%s'='%s' WHERE DISID = %d;",
					strrsy1,strrsy,m_listC.GetItemText(m,2),m+211);
			   else
				strSQL.Format("UPDATE '%s' SET '%s'='%s' WHERE DISID = %d;",
					strrsy1,strrsy,m_listC.GetItemText(m,2),m+212);
             q = theApp.db3.execQuery(strSQL);
		   }
		 }
    	q.finalize();
       AfxMessageBox("保存成功!", MB_OK);
		m_nchange =1000;
	}
	delete m_ndkSend;
}
Exemple #21
0
void CSetTimeDlg::OnChCBP() 
{
	UpdateData(TRUE);
		CString cccc;
		GetDlgItem(IDC_COMBO_PORT)->GetWindowText(cccc);
		int nfds3 = m_Str2Data.String2Int(cccc);
	if(chcommand != 0xf1)            //数据显示页属性
	{
		if(nfds3 <1 || nfds3>8)
		{
          	AfxMessageBox("通道号在1-8间选择!", MB_OK);
    		GetDlgItem(IDC_COMBO_PORT)->SetWindowText("1");
	    	  return;
		}
	}
	if(chcommand == 0xf1)            //数据显示页属性
	{
		m_VERIFYT.ResetContent();
    	int  mp = m_PORT.GetCurSel();
		cccc = m_Records1[mp];
//    	GetDlgItem(IDC_COMBO_VERIFYT)->EnableWindow(TRUE);
    	CString strPointNo,strrsy,strrsy1;
    	strrsy = gstrTimeOut + "\\" + strMetrics+ "rsy\\";
		int ishave=0;

		strrsy1 ="dispoint"+strMetrics;
		CppSQLite3Query q;
				strPointNo.Format("select * from '%s' WHERE DISID=1;",strrsy1);
         q = theApp.db3.execQuery(strPointNo);

        for(int k =2; k < 21 ;k++)
		{
            strPointNo = q.getStringField(k);
			strPointNo.TrimRight();
			if(cccc == strPointNo)
			{
				m_nSecond =k-1;
				ishave =k;
	    		cccc.Format("%d",k-1);
    	 	    m_VERIFYT.AddString(cccc);
            	m_VERIFYT.SetCurSel(0);
				break;
			}
		}
		if(ishave == 0)
		{
           for(int k =2; k < 21 ;k++)
		   {
            strPointNo = q.getStringField(k);
			strPointNo.TrimRight();
			if(strPointNo == "")
			{
				m_nSecond =k-1;
	    		cccc.Format("%d",k-1);
    	 	    m_VERIFYT.AddString(cccc);
            	m_VERIFYT.SetCurSel(0);
				break;
			}
		   }
		}
		m_FUNCTION.SetCurSel(0);
//		GetDlgItem(IDC_COMBO_FUNCTION)->GetWindowText(cccc);
//		nfds3 = m_Str2Data.String2Int(cccc);
//		 if(cccc =="1")
//	        m_cChWT.SetCheck(m_Str2Data.String2Int(m_CommonStr[m_ntrans].strc[105+20*(m_nlist-1)]));
         for( k =0; k < 25 ;k++)
		 {
			 if(k < 8)
    			m_listC.SetItemText(k, 2, m_CommonStr[m_nSecond].strc[k+1]);
			 else
    			m_listC.SetItemText(k, 2, m_CommonStr[m_nSecond].strc[k+2]);
		 }
/*		 else if(cccc =="2")
		 strPointNo.Format("select * from '%s' WHERE DISID>110 and DISID<120;",strrsy1);
    				  m_listC.SetItemText(ishave-111, 2, strPointNo);
		 strPointNo.Format("select * from '%s' WHERE DISID>210 and DISID<220;",strrsy1);
    				  m_listC.SetItemText(ishave-211, 2, strPointNo);
		 }*/
		q.finalize();
	}

	UpdateData(FALSE);
}
Exemple #22
0
/**
/brief
	Método encarregado de preencher a lista de atualizações a serem feitas, este método escolhe
	quais arquivos irão aparecer nesta lista.
/details
	Faz a leitura do arquivo de atualizações na web e compara a data e hora da lista 
	de arquivos com a tabela de atualizações, se ambas estiverem diferentes a tabela é
	marcada para atualização
/param void
/return void
*/
BOOL CUpdateDlg::_PreencheLista(LPCTSTR szSystem)
{
	CString strSys = szSystem;
	CProcessSystem sys;

	sys.LoadTable(szSystem, &m_tabMap, &m_indexMap);

	try
	{
		if(!CppSQLite3DB::getInstance()->isOpen())
		{
			CppSQLite3DB::getInstance()->open(CStr(m_sPath));
			//CppSQLite3DB::getInstance()->setBusyHandler();
		}
	}
	catch(CppSQLite3Exception e)
	{
		CString msg;
		msg.LoadString(IDS_ERRO_CRIANDO_DB);

		MessageBox(msg, L"Mensagem", MB_ICONINFORMATION|MB_OK);
		STLOG_WRITE("%s(%d): ERRO ABRINDO BANCO DE DADOS %s", __FUNCTION__, __LINE__, e.errorMessage());
		return FALSE;
	}

	m_manageDB->CreateDatabase(&m_tabMap, &m_indexMap);

	//Insert contrato info
	CContratoTable contrato;
	CContratoInfo info;

	info.sCodAutuador = m_params->GetValue(L"cod_autuador");
	info.sContrato = m_params->GetValue(L"contrato");

	if(!info.sCodAutuador.Trim().IsEmpty())
	{
		contrato.Init();
		contrato.SetValues(&info);
		if(!contrato.Insert(CppSQLite3DB::getInstance()))
		{
			STLOG_WRITE("Erro inserindo dados do contrato no database.");
		}
	}

	_FIELDS_ meu_registro;
	CString arquivo, data ,hora;
	int idx = 0;
	TB_ATUALIZACAO *dadoArquivo = NULL;
	CGetFile *m_httpFile;
	m_httpFile = new CGetFile();

	m_httpFile->SetProxy(&m_proxyInfo);
	m_httpFile->SetStructFile(m_sStructPath);

	m_list.ClearBars();
	m_list.DeleteAllItems();
	m_list.UpdateWindow();
	m_httpFile->SetNomeTabela(L"atualizacao");

	CString sContrato = m_params->GetValue(L"contrato");
	CString sURL;
	CString sVarPma = L"transmite_" + strSys;
	
	sURL = m_params->GetValue(sVarPma);
	if(sURL.IsEmpty())
	{
		STLOG_WRITE("CUpdateDlg::_PreencheLista(): url 'transmite_' esta vazia.");
		return FALSE;
	}

	if(! m_httpFile->GetFileFromServer(sURL, sContrato))
	{
		return FALSE;
	}
	int count = 0;

	while(!m_httpFile->IsEOF())
	{
		m_httpFile->GetRecord(&meu_registro);

		meu_registro.Lookup(L"arquivo",arquivo);
		meu_registro.Lookup(L"data",data);
		meu_registro.Lookup(L"hora",hora);

		if(!arquivo.IsEmpty())
		{
			dadoArquivo = new TB_ATUALIZACAO;
			dadoArquivo->nome = arquivo.Trim();
			dadoArquivo->data = data;
			dadoArquivo->hora = hora;

			m_listaArquivos.SetAt(arquivo, dadoArquivo);
		}

		if(!CppSQLite3DB::getInstance()->isOpen())
		{
			idx = m_list.InsertItem(m_list.GetItemCount(), arquivo);
			m_list.CreateProgress(idx, 1);
		}
		else
		{
			//fazer a consulta no banco de dados
			//verificar se a data do record "data" for maior que a data do banco "data_banco"
			//se for, adicona na lista
			CString sQuery;
			sQuery.Format(L"SELECT arquivo FROM atualizacao WHERE "
						  L"arquivo = '%s' AND data = '%s' AND hora = '%s'",
						  arquivo, 
						  data,
						  hora);
			
			try
			{
				ASSERT(CppSQLite3DB::getInstance());
				CppSQLite3Query q = CppSQLite3DB::getInstance()->execQuery(CStr(sQuery));
				if(q.eof())
				{
					idx = m_list.InsertItem(m_list.GetItemCount(), arquivo);
					m_list.CreateProgress(idx, 1);
				}

				q.finalize();
			}
			catch(CppSQLite3Exception e)
			{
				STLOG_WRITE("CUpdateDlg::_PreencheLista(): %s", e.errorMessage());
				STLOG_WRITE(sQuery);
				STLOG_WRITE("----------------------------------------------------------");
				return FALSE;
			}
		}

		m_httpFile->MoveNext();
	}

	delete(m_httpFile);
	m_list.UpdateWindow();
	return TRUE;
}
void BudgetWindow::CalcStats(const char *cat, Fixed &high, Fixed &low, Fixed &avg)
{
	if(!cat)
		return;

	BString querystring;
	Fixed cattotal;
	CppSQLite3Query query;

	// find the average amount
	for(int32 j=0; j<gDatabase.CountAccounts(); j++)
	{
		Account *acc = gDatabase.AccountAt(j);
		querystring = "select sum(amount) from account_" ;
		querystring << acc->GetID()	<< " where category = '"
					<< EscapeIllegalCharacters(cat)
					<< "';";
		query = gDatabase.DBQuery(querystring.String(),
								"BudgetWindow::CalcStats:get average");
		cattotal.AddPremultiplied(query.getInt64Field(0));
		query.finalize();
	}
	avg = cattotal;
	avg /= 12;

	// find the highest amount
	cattotal=0;
	for(int32 j=0; j<gDatabase.CountAccounts(); j++)
	{
		Account *acc = gDatabase.AccountAt(j);
		querystring = "select max(amount) from account_" ;
		querystring << acc->GetID()	<< " where category = '"
					<< EscapeIllegalCharacters(cat)
					<< "';";
		query = gDatabase.DBQuery(querystring.String(),
								"BudgetWindow::CalcStats:get highest");
		Fixed value;
		value.SetPremultiplied(query.getInt64Field(0));
		cattotal = MAX(cattotal,value);
		query.finalize();
	}
	high = cattotal;

	// find the lowest amount
	cattotal=0;
	for(int32 j=0; j<gDatabase.CountAccounts(); j++)
	{
		Account *acc = gDatabase.AccountAt(j);
		querystring = "select min(amount) from account_" ;
		querystring << acc->GetID()	<< " where category = '"
					<< EscapeIllegalCharacters(cat)
					<< "';";
		query = gDatabase.DBQuery(querystring.String(),
								"BudgetWindow::CalcStats:get highest");
		Fixed value;
		value.SetPremultiplied(query.getInt64Field(0));
		cattotal = MIN(cattotal,value);
		query.finalize();
	}
	low = cattotal;
}
void BudgetWindow::GenerateBudget(const bool &zero)
{
	// Generate a budget based on the last year's transactions
	ReportGrid income(1,0), spending(1,0);

	gDatabase.DBCommand("delete from budgetlist",
						"BudgetWindow::GenerateBudget:empty budget");

	CppSQLite3Query query;
	query = gDatabase.DBQuery("select * from categorylist order by name",
							"BudgetWindow::GenerateBudget:get categories");

	if(query.eof())
		return;

	float maxwidth=fCategoryList->StringWidth(TRANSLATE("Category"));
	while(!query.eof())
	{
		BString catname = DeescapeIllegalCharacters(query.getStringField(0));

		if(catname.ICompare(TRANSLATE("Transfer"))==0)
		{
			query.nextRow();
			continue;
		}

		bool isexpense = !query.getIntField(1);

		if(isexpense)
		{
			spending.AddItem();
			spending.SetRowTitle(spending.CountItems()-1,catname.String());
		}
		else
		{
			income.AddItem();
			income.SetRowTitle(income.CountItems()-1,catname.String());
		}
		float tempwidth = fCategoryList->StringWidth(catname.String());
		maxwidth = MAX(maxwidth,tempwidth);
		query.nextRow();
	}

	query.finalize();

	// Now that we have the list of categories, query for transactions for each
	// account from each category

	BString querystring;
	Fixed cattotal;
	for(int32 i=0; i<income.CountItems(); i++)
	{
		querystring = "";
		cattotal = 0;

		if(!zero)
		{
			for(int32 j=0; j<gDatabase.CountAccounts(); j++)
			{
				Account *acc = gDatabase.AccountAt(j);
				querystring = "select sum(amount) from account_" ;
				querystring << acc->GetID()	<< " where category = '"
							<< EscapeIllegalCharacters(income.RowTitle(i))
							<< "' and date > " << DecrementDateByYear(GetCurrentDate()) << ";";
				query = gDatabase.DBQuery(querystring.String(),
										"BudgetWindow::GenerateBudget:get category");
				cattotal.AddPremultiplied(query.getInt64Field(0));
				query.finalize();
			}
			cattotal /= 12;
			cattotal.Round();
		}
		income.SetValue(0,i,cattotal);
		gDatabase.AddBudgetEntry(BudgetEntry(income.RowTitle(i),cattotal,BUDGET_MONTHLY,false));
	}

	for(int32 i=0; i<spending.CountItems(); i++)
	{
		querystring = "";
		cattotal = 0;

		if(!zero)
		{
			for(int32 j=0; j<gDatabase.CountAccounts(); j++)
			{
				Account *acc = gDatabase.AccountAt(j);
				querystring = "select sum(amount) from account_" ;
				querystring << acc->GetID()	<< " where category = '"
							<< EscapeIllegalCharacters(spending.RowTitle(i))
							<< "';";
				query = gDatabase.DBQuery(querystring.String(),
										"BudgetWindow::GenerateBudget:get category");
				cattotal.AddPremultiplied(query.getInt64Field(0));
				query.finalize();
			}
			cattotal /= 12;
			cattotal.Round();
		}
		spending.SetValue(0,i,cattotal);
		gDatabase.AddBudgetEntry(BudgetEntry(spending.RowTitle(i),cattotal,BUDGET_MONTHLY,true));
	}
}
//private
void RPGMapSceneLayer::startPlay(float delay)
{
    CCTMXTiledMap *bgMap = (CCTMXTiledMap*)this->getChildByTag(kRPGMapSceneLayerTagBgMap);
    
    //数据库部分,读取npc数据
    CppSQLite3Query query = this->m_db.execQuery(CCString::createWithFormat(NPC_QUERY, this->m_mapData.mapId)->getCString());
    while(!query.eof())
    {
        float x = (stringToNumber<float>(query.getStringField("tmx_x")) + 0.5) * GAME_TMX_ROLE_WIDTH;
        float y = (stringToNumber<float>(query.getStringField("tmx_y")) + 0.5) * GAME_TMX_ROLE_HEIGHT;
        bool autoMove = query.getIntField("auto_move") == 1 ? true : false;
        
        RPGMapNPCRoleSprite *npc = RPGMapNPCRoleSprite::create(query.getIntField("id"), CCString::create(query.getStringField("map_texture")), CCString::create("head_texture"), CCString::create(query.getStringField("name_cns")), CCString::create(query.getStringField("content_cns")), 1, autoMove);
        npc->setTag(kRPGMapSceneLayerTagNPC + query.getIntField("id"));
        npc->setPosition(ccp(x, y));
        bgMap->addChild(npc);
        
        query.nextRow();
    }
    query.finalize();
    
    //player
    int defaultSpriteFrameIndex = 1; //默认为向下
    if(this->m_mapData.playerDirection.compare("up") == 0)
    {
        defaultSpriteFrameIndex = 10;
    }
    else if(this->m_mapData.playerDirection.compare("left") == 0)
    {
        defaultSpriteFrameIndex = 4;
    }
    else if(this->m_mapData.playerDirection.compare("right") == 0)
    {
        defaultSpriteFrameIndex = 7;
    }
    RPGMapRoleSprite *player = RPGMapRoleSprite::create(CCString::create("actor4_0.png"), CCString::create("Player"), true, defaultSpriteFrameIndex);
    player->setPosition(ccp(this->m_mapData.playerToX * GAME_TMX_ROLE_WIDTH, this->m_mapData.playerToY * GAME_TMX_ROLE_HEIGHT));
    player->setTag(kRPGMapSceneLayerTagPlayer);
    player->m_type = kRPGMapRoleSpriteTypePlayer;
    bgMap->addChild(player);
    
    CCSprite *spJoystick = CCSprite::createWithSpriteFrameName("Ball.png");
    CCSprite *joystickBg = CCSprite::createWithSpriteFrameName("Dock.png");
    OzgJoystickLayer *joystick = OzgJoystickLayer::layerActivityJoystick(50, spJoystick, joystickBg, false);
    joystick->setTag(kRPGMapSceneLayerTagJoystick);
    joystick->m_target = this;
    joystick->m_endedSelector = callfunc_selector(RPGMapSceneLayer::joystickEndedFunc);
    this->addChild(joystick);
    
    //menu
    CCMenu *mainMenu = CCMenu::create();
    mainMenu->setTag(kRPGMapSceneLayerTagMainMenu);
    mainMenu->setAnchorPoint(ccp(0.5, 0.5));
    mainMenu->setPosition(CCPointZero);
    mainMenu->setContentSize(bgMap->getContentSize());
    bgMap->addChild(mainMenu);

    CCMenuItemSprite *menuCommand = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapSceneLayer::onMenu));
    menuCommand->setPosition(ccp(mainMenu->getContentSize().width - 35, mainMenu->getContentSize().height - 35));
    menuCommand->setTag(kRPGMapSceneLayerTagMainMenuCommand);
    menuCommand->setRotation(180);
    menuCommand->setScale(0.75);
    mainMenu->addChild(menuCommand);

//    CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, true);
    this->scheduleUpdate();
    
}
Exemple #26
0
void CRcGen::Init(BOOL bUp)
{
	m_ResTable.Init(L"RES");
	CStringA sQuery;

	if(arrControles.GetSize() > 0)
	{
		_deleteArrControles();
	}

	m_nIdInicial = -1;

	_SetMaxY();
	m_nCtrl=0;
	m_nXCol=0;
	
	m_pDB = CppSQLite3DB::getInstance();
	CppSQLite3Query q;

	try
	{
	#ifdef _WIN32_WCE
		sQuery.Format("select * from res where grupo = %d", m_nGrupo);
	#else
		sQuery.Format("select * from res where grupo = %d", m_nGrupo);
	#endif
		//sQuery.Format("select * from res where id BETWEEN %d AND %d and grupo = %d", nCtrl+1, nCtrl+10, nGrupo);
		q = m_pDB->execQuery(sQuery); 

		if(!q.eof())
		{
			m_nGrupo = q.getIntField("Grupo");
		}

		while(!q.eof())
		{
			cControles cCtrl;
			
			cCtrl.nID = q.getIntField("ID");
			cCtrl.sTipo = q.getStringField("Tipo"); 
			cCtrl.iLargura = q.getIntField("Largura"); 
			cCtrl.iPagina = q.getIntField("Pagina"); 
			cCtrl.sNome = q.getStringField("Nome"); 
			cCtrl.sID = q.getStringField("IDStr"); 
			cCtrl.sDBRef.Format(L"%S.%S", q.getStringField("DBRef"), q.getStringField("DBFieldRef"));
			cCtrl.iSizeDb = q.getIntField("TamanhoCampo"); 
			cCtrl.sFill = q.getStringField("FillFrom"); 
			cCtrl.iExCtrl = q.getIntField("IsEx"); 
			cCtrl.iManterLinha = q.getIntField("Quebrar"); 
			cCtrl.iDesabilitado = q.getIntField("Desabilitar"); 
			cCtrl.iReadOnly = q.getIntField("Leitura"); 
			cCtrl.iObrigatorio = q.getIntField("Obrigatorio"); 			
			cCtrl.iGrupo = q.getIntField("Grupo"); 
			cCtrl.iSubGrupo = q.getIntField("SubGrupo");
			cCtrl.iLinhas = q.getIntField("Linhas");
			cCtrl.sBDValue = q.getStringField("BDValue");
			cCtrl.iAgrupado = q.getIntField("Agrupado");
			cCtrl.iTopo = q.getIntField("Topo");
			cCtrl.iEsquerda = q.getIntField("Esquerda");
			cCtrl.iAltura = q.getIntField("Altura");

			arrControles.Add(cCtrl);

			q.nextRow();

		}

		q.finalize();

	}
	catch(CppSQLite3Exception e)
	{
		
	}

	m_y=DEFAULT_Y_INIT;
	m_x=0;
	m_nSubGrupo=0;
}
BOOL CEditTrainDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
    m_ctlIndustryList.InsertColumn(0,"");
    m_ctlIndustryList.SetColumnWidth(0,186);
    m_ctlIndustryList.SetExtendedStyle(m_ctlIndustryList.GetExtendedStyle()|LVS_EX_CHECKBOXES);

    CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
    //
    //  create and preload _TL and _TI
    //
    //try { pDB->execDML("DROP TABLE _TL;"); } catch (...) {}
    //try { pDB->execDML("DROP TABLE _TI;"); } catch (...) {}
    CString sSQL;
    sSQL.Format("CREATE TEMP TABLE _TL AS SELECT * FROM Trains_Location WHERE Train_FK=%d;",m_iTrainID);
    pDB->execDML(sSQL);
    sSQL.Format("CREATE TEMP TABLE _TI AS SELECT * FROM Trains_Industry WHERE Train_FK=%d;",m_iTrainID);
    pDB->execDML(sSQL);
    //
    CppSQLite3Query q = pDB->execQuery("SELECT id,name FROM Locations;");
    //
    while (!q.eof())
    {
        int nIndex = m_ctlLocationList.AddString(q.fieldValue(1));
        m_ctlLocationList.SetItemData(nIndex,atoi(q.fieldValue(0)));
        q.nextRow();
    }
    q.finalize();
    sSQL.Format("SELECT name,trainid FROM Trains WHERE id=%d",m_iTrainID);
    q = pDB->execQuery(sSQL);
    if (!q.eof())
    {
        m_sTrainName = q.getStringField(0);
        m_sTrainCode = q.getStringField(1);
    }
    else
    {
        m_sTrainName = "Un-named Train";
        m_sTrainCode = "ZZZZ";
    }
    q.finalize();
    //
    //  get current locations
    //
    sSQL.Format("SELECT Trains_Location.Location_FK,Locations.name FROM Trains_Location, Locations WHERE Train_FK=%d AND Locations.id = Trains_Location.Location_FK ORDER BY route_order",m_iTrainID);
    q = pDB->execQuery(sSQL);
    while (!q.eof())
    {
        int nIndex = m_ctlRouteLocationList.AddString(q.getStringField("name"));
        m_ctlRouteLocationList.SetItemData(nIndex,q.getIntField("Location_FK"));
        //
        q.nextRow();
    }
    q.finalize();
    //
	m_ctlRemoveButton.EnableWindow(FALSE);
	m_ctlIndustryList.EnableWindow(FALSE);
	m_ctlLocalSwitcher.EnableWindow(FALSE);
	m_ctlDown.EnableWindow(FALSE);
	m_ctlUp.EnableWindow(FALSE);
    m_ctlAddButton.EnableWindow(FALSE);
    m_ctlMaxMovesText.EnableWindow(FALSE);
    m_ctlMaxMoves.EnableWindow(FALSE);
    //
    UpdateData(FALSE);
    //
    return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
void CEditTrainDialog::OnSelchangeRoutelocationlist() 
{
	// TODO: Add your control notification handler code here
    if( m_ctlRouteLocationList.GetCurSel() == -1 )
    {
    	m_ctlRemoveButton.EnableWindow(FALSE);
	    m_ctlIndustryList.EnableWindow(FALSE);
    	m_ctlLocalSwitcher.EnableWindow(FALSE);
    	m_ctlDown.EnableWindow(FALSE);
	    m_ctlUp.EnableWindow(FALSE);
        m_ctlMaxMovesText.EnableWindow(FALSE);
        m_ctlMaxMoves.EnableWindow(FALSE);
    }
    else
    {
    	m_ctlRemoveButton.EnableWindow(TRUE);
	    m_ctlIndustryList.EnableWindow(TRUE);
	    m_ctlLocalSwitcher.EnableWindow(TRUE);
    	m_ctlDown.EnableWindow(TRUE);
	    m_ctlUp.EnableWindow(TRUE);
        m_ctlMaxMovesText.EnableWindow(TRUE);
        m_ctlMaxMoves.EnableWindow(TRUE);
        //
        //  read DB for this item
        //
        int iLocationID = m_ctlRouteLocationList.GetItemData(m_ctlRouteLocationList.GetCurSel());
        CString sSQL;
        sSQL.Format("SELECT Industries.id,Industries.name FROM Industries,Sidings WHERE Industries.Sidings_FK=Sidings.id AND Sidings.Locations_FK=%d",iLocationID);
        CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
        CppSQLite3Query q = pDB->execQuery(sSQL);
        //
        m_ctlIndustryList.DeleteAllItems();
      	m_bLocalSwitcher = FALSE;
        while (!q.eof())
        {
            int nIndex = m_ctlIndustryList.InsertItem(1,q.getStringField("name"));
            m_ctlIndustryList.SetItemData(nIndex,q.getIntField("id"));
            //
            //  see if this industry is served by this train
            //
            sSQL.Format("SELECT 1 FROM _TI WHERE Industry_FK=%d",q.getIntField("id"));
            CppSQLite3Query q2 = pDB->execQuery(sSQL);
            BOOL bCheck = FALSE;
            if( !q2.eof() )
                bCheck = TRUE;
            q2.finalize();
            if( bCheck )
                m_ctlIndustryList.SetCheck(nIndex,TRUE);
            //
            q.nextRow();
        }
        q.finalize();
        //
        //  check for local switcher for this location
        //
        sSQL.Format("SELECT localswitcher FROM _TL WHERE Location_FK=%d;",iLocationID);
        q = pDB->execQuery(sSQL);
        if( !q.eof() )
        {
            if( q.getIntField("localswitcher") == 1 )
                m_bLocalSwitcher = TRUE;
        }
        q.finalize();
        //
        //  check for limited moves
        //
        sSQL.Format("SELECT max_moves FROM _TL WHERE Location_FK=%d;",iLocationID);
        q = pDB->execQuery(sSQL);
        if( !q.eof() )
        {
            if( q.getIntField("max_moves") > 0 )
                m_iMaxMoves = q.getIntField("max_moves");
            else
                m_iMaxMoves = 0;
        }
        q.finalize();
        //
        sSQL.Format("SELECT 1 FROM Sidings WHERE Sidings.Locations_FK=%d AND interchange=1",iLocationID);
        q = pDB->execQuery(sSQL);
        if( !q.eof() )
        {
            m_ctlSwitchInterchanges.EnableWindow(TRUE);
            sSQL.Format("SELECT switch_interchanges FROM _TL WHERE Location_FK=%d;",iLocationID);
            CppSQLite3Query q2 = pDB->execQuery(sSQL);
            if( !q2.eof() )
            {
                int iSwitch = q2.getIntField("switch_interchanges");
                m_bSwitchInterchanges = iSwitch==1?TRUE:FALSE;
            }
            q2.finalize();
        }
        else
        {
            m_ctlSwitchInterchanges.EnableWindow(FALSE);
            m_bSwitchInterchanges = FALSE;
        }
        q.finalize();
    }
    UpdateData(FALSE);
    if( m_bLocalSwitcher )
        m_ctlIndustryList.EnableWindow(FALSE);
    else
        m_ctlIndustryList.EnableWindow(TRUE);
}
void CEditTrainDialog::OnOK() 
{
	// TODO: Add extra validation here
    //
    //  insert into Trains_Location / Trains_Industry
    //  (see code in OnCreateButton below)
    //

    UpdateData();
    //
    CppSQLite3DB* pDB = &((CTrainOpsApp*)AfxGetApp())->m_pDB;
    //
    if( m_iTrainID == -1 )
    {
        //
        //  Convert to Trains, Train_Location, and Train_Industry tables
        //
        //  If there are not any industries checked, AND there isnt a local switcher checked,
        //  we make a location/location/location route.  If there are industries checked, its
        //  an industry-based checklist.  All the same to the program, different for the user
        //
        //  First, create Train table entry, and get the ID
        //
        CString sSQL;
        sSQL.Format("INSERT INTO Trains (trainid,name,Route_FK) VALUES (\"%s\",\"%s\",-1);",m_sTrainCode,m_sTrainName);
        try {
            pDB->execDML(sSQL);
        }
        catch (...)
        {
            sSQL.Format("INSERT INTO Trains (trainid,name) VALUES (\"%s\",\"%s\");",m_sTrainCode,m_sTrainName);
            pDB->execDML(sSQL);
        }
        //
        sSQL = "SELECT last_insert_rowid()";
        CppSQLite3Query q = pDB->execQuery(sSQL);   
        int iTrainID = atoi(q.fieldValue(0));
        q.finalize();
        //
        //  update _TL and _TI with train ID
        //
        sSQL.Format("UPDATE _TI SET Train_FK=%d;",iTrainID);
        pDB->execDML(sSQL);
        pDB->execDML("INSERT INTO Trains_Industry SELECT * FROM _TI");
        //
        //  Put entries into Train_Location table
        //
        for( int i=0;i<m_ctlRouteLocationList.GetCount();i++ )
        {
            int iLocationID = m_ctlRouteLocationList.GetItemData(i);
            //
            //  local switcher and switch_interchanges for this location
            //
            sSQL.Format("SELECT localswitcher,switch_interchanges,max_moves FROM _TL WHERE Location_FK=%d;",iLocationID);
            CppSQLite3Query q = pDB->execQuery(sSQL);
            int iLocalSwitcher(0);
            int iSwitchInterchanges(1);
            int iMaxMoves(0);
            if( !q.eof())
            {
                iLocalSwitcher = q.getIntField("localswitcher");
                iSwitchInterchanges = q.getIntField("switch_interchanges");
                iMaxMoves = q.getIntField("max_moves");
            }
            q.finalize();
            //
            sSQL.Format("INSERT INTO Trains_Location (Train_FK,route_order,Location_FK,localswitcher,switch_interchanges,max_moves) VALUES (%d,%d,%d,%d,%d,%d);",iTrainID,i+1,iLocationID,iLocalSwitcher,iSwitchInterchanges,iMaxMoves);
            pDB->execDML(sSQL);
        }
        //
        //MessageBox("Train Created!");
    }
    else
    {
        //
        //  Delete existing Train_Location and Train_Industry entries for this train
        //
        CString sSQL;
        sSQL.Format("DELETE FROM Trains_Location WHERE Train_FK=%d;",m_iTrainID);
        pDB->execDML(sSQL);
        sSQL.Format("DELETE FROM Trains_Industry WHERE Train_FK=%d;",m_iTrainID);
        pDB->execDML(sSQL);
        //
        //  Update Routes name and code
        //
        sSQL.Format("UPDATE Trains SET trainid=\"%s\" ,name=\"%s\" WHERE id=%d;",m_sTrainCode,m_sTrainName,m_iTrainID);
        pDB->execDML(sSQL);
        //
        //  Put entries into Trains_Location and Trains_Industry tables
        //
        pDB->execDML("INSERT INTO Trains_Industry SELECT * FROM _TI");
        //
        for( int i=0;i<m_ctlRouteLocationList.GetCount();i++ )
        {
            int iLocationID = m_ctlRouteLocationList.GetItemData(i);
            //
            //  local switcher and switch interchanges for this location?
            //
            sSQL.Format("SELECT localswitcher,switch_interchanges,max_moves FROM _TL WHERE Location_FK=%d;",iLocationID);
            CppSQLite3Query q = pDB->execQuery(sSQL);
            int iLocalSwitcher(0);
            int iSwitchInterchanges(1);
            int iMaxMoves(0);
            if( !q.eof())
            {
                iLocalSwitcher = q.getIntField("localswitcher");
                iSwitchInterchanges = q.getIntField("switch_interchanges");
                iMaxMoves = q.getIntField("max_moves");
            }
            q.finalize();
            //
            sSQL.Format("INSERT INTO Trains_Location (Train_FK,route_order,Location_FK,localswitcher,switch_interchanges,max_moves) VALUES (%d,%d,%d,%d,%d,%d);",m_iTrainID,i+1,iLocationID,iLocalSwitcher,iSwitchInterchanges,iMaxMoves);
            pDB->execDML(sSQL);
        }
        //
        MessageBox("Train Updated!");
    }
    //
    try { pDB->execDML("DROP TABLE _TL;"); } catch (...) {}
    try { pDB->execDML("DROP TABLE _TI;"); } catch (...) {}
	CDialog::OnOK();
}
int main(int argc, char** argv)
{
    try
    {
        int i, fld;
        time_t tmStart, tmEnd;
        CppSQLite3DB db;

        cout << "SQLite Header Version: " << CppSQLite3DB::SQLiteHeaderVersion() << endl;
        cout << "SQLite Library Version: " << CppSQLite3DB::SQLiteLibraryVersion() << endl;
        cout << "SQLite Library Version Number: " << CppSQLite3DB::SQLiteLibraryVersionNumber() << endl;

        remove(gszFile);
        db.open(gszFile);

        cout << endl << "emp table exists=" << (db.tableExists("emp") ? "TRUE":"FALSE") << endl;
        cout << endl << "Creating emp table" << endl;
        db.execDML("create table emp(empno int, empname char(20));");
        cout << endl << "emp table exists=" << (db.tableExists("emp") ? "TRUE":"FALSE") << endl;
        ////////////////////////////////////////////////////////////////////////////////
        // Execute some DML, and print number of rows affected by each one
        ////////////////////////////////////////////////////////////////////////////////
        cout << endl << "DML tests" << endl;
        int nRows = db.execDML("insert into emp values (7, 'David Beckham');");
        cout << nRows << " rows inserted" << endl;

        nRows = db.execDML("update emp set empname = 'Christiano Ronaldo' where empno = 7;");
        cout << nRows << " rows updated" << endl;

        nRows = db.execDML("delete from emp where empno = 7;");
        cout << nRows << " rows deleted" << endl;

        ////////////////////////////////////////////////////////////////////////////////
        // Transaction Demo
        // The transaction could just as easily have been rolled back
        ////////////////////////////////////////////////////////////////////////////////
        int nRowsToCreate(25000);
        cout << endl << "Transaction test, creating " << nRowsToCreate;
        cout << " rows please wait..." << endl;
        tmStart = time(0);
		cout << "PRE-TXN AUTO COMMIT=" << (db.IsAutoCommitOn() ? "Y" : "N") << endl;
        db.execDML("begin transaction;");
		cout << "IN-TXN AUTO COMMIT=" << (db.IsAutoCommitOn() ? "Y" : "N") << endl;

        for (i = 0; i < nRowsToCreate; i++)
        {
            char buf[128];
            sprintf(buf, "insert into emp values (%d, 'Empname%06d');", i, i);
            db.execDML(buf);
        }

        db.execDML("commit transaction;");
		cout << "POST-TXN AUTO COMMIT=" << (db.IsAutoCommitOn() ? "Y" : "N") << endl;
        tmEnd = time(0);

        ////////////////////////////////////////////////////////////////////////////////
        // Demonstrate CppSQLiteDB::execScalar()
        ////////////////////////////////////////////////////////////////////////////////
        cout << db.execScalar("select count(*) from emp;") << " rows in emp table in ";
        cout << tmEnd-tmStart << " seconds (that was fast!)" << endl;

        ////////////////////////////////////////////////////////////////////////////////
        // Re-create emp table with auto-increment field
        ////////////////////////////////////////////////////////////////////////////////
        cout << endl << "Auto increment test" << endl;
        db.execDML("drop table emp;");
        db.execDML("create table emp(empno integer primary key, empname char(20));");
        cout << nRows << " rows deleted" << endl;

        for (i = 0; i < 5; i++)
        {
            char buf[128];
            sprintf(buf, "insert into emp (empname) values ('Empname%06d');", i+1);
            db.execDML(buf);
            cout << " primary key: " << (int)db.lastRowId() << endl;
        }

        ////////////////////////////////////////////////////////////////////////////////
        // Query data and also show results of inserts into auto-increment field
        ////////////////////////////////////////////////////////////////////////////////
        cout << endl << "Select statement test" << endl;
        CppSQLite3Query q = db.execQuery("select * from emp order by 1;");

        for (fld = 0; fld < q.numFields(); fld++)
        {
            cout << q.fieldName(fld) << "(" << q.fieldDeclType(fld) << ")|";
        }
        cout << endl;

        while (!q.eof())
        {
            cout << q.fieldValue(0) << "|";
            cout << q.fieldValue(1) << "|" << endl;
            q.nextRow();
        }


        ////////////////////////////////////////////////////////////////////////////////
        // SQLite's printf() functionality. Handles embedded quotes and NULLs
        ////////////////////////////////////////////////////////////////////////////////
        cout << endl << "SQLite sprintf test" << endl;
        CppSQLite3Buffer bufSQL;
        bufSQL.format("insert into emp (empname) values (%Q);", "He's bad");
        cout << (const char*)bufSQL << endl;
        db.execDML(bufSQL);

        bufSQL.format("insert into emp (empname) values (%Q);", NULL);
        cout << (const char*)bufSQL << endl;
        db.execDML(bufSQL);

        ////////////////////////////////////////////////////////////////////////////////
        // Fetch table at once, and also show how to use CppSQLiteTable::setRow() method
        ////////////////////////////////////////////////////////////////////////////////
        cout << endl << "getTable() test" << endl;
        CppSQLite3Table t = db.getTable("select * from emp order by 1;");

        for (fld = 0; fld < t.numFields(); fld++)
        {
            cout << t.fieldName(fld) << "|";
        }
        cout << endl;
        for (int row = 0; row < t.numRows(); row++)
        {
            t.setRow(row);
            for (int fld = 0; fld < t.numFields(); fld++)
            {
                if (!t.fieldIsNull(fld))
                    cout << t.fieldValue(fld) << "|";
                else
                    cout << "NULL" << "|";
            }
            cout << endl;
        }


        ////////////////////////////////////////////////////////////////////////////////
        // Test CppSQLiteBinary by storing/retrieving some binary data, checking
        // it afterwards to make sure it is the same
        ////////////////////////////////////////////////////////////////////////////////
        cout << endl << "Binary data test" << endl;
        db.execDML("create table bindata(desc char(10), data blob);");
        
        unsigned char bin[256];
        CppSQLite3Binary blob;

        for (i = 0; i < sizeof bin; i++)
        {
            bin[i] = i;
        }

        blob.setBinary(bin, sizeof bin);

        bufSQL.format("insert into bindata values ('testing', %Q);", blob.getEncoded());
        db.execDML(bufSQL);
        cout << "Stored binary Length: " << sizeof bin << endl;

        q = db.execQuery("select data from bindata where desc = 'testing';");

        if (!q.eof())
        {
            blob.setEncoded((unsigned char*)q.fieldValue("data"));
            cout << "Retrieved binary Length: " << blob.getBinaryLength() << endl;
        }
		q.finalize();

        const unsigned char* pbin = blob.getBinary();
        for (i = 0; i < sizeof bin; i++)
        {
            if (pbin[i] != i)
            {
                cout << "Problem: i: ," << i << " bin[i]: " << pbin[i] << endl;
            }
        }


		////////////////////////////////////////////////////////////////////////////////
        // Pre-compiled Statements Demo
        ////////////////////////////////////////////////////////////////////////////////
        cout << endl << "Transaction test, creating " << nRowsToCreate*2;
        cout << " rows please wait..." << endl;
        db.execDML("drop table emp;");
        db.execDML("create table emp(empno int, empname char(20));");
        tmStart = time(0);
        db.execDML("begin transaction;");

        cout << endl << "Creating with bind by number" << endl;
        CppSQLite3Statement stmt = db.compileStatement("insert into emp values (?, ?);");
        for (i = 0; i < nRowsToCreate; i++)
        {
            char buf[16];
            sprintf(buf, "EmpName%06d", i);
            stmt.bind(1, i);
            stmt.bind(2, buf);
            stmt.execDML();
            stmt.reset();
        }

        cout << endl << "Creating with bind by name" << endl;
		CppSQLite3Statement stmt2 = db.compileStatement("insert into emp values (:p1, @p2);");
        for (i = 0; i < nRowsToCreate; i++)
        {
            char buf[16];
            sprintf(buf, "EmpName%06d", i);
			stmt2.bind(":p1", i);
			stmt2.bind("@p2", buf);
            stmt2.execDML();
            stmt2.reset();
        }

		db.execDML("commit transaction;");
        tmEnd = time(0);

        cout << db.execScalar("select count(*) from emp;") << " rows in emp table in ";
        cout << tmEnd-tmStart << " seconds (that was even faster!)" << endl;
        cout << endl << "End of tests" << endl;
    }
    catch (CppSQLite3Exception& e)
    {
        cerr << e.errorCode() << ":" << e.errorMessage() << endl;
    }

    ////////////////////////////////////////////////////////////////////////////////
    // Loop until user enters q or Q
    ////////////////////////////////////////////////////////////////////////////////
    char c(' ');

    while (c != 'q' && c != 'Q')
    {
        cout << "Press q then enter to quit: ";
        cin >> c;
    }
    return 0;
}