在c++ builder6.0+access2003中怎样做到像如下那样读取数据呢?
我现在想实现查询一天的数据,我存入数据库的数据是每隔5秒存一次。我要实现在comboBox1、comboBox2、comboBox3中输入年、月、日后就查询那一天从00:00:00至23:59:59的全部数据,如果哪一段时间没有数据会自动赋0(例如我的单片机出故障了从00:00:00-07:59:59都没有开机,没有开机的话数据库里肯定不可能有数据,但现在我要用数据库的这些数据来画图,没开机的期间就当做值全部为0来画,只有这样我才能准确画出每一个时段对应的波形)。我现在的程序只能把数据库里现有的数据拿出来画图,其他没有记录的不会自动赋0,请求各位大哥大姐们能帮帮小弟!!我的程序如下所示:
AnsiString Year,Month,Day,Hour;
Year=ComboBox1->Text;
Month=ComboBox2->Text;
Day=ComboBox3->Text;
AnsiString str_arr = Year + "-" + Month + "-" + Day ;
AnsiString str_dep =Year + "-" + Month + "-" +IntToStr(StrToInt(Day) + 1) ;
AnsiString strSql = "select * from 日负荷曲线 where 时间 between #"+ str_arr +"#and #"+str_dep+"#";
Form1->ADOQuery8->Close();
Form1->ADOQuery8->SQL->Clear();
Form1->ADOQuery8->SQL->Add(strSql);
Form1->ADOQuery8->Open();
Form1->ADOQuery8->First();
TStringList *listA = new TStringList;
TStringList *listB = new TStringList;
Image1->Canvas->Refresh();
Image2->Canvas->Refresh();
Image3->Canvas->Refresh();
renew1();
while(!Form1->ADOQuery8->Eof)
{
String a = Form1->ADOQuery8->FieldByName("有功功率值")->AsString;
String b = Form1->ADOQuery8->FieldByName("时间")->AsDateTime;
listA->Add(b+"="+a);
listB->Add(b);
Form1->ADOQuery8->Next();
}
this->Image1->Canvas->MoveTo(21, 235-(StrToFloat(listA->Values[listA->Names[0]]))/2);
for(int i = 0; i < listA->Count; i++)
{
this->Image1->Canvas->LineTo(x, 235 - (StrToFloat(listA->Values[listA->Names[i]]))/2);
x += 835/listA->Count;
}
虽然分不多但却十分期待各位能帮我一下,谢谢!!
[解决办法]
你可以这样做,用SQL查询出某天的数据
然后用过滤方式来处理。
从00:00:00开始
用5秒为单位,过滤查询出来的数据集,如果存在数据,就代表那段时间有数据,按过滤出来的画图。
否则就按0来画图。
这个思路不知道是否可以帮助你。
[解决办法]
我想提一点,你的数据是按启动时计时还是按标准时间记时?
另外你可以对过滤出来的数据集的第一条记录进行检查,如果发现异常就采用异常情况处理,从第二条记录开始对每条记录进行检查,如果间隔正常就直接加入,否则进行插补数据.
画图时直接用插补后的数据画图.
我的意思是读数据时就对数据的合法性进行检查,对发现错漏的即时更正,保证列表中插入的数据是全部的,合法的.
[解决办法]
Lz,,你好,,,我这几天刚开始学这个软件,纯菜鸟,,我想问下,,,编个从excel文件读取数据,然后作图画出来该怎么弄啊???很急,,,希望能告诉我下,,,,非常感谢!!!
[解决办法]
1、5秒一次的文件先存入二进制临时文件
2、每个5分钟把临时文件的数据存入数据库
3、读取数据库的数据
TDateTime dateTime0, dateTime1 ;
dateTime0 = TDateTime(FormatDateTime("yyyy-mm-dd 00:00:00",DateEdit1->Date)) ;
dateTime1 = TDateTime(FormatDateTime("yyyy-mm-dd 23:59:59",DateEdit2->Date)) ;
UniTable1->Active = false ;
UniTable1->Filtered = true ;
UniTable1->Filter = "rDate >= '"+dateTime0+"' and rDate <= '"+dateTime1+"' and rGroup = " + IntToStr(RadioGroup1->ItemIndex);
UniTable1->OrderFields = "rDate" ;
UniTable1->Active = true ;