今天我們來一個(gè)研究一個(gè)“超重磅”技術(shù)指標(biāo),這個(gè)技術(shù)指標(biāo)光是參數(shù)的數(shù)量就高達(dá)5個(gè),絕對(duì)是鄙人從事量化研究以來參數(shù)數(shù)量最多的一個(gè)技術(shù)指標(biāo)之一。這個(gè)指標(biāo)就是UDL引力線指標(biāo)。盡管這個(gè)指標(biāo)參數(shù)有點(diǎn)多,好像有點(diǎn)嘩眾取寵的嫌疑,但你還別說,設(shè)計(jì)這個(gè)指標(biāo)背后的邏輯卻是很科學(xué)的,其邏輯是很符合儒家智慧中凡事講求多方平衡的處世哲學(xué)的。下面我們看看來自百度百科的介紹,大家參考一下:
引力線(UDL)指標(biāo)是錢龍軟件Windows版分析系統(tǒng)根據(jù)指標(biāo)的設(shè)計(jì)原理以及市場(chǎng)的實(shí)際情況,對(duì)原有指標(biāo)進(jìn)行了一些合理化的改進(jìn)。由于每周交易5日,一月交易20日,引力線(UDL)指標(biāo)的參數(shù)是按照半周、一周、半月和一月設(shè)置的。通過將不同的移動(dòng)平均線綜合到一起,來確定一條能客觀反映趨勢(shì)的混合趨勢(shì)性。
話說我一看UDL指標(biāo)的參數(shù)量高達(dá)5個(gè)就略感頭疼。經(jīng)常寫代碼朋友都知道,5個(gè)參數(shù)的組合數(shù)量會(huì)比2個(gè)參數(shù)的多得多,保守估計(jì)也得多幾十上百倍。果不其然,按照咱們密集大范圍密集回測(cè)的一貫風(fēng)格,當(dāng)鄙人在云服務(wù)器上按下開始訓(xùn)練按鈕時(shí)候,軟件界面突然一愣,似乎有點(diǎn)蒙圈,等了半分鐘才彈出一個(gè)訓(xùn)練概述。
你看看,你看看,這200萬種參數(shù)組合,440億條行情,接近150天的時(shí)間,這確實(shí)有點(diǎn)夸張,我要真按照這個(gè)訓(xùn)練,等結(jié)果出來已經(jīng)是明年了。算了算了,算力有限只能退而求其次了。雙管齊下,先減小范圍,再增加參數(shù)遞增量。一番操作下來,結(jié)果好多了:
一塊CUDA顯卡功耗就是幾百瓦,更別說高算力的人工智能加速卡了,那種卡單個(gè)功耗就高達(dá)3000-5000W。這下朋友們明白OPENAI為啥每天要花10W美元電費(fèi)了吧,他那個(gè)算力需求就得花那么多。
這里順便說一句題外話,基本上所有人工智能模型歸根結(jié)底,都是通過對(duì)訓(xùn)練數(shù)據(jù)的窮舉和獎(jiǎng)懲機(jī)制來訓(xùn)練的。只要有數(shù)據(jù),你就使勁讓機(jī)器去學(xué)習(xí)就行了。大模型、小模型其訓(xùn)練原理都差不多,大模型用大機(jī)器,小模型用小機(jī)器訓(xùn)練,僅此而已。
去年鄙小組完成ETF基金小模型開發(fā)的時(shí)候,哥幾個(gè)還在商量,是不是咱低調(diào)點(diǎn),別對(duì)外宣稱咱也開發(fā)了個(gè)模型,否則讓人當(dāng)騙子就不太好了。當(dāng)時(shí)要是誰說他開發(fā)了一個(gè)AI模型,無異于窮小子突然變成億萬富豪,確實(shí)有點(diǎn)讓人接受不了。但說實(shí)話,咱現(xiàn)在運(yùn)行的后臺(tái)他就是一個(gè)不折不扣的AI基金模型啊。
言歸正傳,UDL指標(biāo)盡管參數(shù)多,但只有兩條曲線,一條曲線叫UDL,另一條叫MAUDL,交易規(guī)則也簡(jiǎn)單,那就是UDL上傳MAUDL買進(jìn),UDL下穿MAUDL賣出。
下面簡(jiǎn)單介紹一下回測(cè)參數(shù):
回測(cè)對(duì)象:如圖8大指數(shù)ETF;
行情類型:日K線;
技術(shù)指標(biāo):UDL引力線指標(biāo)
指標(biāo)參數(shù):參數(shù)1取值范圍2到10共5種,參數(shù)2取值范圍3到15共5種,參數(shù)3取值范圍5到30共6種,參數(shù)4取值范圍20到60共5種,參數(shù)5取值范圍4到20共5種,總共3750種組合;
交易規(guī)則:UDL線從下向上突破MAUDL線買進(jìn),UDL線從上向下跌破MAUDL線賣出;
回測(cè)區(qū)間:2017年1月1日到2024年6月30日;
止損幅度:4%;
止盈幅度:不設(shè)止盈;
判斷標(biāo)準(zhǔn):年化收益,越高越好。
話不多說,我們來看今天回測(cè)UDL指標(biāo)的結(jié)果:
為了方便閱讀,我們已經(jīng)用累計(jì)收益進(jìn)行了排序。我們可以看到成績(jī)最佳的一組參數(shù)是10,9,10,50和8。從回測(cè)結(jié)果來看這組參數(shù)交易頻率較低,年均交易次數(shù)僅為5.4次,8個(gè)ETF基金平均年化收益僅為3.06%,平均勝率為37.63%,這個(gè)結(jié)果確實(shí)不怎么樣。
下面我們來看8大指數(shù)基金各自的成績(jī)。雖然所有指數(shù)基金的最終成績(jī)都跑贏了標(biāo)的本身的漲幅,但是和其他指標(biāo)相比,這個(gè)UDL確實(shí)有點(diǎn)嘩眾取寵,其交易成績(jī)實(shí)在是差強(qiáng)人意,這種華而不實(shí)的指標(biāo)確實(shí)不太適合ETF基金。
本小組本著分享技術(shù)和縮小信息差的目的,所以會(huì)分享許多指標(biāo)的相關(guān)內(nèi)容。技術(shù)指標(biāo)這么多,用于量化交易當(dāng)然是個(gè)個(gè)都有用武之地。如果有朋友想直接照搬指標(biāo)參數(shù),用于ETF交易,那么請(qǐng)不要心猿意馬,朝三暮四。弱水三千,只取一瓢,請(qǐng)朋友們從中挑選一兩個(gè)指標(biāo),長(zhǎng)期堅(jiān)持即可,切忌貪多,否則可能得不償失。
最后按照老規(guī)矩,我們做一個(gè)簡(jiǎn)短的總結(jié):
華而不實(shí)的UDL指標(biāo)根本不適合用于交易ETF基金。
友情提醒:鄙人分享的所有內(nèi)容結(jié)論均基于中國(guó)A股的ETF基金,結(jié)論僅供參考,切勿將此結(jié)論用于投資其他任何交易品種。投資有風(fēng)險(xiǎn),據(jù)此投資,風(fēng)險(xiǎn)自擔(dān)。
本小組其他文章推薦:
暴跌之中方顯英雄本色:用量化策略交易ETF基金的天然優(yōu)勢(shì)
大隱隱于市——投資界掃地僧ETF的三大隱藏優(yōu)勢(shì)
ETF量化研究:DMA平均差指標(biāo)的正確用法以及最佳參數(shù)
ETF量化研究:DMI趨向指標(biāo)的正確用法以及最佳參數(shù)
ETF量化研究:CCI順勢(shì)指標(biāo)的正確用法以及最佳參數(shù)
ETF量化研究:技術(shù)指標(biāo)PSY心理線的正確用法以及最佳參數(shù)
技術(shù)指標(biāo)雙指數(shù)平均線EMA(EXPMA)的最佳參數(shù)
ETF量化研究系列:技術(shù)指標(biāo)MTM動(dòng)量線動(dòng)量指標(biāo)的勝算有多少?
引言
著名的數(shù)據(jù)庫(kù)管理系統(tǒng)有SQL Server、Oracle、DB2、Sybase ASE、Visual ForPro、Microsoft Access 等。Microsoft Access 是在Windows 環(huán)境下非常流行的桌面型數(shù)據(jù)庫(kù)管理系統(tǒng),它作為Microsoft office 組件之一,安裝和使用都非常方便,幵且支持SQL 語言,所以本文將基于Access 來介紹數(shù)據(jù)庫(kù)的操作。
建立數(shù)據(jù)源
實(shí)現(xiàn)數(shù)據(jù)庫(kù)功能的第一步便是建立數(shù)據(jù)源,下面將詳述整個(gè)過程。在Access 中建立一個(gè)數(shù)據(jù)庫(kù)。LabVIEW 數(shù)據(jù)庫(kù)工具包只能操作而不能創(chuàng)建數(shù)據(jù)庫(kù),所以必須借助第三方數(shù)據(jù)庫(kù)管理系統(tǒng),比如Access,來創(chuàng)建數(shù)據(jù)庫(kù)。本文的大型數(shù)據(jù)庫(kù)范例程序是iPhone 測(cè)試,所以先建立一個(gè)名為iPhoneData.mdb 的數(shù)據(jù)庫(kù)文件,如圖1.1 所示。
1.1
建立與數(shù)據(jù)庫(kù)的連接
在利用LabVIEW 數(shù)據(jù)庫(kù)工具包操作數(shù)據(jù)庫(kù)之前,需要先連接數(shù)據(jù)庫(kù),這就像操作文件之前,先要打開文件一樣。連接數(shù)據(jù)庫(kù)有兩種方法:
1. 利用DSN 連接數(shù)據(jù)庫(kù)
LabVIEW 數(shù)據(jù)庫(kù)工具包基于ODBC(Open Database Connectivity)技術(shù),如圖1.2 所示,在使用ODBC API 函數(shù)時(shí),需要提供數(shù)據(jù)源名DSN(Data Source Names)才能連接到實(shí)際數(shù)據(jù)庫(kù),所以我們需要首先創(chuàng)建DSN。
圖1.2 LabVIEW 數(shù)據(jù)庫(kù)工具包基于ODBC 技術(shù)
【背景知識(shí)】ODBC(Open Database Connectivity,開放數(shù)據(jù)庫(kù)互連)是微軟公司開放服務(wù)結(jié)構(gòu)(WOSA,Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫(kù)的一個(gè)組成部分,它建立了一組規(guī)范,幵提供了一組對(duì)數(shù)據(jù)庫(kù)訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。這些API 利用SQL來完成其大部分任務(wù)。ODBC 本身也提供了對(duì)SQL 語言的支持,用戶可以直接將SQL 語句送給ODBC。
在“Windows 控制面板”中雙擊“管理工具”,然后雙擊“數(shù)據(jù)源” ,迚入ODBC 數(shù)據(jù)源管理器,如圖1.3 所示。
圖1.3 ODBC 數(shù)據(jù)源管理器
User DSN(用戶數(shù)據(jù)源名)選項(xiàng)卡下建立的數(shù)據(jù)源名只有本用戶才能訪問,System DSN(系統(tǒng)數(shù)據(jù)源名)選項(xiàng)卡下建立的數(shù)據(jù)源名在該系統(tǒng)下的所有用戶都可以訪問。User DSN 選項(xiàng)卡下點(diǎn)擊“Add”按鈕,會(huì)彈出數(shù)據(jù)源驅(qū)動(dòng)選擇對(duì)話框,然后選擇Microsoft Access Driver(*.mdb),如圖1.4 所示。
圖1.4 數(shù)據(jù)源驅(qū)動(dòng)選擇對(duì)話框
點(diǎn)擊“Finish”按鈕后,會(huì)彈出ODBC Microsoft Access Setup 窗口,在Data Source Name 填入一個(gè)名字,比如iPhoneData,然后在Database 欄中單擊Select 按鈕選擇先前已經(jīng)建立好的iPhoneData.mdb 數(shù)據(jù)庫(kù)文件,其它參數(shù)保持默認(rèn),單擊OK 按鈕,如圖1.5 所示。
圖1.5 ODBC Microsoft Access Setup 窗口
完成上述設(shè)置后,就可以在User DSN 選項(xiàng)卡下看到新建的DSN 了。單擊OK 按鈕完成DNS 的建立。打開隨本文的程序:ConnectionExample.vi,在DSN Name 中填入剛建好的DSN 名幵運(yùn)行,如圖1.6 所示。
圖1.6 利用DSN 連接數(shù)據(jù)庫(kù)
【注意】使用DSN 連接數(shù)據(jù)庫(kù)需要考慮移植問題,當(dāng)你把代碼發(fā)布到其它機(jī)器上時(shí),需要手動(dòng)為其重新建立一個(gè)DSN。
2. 利用UDL 連接數(shù)據(jù)庫(kù)
Microsoft 設(shè)計(jì)的ODBC 標(biāo)準(zhǔn)只能訪問關(guān)系型數(shù)據(jù)庫(kù),對(duì)非關(guān)系型數(shù)據(jù)庫(kù)則無能為力。為解決這個(gè)問題,Microsoft 還提供了另一種技術(shù):Active 數(shù)據(jù)對(duì)象ADO(ActiveX Data Objects)技術(shù)。ADO 是Microsoft 提出的應(yīng)用程序接口(API)用以實(shí)現(xiàn)訪問關(guān)系或非關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)。ADO使用通用數(shù)據(jù)連接UDL(Universal Data Link)來獲得數(shù)據(jù)庫(kù)信息以實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接。在iPhoneData.mdb 所在的文件夾下點(diǎn)擊鼠標(biāo)右鍵->新建->Microsoft Data Link,如圖1.7 所示,幵把文件命名為“iPhoneData.udl”。
圖1.7 新建UDL 文件
雙擊“iPhoneData.udl”,打開Data Link Properties 對(duì)話框,在Provider 選項(xiàng)卡中選擇Microsoft Jet 4.0 OLE DB Provider,如圖1.8 所示,并點(diǎn)擊Next>>按鈕。
圖1.8 選擇Provider
在Connection 選項(xiàng)卡中,選擇已建立好的數(shù)據(jù)庫(kù)文件,然后點(diǎn)擊Test Connection 按鈕,如果沒有什么問題的話,會(huì)彈出Test Connection succeeded 的對(duì)話框,如圖1.9 所示。
圖1.9 選擇數(shù)據(jù)庫(kù)源
創(chuàng)建好UDL 后,打開隨本文的程序:ConnectionExample.vi 在DSN Name 中填入剛建好的DSN名并運(yùn)行,如果成功的話,會(huì)如圖1.10 所示。
圖1.10 利用UDL 連接數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)連接的可移植性問題(高級(jí)話題)
用文本編輯器打開剛新建的“iPhoneData.udl”文件,其內(nèi)容如下所示:
[oledb]; Everything after this line is an OLE DB initstringProvider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\Doc\ApplicationNotes\DatabaseAppNotes\data\iPhoneData.mdb;Persist Security Info=False
分號(hào)(;)后面的內(nèi)容是注釋可以不用搭理。Data Source 后面是數(shù)據(jù)庫(kù)的絕對(duì)路徑,所以,當(dāng)數(shù)據(jù)庫(kù)文件位置變化后,程序就會(huì)出錯(cuò)。
我們可以直接把“ iPhoneData.udl ” 文件中的信息重新生成, 然后傳給DB Tools Open
Connection .vi,如圖1.11 所示。具體的實(shí)現(xiàn)可以參看本文附帶的范例。圖1.11
圖1.11 GetDBPath.vi
在后面的程序中,本文都將使用 GetDBPath.vi 來獲得數(shù)據(jù)庫(kù)的位置信息,然后傳給DB
Tools Open Connection .vi。
數(shù)據(jù)庫(kù)基本操作
數(shù)據(jù)庫(kù)是以表的形式來記錄數(shù)據(jù)的,如圖1.12 所示,大家可以用Access 打開一個(gè)數(shù)據(jù)庫(kù)文件來體驗(yàn)一下。
圖1.12 數(shù)據(jù)庫(kù)里的表格
數(shù)據(jù)表的每一行,表示一條記錄(Record);每一列,表示記錄中的字段(Field),說的通俗點(diǎn)就是記錄中的一項(xiàng)內(nèi)容,比如測(cè)試時(shí)間。能夠唯一標(biāo)識(shí)表中某一行的屬性或?qū)傩越M,叫主鍵(Primary Key),一個(gè)表只能有一個(gè)主鍵,但可以有多個(gè)候選索引。因?yàn)橹麈I可以唯一標(biāo)識(shí)某一行記錄,所以可以確保執(zhí)行數(shù)據(jù)更新、初除的時(shí)候不會(huì)出現(xiàn)張冠李戴的錯(cuò)誤。
創(chuàng)建數(shù)據(jù)表由LabVIEW 數(shù)據(jù)庫(kù)工具包中的實(shí)現(xiàn)。參數(shù)中的Table,為被創(chuàng)建的數(shù)據(jù)表表名,Column Information 指定表格每一列的屬性,如圖1.13 所示。
圖1.13 column information
需要注意的是column information 中的Data type 設(shè)置部分,LabVIEW 的數(shù)據(jù)類型有許多種,而這里的Data type 選項(xiàng)只有幾種,所以必須清楚LabVIEW 數(shù)據(jù)類型和Column information 中的Data type 的對(duì)應(yīng)關(guān)系,如表1.1 所示。
表1.1
知道了這個(gè)對(duì)應(yīng)關(guān)系后,創(chuàng)建數(shù)據(jù)庫(kù)表格便是一件很容易的事情,范例程序如圖1.14 所示,具體代碼請(qǐng)參考CreateTable.vi。
圖1.14 創(chuàng)建數(shù)據(jù)庫(kù)表格代碼
如果數(shù)據(jù)庫(kù)表格創(chuàng)建成功,大家可以用Access 打開數(shù)據(jù)庫(kù),看到自己創(chuàng)建的表格。
刪除一個(gè)表格
與數(shù)據(jù)庫(kù)表格創(chuàng)建相對(duì)應(yīng)的是數(shù)據(jù)庫(kù)表格初除,由實(shí)現(xiàn)。將需要初除的數(shù)據(jù)庫(kù)的名字告訴DB Tools Drop Table.vi 即可完成數(shù)據(jù)庫(kù)表格的初除操作。具體實(shí)現(xiàn)如圖1.15 所示。
圖1.15 刪除數(shù)據(jù)表格
【分享】表格創(chuàng)建和初除的參數(shù)非常相似,可以很方便的在一個(gè)VI 里面同時(shí)實(shí)現(xiàn)表格的創(chuàng)建和刪除操作。
添加一條記錄
添加一條記錄由來實(shí)現(xiàn),DB Tools Insert Data.vi 需要三個(gè)主要的參數(shù):table(數(shù)據(jù)表名)告訴DB Tools Insert Data.vi 往數(shù)據(jù)庫(kù)里的哪個(gè)表格插入數(shù)據(jù);data,告訴DB Tools Insert Data.vi 插入什么數(shù)據(jù);columns 對(duì)應(yīng)插入的列的名字,其數(shù)據(jù)類型是一個(gè)字符串?dāng)?shù)組。添加記錄的范例程序如圖1.16 所示。
圖1.16 添加一條記錄
LabVIEW 數(shù)據(jù)庫(kù)工具包提供了一個(gè)工具VI ,可以把指定數(shù)據(jù)表的column 名字讀出來傳給DB Tools Insert Data.vi,這樣可以省去手動(dòng)輸入column 名字的工作。
查詢一條記錄
數(shù)據(jù)能存儲(chǔ)到數(shù)據(jù)庫(kù)之后,下一個(gè)要考慮的操作即是如何把數(shù)據(jù)讀出。把數(shù)據(jù)從數(shù)據(jù)庫(kù)中讀出的VI是
,我們只需要告訴DB Tools Select Data.vi 讀取哪個(gè)數(shù)據(jù)表格,DB Tools Select Data.vi 就會(huì)把該表格中的所有數(shù)據(jù)讀出來,如圖1.17 所示。
圖1.17 從數(shù)據(jù)庫(kù)中讀出數(shù)據(jù)
從DB Tools Select Data.vi 讀出的數(shù)據(jù)是動(dòng)態(tài)數(shù)據(jù)類型,需要通過Database Variant To Data.vi 函數(shù)把動(dòng)態(tài)數(shù)據(jù)類型轉(zhuǎn)換成正確的數(shù)據(jù)類型。
大多數(shù)情況下,我們并不需要把數(shù)據(jù)庫(kù)中的數(shù)據(jù)全部讀出來。比如,數(shù)據(jù)庫(kù)中已經(jīng)有1000 條記錄了,每次都要把1000 條記錄讀出來,費(fèi)時(shí)費(fèi)力。
LabVIEW 數(shù)據(jù)庫(kù)工具包完全支持SQL 語言,在DB Tools Select Data.vi 的optional clause 輸入端按照SQL 語法輸入條件語句,即可讀出感興趣的數(shù)據(jù)。SQL 語言非常簡(jiǎn)單,如果從來沒有接觸過SQL語言,可以花一點(diǎn)時(shí)間學(xué)習(xí)一下。LabVIEW 數(shù)據(jù)庫(kù)工具包的用戶手冊(cè)附錄A 上有SQL 的快速參考手冊(cè)。SQL 的條件查詢語法格式如圖1.18 所示。
圖1.18 SQL 的條件查詢語法格式
DB Tools Select Data.vi 已經(jīng)把SELECT 語句預(yù)先集成好了,我們只需要在optional clause 輸入端加入WHERE 語句部分即可,如圖1.19 所示。范例程序從TestResult 這張表里把字段TestTime 等于字符串“2008-8-27 16:24:34”的記錄讀出來。
圖1.19 讀出感興趣的數(shù)據(jù)
【參考知識(shí)】WHERE 語句可包括各種條件運(yùn)算符:比較運(yùn)算符(大小比較):>、>=、=、<、<=、<>、!>、!<范圍運(yùn)算符(表達(dá)式值是否在指定的范圍):BETWEEN…AND… NOT BETWEEN…AND…列表運(yùn)算符(刞斷表達(dá)式是否為列表中的指定項(xiàng)):IN (項(xiàng)1,項(xiàng)2……) NOT IN (項(xiàng)1,項(xiàng)2……)模式匹配符(刞斷值是否與指定的字符通配格式相符):LIKE、NOT LIKE空值刞斷符(刞斷表達(dá)式是否為空):IS NULL、NOT IS NULL邏輯運(yùn)算符(用于多條件的邏輯連接):NOT、AND、OR
數(shù)據(jù)庫(kù)高級(jí)操作
數(shù)據(jù)庫(kù)操作除了創(chuàng)建表格、初除表格、添加記錄、查詢記錄外,常用的還有初除記錄、更新現(xiàn)有數(shù)據(jù)等操作。由于這些操作幵沒有現(xiàn)成的VI,所以需要借助SQL 語言來實(shí)現(xiàn)。
在LabVIEW 中執(zhí)行SQL 語言案例研究
如前所述,絕大部分DBMS 都支持SQL 語言,LabVIEW 數(shù)據(jù)庫(kù)工具包實(shí)現(xiàn)的實(shí)質(zhì)也是基于SQL語言,它為不熟悉SQL 語言的用戶把SQL 語言封裝了起來,以方便他們使用。上面的操作都是基于已封裝好的VI。
雙擊DB Tools Select Data.vi,打開它的程序框圖,如圖1.20 所示,讓我們一起來研究一下它的實(shí)現(xiàn)過程。
圖1.20 DB Tools Select Data 的代碼實(shí)現(xiàn)
如圖1.20 所示,DB Tools Select Data.vi 先創(chuàng)建了SQL 語句,然后用DB Tools Excute Query.vi 來執(zhí)行SQL 語句,以此實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。
在教程中,我們也沿用這種模式,直接用SQL 來實(shí)現(xiàn)LabVIEW 數(shù)據(jù)庫(kù)工具包中沒有提供的功能。
用SQL 實(shí)現(xiàn)數(shù)據(jù)查詢操作
了解了LabVIEW 如何執(zhí)行SQL 語言后,我們可以重新實(shí)現(xiàn)0 查詢一條記錄的功能,范例程序如圖1.21 所示。
圖1.21 用SQL 查詢記錄
用SQL 實(shí)現(xiàn)初除一條記錄
通過查閱SQL 參考手冊(cè),我們知道初除一條記錄的語句是“detele”,其語法為:
DELETE FROM table_nameWHERE column_name = some_value
參考圖1.21,我們很容易實(shí)現(xiàn)初除一條記錄的操作,如圖1.22 所示。
圖1.22 刪除一條記錄
在使用“detele”語句時(shí),需要注意:
1. “detele”語句不能初除單個(gè)字段的值,只能初除一行、多行、所有行或一行也不初除;2. “detele”語句僅能初除記錄,不能初除表本身;初除表要用“drop”語句,這也是為什么LabVIEW 數(shù)據(jù)庫(kù)工具包中初除表的VI 叫Drop Table。
壓縮數(shù)據(jù)庫(kù),釋放多余空間
刪除了記錄后,你會(huì)驚奇的發(fā)現(xiàn)數(shù)據(jù)庫(kù)文件幵沒有減小,就算把所有的數(shù)據(jù)全部都初除掉,結(jié)果也一樣。這是因?yàn)閿?shù)據(jù)庫(kù)在使用一段時(shí)間后,時(shí)常會(huì)出現(xiàn)因數(shù)據(jù)初除而造成數(shù)據(jù)庫(kù)中空閑空間太多的情況,這時(shí)就需要減少分配給數(shù)據(jù)庫(kù)文件和事務(wù)日志文件的磁盤空間,以免浪費(fèi)磁盤空間。
Microsoft 提供了一個(gè)壓縮數(shù)據(jù)庫(kù)的方法,請(qǐng)參考How To Compact Microsoft Access Database Through ADO。其基本思想是,使用ADO 的擴(kuò)展: Microsoft Jet OLE DB Provider and Replication Objects (JRO)中的方法:CompactDatabase。Jet 對(duì)象在文件Msjro.dll 里面,如圖1.23 所示。
圖1.23 Msjro.dll 文件
下面將簡(jiǎn)單介紹一下在LabVIEW 中訪問Jet 對(duì)象的方法:
在前面板上放一個(gè)Automation Refnum.vi,在右鍵菜單中選擇”Select Active Class”->”Browse…”,如圖1.24 所示。
圖1.24 選擇Jet Engine
在彈出的Select Object From Type Library 窗口中點(diǎn)擊Browse 按鈕,按照?qǐng)D1.24 所示的路徑選擇Msjro.dll。然后在Objects 選擇框中選擇JetEngine(JRO.JetEngine.2.6),點(diǎn)擊OK 按鈕,如圖1.25 所示。
圖1.25 選擇Jet 對(duì)象
在程序框圖中放置一個(gè)方法節(jié)點(diǎn),幵選擇方法CompressDatabase,如圖1.26 所示。到此為止,就實(shí)現(xiàn)了在LabVIEW 中調(diào)用Jet 對(duì)象的CompressDatabase 方法。
圖1.26 調(diào)用CompressDatabase 方法
由于這個(gè)方法僅僅對(duì)原數(shù)據(jù)庫(kù)做了一個(gè)壓縮后的備份,所以,還需要把原文件移除,用這個(gè)備仹來替代原數(shù)據(jù)庫(kù)文件。詳細(xì)實(shí)現(xiàn)請(qǐng)參考Access File Compress Database.vi。
用SQL 實(shí)現(xiàn)修改數(shù)據(jù)操作SQL 中,修改一條記錄的語句是“update”,其語法為:
UPDATE table_nameSET column_name = new_valueWHERE column_name = some_value
修改一條記錄的范例程序,如圖1.27 所示:
圖1.27 修改一條記錄
總結(jié)
本章介紹了大多數(shù)最常用的數(shù)據(jù)庫(kù)操作及在LabVIEW 平臺(tái)下的實(shí)現(xiàn)方法。SQL 語言是一種數(shù)據(jù)庫(kù)操作的通用語言,不僅在LabVIEW 數(shù)據(jù)庫(kù)工具包中可以用到,在其它語言(如VB,VC)平臺(tái)下也可以使用。希望大家通過上面的操作不僅學(xué)習(xí)了LabVIEW 數(shù)據(jù)庫(kù)工具包,也熟悉了SQL 語言。
工程項(xiàng)目要求
讀者學(xué)完labVIEW 數(shù)據(jù)庫(kù)工具包后,可以按照如下要求,實(shí)現(xiàn)一個(gè)測(cè)試項(xiàng)目工程:
1. 測(cè)試iPhone 的Power 是否合格;
2. 測(cè)試iPhone 耳機(jī)的THD 曲線;
3. 測(cè)試iPhone 的觸摸屏;
4. 測(cè)試iPhone 麥克風(fēng)的聲壓級(jí)(SPL);
5. 完成測(cè)試后,把這些測(cè)試結(jié)果記錄到數(shù)據(jù)庫(kù)中;
6. 能夠讀入數(shù)據(jù)庫(kù),幵能按要求檢索數(shù)據(jù);
7. 能按照測(cè)試時(shí)間等內(nèi)容對(duì)結(jié)果迚行升序或降序排列。
該工程項(xiàng)目的界面如圖2.1 和圖2.2 所示。
圖2.1 iPhone 測(cè)試界面
圖2.2 iPhone 測(cè)試數(shù)據(jù)分析界面
具體代碼可以參考隨本文的范例:DatabaseExample.lvprj。
生成可執(zhí)行文件(*.exe)
我們討論了數(shù)據(jù)庫(kù)連接的可移植性問題,如果使用本文介紹的方法,則在生成可執(zhí)行文件的過程中不用關(guān)心UDL 文件等問題。在生成可執(zhí)行文件的過程中唯一需要注意的是把所用到的數(shù)據(jù)庫(kù)文件添到到可執(zhí)行文件的支持文件(Support files)中去。
步驟一:把數(shù)據(jù)庫(kù)文件添加到工程中去,如圖3.3 所示。步驟二:在Build specification 的Source file 選項(xiàng)中,把數(shù)據(jù)庫(kù)文件iPhoneData.mdb 添加到Support file 中,這樣iPhoneData.mdb 會(huì)被加入Support Directory。如圖2.4 所示。
其它設(shè)置與通常生成可執(zhí)行文件的基本步驟一樣,點(diǎn)擊”Build”按鈕即可生成可執(zhí)行文件。
圖2.3 把數(shù)據(jù)庫(kù)文件添加到工程
圖2.4 把數(shù)據(jù)庫(kù)文件添加到Support files 中
如果出現(xiàn)生成的可執(zhí)行文件無法執(zhí)行數(shù)據(jù)保存和檢索的操作,請(qǐng)檢查執(zhí)行文件和數(shù)據(jù)庫(kù)文件的相對(duì)路徑是否正確。
生成安裝文件(Installer)
生成安裝文件,我們所要考慮的問題是,目標(biāo)機(jī)上是否有對(duì)LabVIEW 數(shù)據(jù)庫(kù)工具包的支持——MDAC2.5。
LabVIEW 數(shù)據(jù)庫(kù)工具包已經(jīng)自帶了MDAC2.5 的安裝文件——mdac_typ.exe,所以,我們需要把mdac_typ.exe 添加到安裝文件中去。讓安裝文件在安裝過程中把MDAC2.5 替我們裝到目標(biāo)機(jī)上。
步驟一:把mdac_typ.exe 添加到工程中,如圖2.5 所示。mdac_typ.exe 在LabVIEW 安裝路徑\National Instruments\LabVIEW 8.2\Database\MDAC 中。
圖2.5 把mdac_typ.exe 添加到工程中
步驟二:在Source File 里面先把已編譯好的可執(zhí)行文件添加到ProgramfileFolder 中去,然后把mdac_typ.exe 添加到data 文件夾中去,如圖2.6 所示。
圖2.6 把mdac_typ.exe 添加到data 文件夾中
步驟三:在Advanced 設(shè)置窗口中,把mdac_typ.exe 添加到Run Executable after installation 中,如圖2.7 所示。
圖2.7 添加mdac_typ.exe 到Run Executable after installa
其余步驟與通常制作安裝文件的步驟一致,最后點(diǎn)擊Build 即可生成安裝文件了。
到此,大功終于告成了,還等什么,趕快親手去試試。
最后:
眼見為實(shí),耳聽為虛,任何事都要親自付以行動(dòng)才能真真正正的理解。在LabVIEW 這樣一個(gè)
非常適合工程師和科學(xué)家的平臺(tái)上,多嘗試,多實(shí)踐是工程能力增長(zhǎng)的不二法門。
本說明肯定存在不少問題,有任何問題,可以和我聯(lián)系,真心希望能與大家一起分享一起討論。