本项目实例基于前期 《用定时器在数据库表内自动生成数据实例》实现。https://blog.csdn.net/weixin_42350092/article/details/129849114?spm=1001.2014.3001.5502
在资源对话框上添加一个读取数据按钮控件,一个iPlotX控件添加变量为m_iPlotX,运行程序打开数据库可实现将数据库中数据读取出来生成曲线图。
读取数据按钮生成的响应函数代码如下:
void CDataAdoDlg::OnButton2()
{
m_iPlotX.RemoveAllChannels();
m_iPlotX.AddChannel();
UpdateWindow();
// TODO: Add your control notification handler code here
CFileDialog dlgOpen(TRUE/*TRUE打开,FALSE保存*/,
0,
0,
OFN_NOCHANGEDIR|OFN_FILEMUSTEXIST,
"All Files(mdb.*)|*.*||",//文件过滤器
NULL);
char pBuf[250];
GetCurrentDirectory(250,pBuf);
CString CStr1=pBuf;
CString CStr2=CStr1+"\\data\\";
CString mdb_1, mdb_2;
dlgOpen.m_ofn.lpstrInitialDir = CStr2;
if(IDOK == dlgOpen.DoModal())
{
mdb_1=dlgOpen.GetPathName();
mdb_2=dlgOpen.GetFileTitle();
UpdateData(true);
_variant_t RecordsAffected;
//链接数据库
try
{
//创建连接对象实例
m_pConnection.CreateInstance("ADODB.Connection");
CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
uid=;pwd=;DBQ="+mdb_1;
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(...)
{
MessageBox("连接数据库失败");
return;
}
try
{
m_pRecordset.CreateInstance("ADODB.Recordset"); //为Recordset对象创建实例
_bstr_t strCmd = "SELECT * FROM "+mdb_2;
m_pRecordset = m_pConnection->Execute(strCmd, &RecordsAffected, adCmdText);
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
}
while(!m_pRecordset->adoEOF)
{
double X=(double)atof((char*)(_bstr_t)m_pRecordset->GetCollect("X值"));
double Y=(double)atof((char*)(_bstr_t)m_pRecordset->GetCollect("Y值"));
m_iPlotX.GetChannel(0).AddXY(X, Y);
m_pRecordset->MoveNext(); //将记录集指针移动到下一条记
}
}
}
源码下载
https://blog.csdn.net/weixin_42350092/article/details/129942476?spm=1001.2014.3001.5502