MySQLl数据库版本:5.7
CVI版本:2012
1.到NI官网下载LabWindows/CVI SQL工具包,我下载的最新版本2.2
下载完成后点击安装,安装到最后如果有提示登录账号以继续安装不用管。
2.打开CVI,在library菜单就可以看到安装成果。点进去就可以看到数据库相关API。
3.确认你的数据库版本,下载对应的ODBC工具。版本对应关系可以参考:
我使用的MySQL版本是5.7,我下载的ODBC工具是5.1,ODBC工具下载地址:https://downloads.mysql.com/archives/c-odbc/
注意:需要选择32和64,和CVI以及数据库对应。
下载完成后安装。
4.打开OBDC连接工具。
点击右侧添加,选择MySQL ODBC
打开ODBC配置界面,填写完毕后点击test,会提示success。
5.打开CVI,创建空白程序。
关键代码:
static int conHandle; int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "database.uir", PANEL)) < 0) return -1; DisplayPanel (panelHandle); DBInit (DB_INIT_SINGLETHREADED);//初始化 conHandle=DBConnect("DSN=MytestCVI");//连接数据库 RunUserInterface (); DiscardPanel (panelHandle); DBDisconnect (conHandle);//断开数据库 return 0; }
查询第一条数据代码:
int CVICALLBACK first_callback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: mapHandle=DBBeginMap(conHandle); //建立映射 DBMapColumnToInt(conHandle,"id",&id_val, &id_status);//映射变量,val和status均需在之前定义 DBMapColumnToChar (conHandle, "name", 10, name_val, &name_status, ""); DBMapColumnToInt(conHandle,"age",&age_val, &age_status); DBMapColumnToDouble(conHandle,"score",&score_val, &score_status); int stateHandle=DBActivateMap(mapHandle,"student");//激活映射,student为表的名称 while(DBFetchNext(stateHandle)!=DB_EOF){ break; } SetCtrlVal(panelHandle,PANEL_ID,id_val);//显示到对应位置 SetCtrlVal(panelHandle,PANEL_name,name_val); SetCtrlVal(panelHandle,PANEL_age,age_val); SetCtrlVal(panelHandle,PANEL_score,score_val); DBDeactivateMap (mapHandle);//失活映射 break; } return 0; }
测试:
2022年3月18日