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日