歷年水文年鑒匯編刊印中,堰閘實(shí)測(cè)潮量成果統(tǒng)計(jì)表、水電(抽水)站流量率定成果表等各類實(shí)測(cè)類成果表中總會(huì)存在數(shù)字、格式方面的問(wèn)題。人工錄入實(shí)測(cè)類成果表數(shù)據(jù)到南方片整匯編軟件(以下簡(jiǎn)稱南方片)中,只會(huì)提高數(shù)據(jù)錄入的錯(cuò)誤率。由于南方片基于SQL Server數(shù)據(jù)庫(kù)開(kāi)發(fā),且各類實(shí)測(cè)表在數(shù)據(jù)庫(kù)中都有相應(yīng)的表項(xiàng),因此可以采用直接寫庫(kù)的方法將Excel成果表中的數(shù)據(jù)一鍵導(dǎo)入相應(yīng)的數(shù)據(jù)庫(kù)中,來(lái)提高數(shù)據(jù)錄入的準(zhǔn)確性、高效性。而通常對(duì)數(shù)據(jù)庫(kù)的操作,習(xí)慣的做法是拼接SQL語(yǔ)句,在數(shù)據(jù)庫(kù)字段不是很多且SQL語(yǔ)句比較簡(jiǎn)單的情況下,拼接SQL語(yǔ)句不失為一種簡(jiǎn)單便捷的方法。但是遇到復(fù)雜的SQL語(yǔ)句,拼接SQL語(yǔ)句就顯得繁雜且不易閱讀。另外一種訪問(wèn)數(shù)據(jù)庫(kù)的方法就是參數(shù)化修改,這種方法高效安全,又可以省掉程序中拼接SQL語(yǔ)句的麻煩。
水電(抽水)站流量率定成果表各字段的含義和填寫參照《基礎(chǔ)水文數(shù)據(jù)庫(kù)表結(jié)構(gòu)及標(biāo)識(shí)符標(biāo)準(zhǔn)》(SL324-2005),其表標(biāo)識(shí)為HY_HPQR_H,表號(hào)為852,共23個(gè)字段,具體定義如表1所示。
圖1為望虞閘抽水站水電(抽水)站流量率定成果表Excel電子表具體內(nèi)容。
由表1和圖1可知,表和圖并不是一一對(duì)應(yīng)的關(guān)系,圖中數(shù)據(jù)的格式也同表中要求的數(shù)據(jù)格式有差異,并不能直接復(fù)制粘貼到南方片中。
數(shù)據(jù)導(dǎo)入南方片有兩種方法:一種是拼接SQL語(yǔ)句導(dǎo)入,另一種是SQL參數(shù)化導(dǎo)入。其中拼接SQL語(yǔ)句導(dǎo)入需要參照表1中各字段的定義類型,手工一個(gè)一個(gè)用“&”,“&”連接各字段值,遇到文本類型的字段,不僅容易丟失“‘”號(hào),而且錯(cuò)誤產(chǎn)生后,修改錯(cuò)誤也比較麻煩,以下為拼接的SQL插入數(shù)據(jù)的語(yǔ)句。strSql="INSERT INTO HY_HPQR_H(STCD,RTNO,MSQ BGTM,MSQEDTM,MCHGRPNO,PPUPZ,PPDWZ,ZD,STUPHD,OMPWR,OMCN,OMVNAG,IPDM,PRRV,OVWA,OBQ,OB QRCD,EFFRNO,IVNM,IVV,EFVL,EFV LRCD,OBNONT,QH98)" & "VALUES('"& STCD & "'," & Trim(iNo) & ",'" &StartT & "','" & EndT & "',NULL," &UpZ & "," & DownZ & "," & strH &",NULL," & strNs & "," & iNumbers &",NULL,NULL,NULL,NULL," & strQ& ",NULL,NULL,'h'," & strH & "," &dblEffi & ",NULL," & "'" & IIf(Val(strQ)< 0, "抽引", "抽排") & "'" & ",NULL)"
表1 支護(hù)穩(wěn)定計(jì)算結(jié)果表
圖1 望虞閘抽水站流量率定成果圖
參數(shù)化導(dǎo)入是指在設(shè)計(jì)與數(shù)據(jù)庫(kù)鏈接并訪問(wèn)時(shí),在需要數(shù)值或數(shù)據(jù)的地方,使用參數(shù)來(lái)給值。SQL參數(shù)化導(dǎo)入是首先定義各變量類型并賦值,接著用Array函數(shù)生成數(shù)組,然后在SQL插入數(shù)據(jù)語(yǔ)句中,Values后面以英文“?”代替各變量值,最后利用SQL Server數(shù)據(jù)庫(kù)存引擎提供的cmd.Parameters參數(shù)的自動(dòng)序列化功能,自動(dòng)生成滿足數(shù)據(jù)庫(kù)庫(kù)表各字段類型的SQL插入語(yǔ)句,以下為采用參數(shù)化生成的SQL插入語(yǔ)句,最后生成的SQL語(yǔ)句同拼接SQL語(yǔ)句方法一致。
arrValue = Array(STCD, iNo, StartT,EndT, Null, UpZ, DownZ, strH, Null, strNs,iNumbers, Null, Null, Null, Null, strQ, Null,Null, "h", strH, dblEffi, Null, IIf(Val(strQ) <0, "抽引", "抽排"), Null)’參數(shù)值
本文以望虞閘抽水站為例,介紹了拼接SQL語(yǔ)句導(dǎo)入法和SQL參數(shù)化導(dǎo)入法的異同,并通過(guò)采用VBA+SQL的方式,實(shí)現(xiàn)了一鍵式將水電(抽水)站流量率定成果表數(shù)據(jù)導(dǎo)入到南方片數(shù)據(jù)庫(kù)中。該方法有效避免了人工錄入實(shí)測(cè)類成果表數(shù)字、格式方面的問(wèn)題,提高了數(shù)據(jù)入庫(kù)的準(zhǔn)確性,為后續(xù)高效展開(kāi)水文年鑒匯編刊印打下良好的基礎(chǔ)■