本人在近期一電廠控制工程中,用戶要求我們程序對數據要有自動保存和定期刪除功能,因為我們以前是做 DCS 加強系統,DCS具有數據的自動處理功能,不需要我們做。為了滿足用戶需要,應用必須實現自動數據處理。本文下面就來介紹如何使用 VC 實現基於 ODBC 數據庫的自動刪除和存儲。希望本文提供的方法對你有所幫助。
首先,注冊數據源。如圖所示:
2、然後在 IDE 中建立基於對話框的程序,並創建基類為 CRecordset 的記錄集類,如下圖所示;
3、在StdAfx.h頭文件中加入#include <afxdb.h>;
4、在對話框程序的 Dlg 中加入 CDataSet dataSet;並添加 #include "DataSet.h" 頭文件;
5、在OnInitDialog() 函數中加入兩個定時器;
SetTimer(1,1000,NULL);//1秒一個數據
SetTimer(2,5000,NULL);
6、在時鐘函數OnTimer(UINT nIDEvent)加入;
switch(nIDEvent)
{
case 1:
{
if(dataSet.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from 11"))
{
dataSet.AddNew();
CTime t1;
int nYear1,nDay,nTime,nSecond;
t1=CTime::GetCurrentTime();
nYear1=t1.GetYear();
nDay=t1.GetDay();
nTime=t1.GetHour();
nSecond=t1.GetSecond();
dataSet.m_Date=t1;
dataSet.m_LT301_PV=6;
dataSet.m_LT301_SP=nYear1;
dataSet.m_LT302_SP=nDay;
dataSet.m_LT303=nTime;
dataSet.m_PT301_PV=nSecond;
dataSet.m_PT301_SP=5;
dataSet.m_PT303=nYear1;
dataSet.m_ZC301_1=nDay;
dataSet.m_ZC302_1=nTime;
dataSet.m_ZC302_2=nSecond;
dataSet.Update();
dataSet.Close();
}
break;
}
case 2:
{
CString strSql;
CTime tm=CTime::GetCurrentTime ();
CTimeSpan tspan(0,0,10,0);//保存10分鐘數據
CTime tt=tm-tspan;
CString strTime;
strTime.Format("#%04d/%02d/%02d %d:%02d:%02d#",tt.GetYear(),tt.GetMonth(),\
tt .GetDay(),tt.GetHour(),tt.GetMinute(),tt.GetSecond());
strSql.Format("select * from 11 where Date<%s",strTime);
if(dataSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSql))
{
while(!dataSet.IsEOF())
{
dataSet.Delete();
dataSet.MoveNext();
}
dataSet.Close();
}
break;
}
}
CDialog::OnTimer(nIDEvent);
以上代碼就可以實現數據的自動保存和刪除,上面例子可以保存10分鐘的數據,一分鐘生成一個數據,數據類型為工程中位號數據,沒有任何意義。希望本文給大家ODBC數據編程有幫助。
本文配套源碼