我把上位机和mysql连起来后,每20ms采集一次数据,程序调试没有错误,但是运行时采集几个数就会提示失败,并且也不是20ms,感觉变成1s了。
void Ca2Dlg::OnStart()
{
// TODO: 在此添加控件通知处理程序代码
RunTimeNumb = 0;
m_RunTime.Format("0");
CTime dt;
dt=CTime::GetCurrentTime();
UpdateData(0);
SetTimer(0,1000,NULL);
//SetTimer(1,1000,NULL);
SetTimer(2,20,NULL);
}
case 2:
AddDataToLists();
break;
void Ca2Dlg::AddDataToLists()
{
UpdateData(TRUE);
CString local_m_WheelSpeed = m_WheelSpeed.GetBuffer();
// 创建 MYSQL 对象。
MYSQL local_mysql;
// 初始化 MYSQL 对象。
mysql_init(&local_mysql);
// 连接数据库
if(!mysql_real_connect(&local_mysql,"localhost","root","root","test1",3306,NULL,0))
{
AfxMessageBox(_T("connect to database failed!"));
}
else
{
//AfxMessageBox(_T("connect to database success!"));
// 设置字符集, 使程序支持中文。 设置数据库字符格式,解决中文乱码问题
mysql_query(&local_mysql, "set names 'gb2312'");
}
// 创建 SQL 语句字符串
CString sql_insert;
sql_insert.Format("insert into wheel(m_WheelSpeed) values ( \'%s\')",local_m_WheelSpeed);
// 执行 sql 语句。
// mysql_query() 的返回值份很多情形, 进行判断使要注意。
if(mysql_query(&local_mysql,(char*)(LPCTSTR)sql_insert)==0)
{
AfxMessageBox("insert succeed!");
}else{
AfxMessageBox("insert failed!");
}
// 关闭 local_mysql 所关联的数据库连接, 一般情况下不用写。
mysql_close(&local_mysql);
UpdateData(FALSE);
}
你的代码什么乱七八糟的
case 2:
AddDataToLists();
break;
那么case 1:呢
switch呢。
是不是漏了什么。
数据接收完整么?用串口助手看了么?什么样的数据没有入库,找下规律。
将mysql-connector-odbc-5.3.4-win32和mysql-essential-5.1.30-win32 安装完毕,因百度经验里已经有详细的安装步骤截图,所以在此处不再演示。
关键点:1、mysql-connector-odbc-5.3.4-win32和mysql-essential-5.1.30-win32 这两个软件一定要同一个位数(这里我用32操作举例)。2、mysql-connector-odbc-5.3.4-win32和mysql-essential-5.1.30-win32 安装时如果要修改安装路径,最好只修改C或D盘符,且一定要都安装到一个盘符里。 打开ODBC数据源,我安装的上面两个软件是32位的,而我的电脑是win7 64位,要到C:\Windows\SysWOW64中去打开odbc32.exe,千万不要直接去控制面板--管理工具中打开数据源。如果你上面的两个软件安装的是64位的,那么要到C:\Windows\System32 中去打开odbc32.exe)数据源(ODBC),在用户DSN选项卡中点击“添加”Mysql的操作步骤,经验中也有,在此也不做详细描述。
20ms 的采用别的方案,windows 的时间响应 我记得是40ms。的的事件响应处理不了这么快,需要别的办法,
新建一个工程名叫mysql,编程环境选择c#,然后选择windows窗体应用程序,新建一个窗体用于显示查询到sql数据库的数据集
vs2010连接mysql数据库
从工具箱向form1窗体上拖一个按钮和datagridview控件,按钮是触发连接数据库获取数据集,按钮的名称为显示,datagridview控件是用于显示数据集内容
vs2010连接mysql数据库
单击解决方案资源管理器中的引用文件夹然后右键选择添加引用,选择浏览后打开mysql.data.dll,这是c#连接mysql数据库的动态库,里面封装了很多常用的操作数据库的方法
vs2010连接mysql数据库
在解决方案资源管理器中的form1.cs的代码中加入using MySql.Data.MySqlClient;这就是代码中的实际引用mysql.data.dll中的内容,有了这个c#就能很方便地操作sql数据库
vs2010连接mysql数据库
在按钮的单击事件中添加如下代码
string str = "Server=127.0.0.1;User ID=root;Password=123456;Database=test;CharSet=gbk;";
MySqlConnection con = new MySqlConnection(str);//实例化链接
con.Open();//开启连接
string strcmd = "select * from user";
MySqlCommand cmd = new MySqlCommand(strcmd, con);
MySqlDataAdapter ada = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);//查询结果填充数据集
dataGridView1.DataSource = ds.Tables[0];
con.Close();//关闭连接
vs2010连接mysql数据库
使用navicat软件在数据库test中新建表user,然后新建两个字段username和password(图中的栏位),navicat软件是mysql的图形化界面工具,负责新建表以及备份等数据库操作,直观地通过界面来操作
vs2010连接mysql数据库
数据库建好后就可以执行工程了,单击显示按钮执行结果如下,出现username和password说明数据库连接成功,由于没有添加数据所以下面为空
vs2010连接mysql数据库
经验内容仅供参考,
有可能是时间上的问题,20ms的时间是否是已经确定了,无法修改!!而且window反应的时间也不是这么短,建议修改一下时间
最好是用多线程来操作.20MS时间够短了。
开两个线程,每个线程里跑一个while,周期分别定1s和20ms,用windows精准定时那个思路。settime的定时器不准的