歷年水文年鑒匯編刊印中,堰閘實測潮量成果統計表、水電(抽水)站流量率定成果表等各類實測類成果表中總會存在數字、格式方面的問題。人工錄入實測類成果表數據到南方片整匯編軟件(以下簡稱南方片)中,只會提高數據錄入的錯誤率。由于南方片基于SQL Server數據庫開發,且各類實測表在數據庫中都有相應的表項,因此可以采用直接寫庫的方法將Excel成果表中的數據一鍵導入相應的數據庫中,來提高數據錄入的準確性、高效性。而通常對數據庫的操作,習慣的做法是拼接SQL語句,在數據庫字段不是很多且SQL語句比較簡單的情況下,拼接SQL語句不失為一種簡單便捷的方法。但是遇到復雜的SQL語句,拼接SQL語句就顯得繁雜且不易閱讀。另外一種訪問數據庫的方法就是參數化修改,這種方法高效安全,又可以省掉程序中拼接SQL語句的麻煩。
水電(抽水)站流量率定成果表各字段的含義和填寫參照《基礎水文數據庫表結構及標識符標準》(SL324-2005),其表標識為HY_HPQR_H,表號為852,共23個字段,具體定義如表1所示。
圖1為望虞閘抽水站水電(抽水)站流量率定成果表Excel電子表具體內容。
由表1和圖1可知,表和圖并不是一一對應的關系,圖中數據的格式也同表中要求的數據格式有差異,并不能直接復制粘貼到南方片中。
數據導入南方片有兩種方法:一種是拼接SQL語句導入,另一種是SQL參數化導入。其中拼接SQL語句導入需要參照表1中各字段的定義類型,手工一個一個用“&”,“&”連接各字段值,遇到文本類型的字段,不僅容易丟失“‘”號,而且錯誤產生后,修改錯誤也比較麻煩,以下為拼接的SQL插入數據的語句。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 支護穩定計算結果表

圖1 望虞閘抽水站流量率定成果圖
參數化導入是指在設計與數據庫鏈接并訪問時,在需要數值或數據的地方,使用參數來給值。SQL參數化導入是首先定義各變量類型并賦值,接著用Array函數生成數組,然后在SQL插入數據語句中,Values后面以英文“?”代替各變量值,最后利用SQL Server數據庫存引擎提供的cmd.Parameters參數的自動序列化功能,自動生成滿足數據庫庫表各字段類型的SQL插入語句,以下為采用參數化生成的SQL插入語句,最后生成的SQL語句同拼接SQL語句方法一致。
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)’參數值

本文以望虞閘抽水站為例,介紹了拼接SQL語句導入法和SQL參數化導入法的異同,并通過采用VBA+SQL的方式,實現了一鍵式將水電(抽水)站流量率定成果表數據導入到南方片數據庫中。該方法有效避免了人工錄入實測類成果表數字、格式方面的問題,提高了數據入庫的準確性,為后續高效展開水文年鑒匯編刊印打下良好的基礎■