适应北方片水文资料整编程序的水量计算体会
2010年12月27日 13:22 作者:景淑娟 刘胜男 全占东
摘要介绍各月水量的计算方法,探讨北方片水文资料整编程序,包括注册表的操作、数据库服务器的配置、数据库的查询、成果的Excel输出,以为深入了解水文资料整编技术提供参考。 中国论文网5V7_q%O1m/o*ig_(P
关键词北方片水文资料整编程序;水量计算;体会 如何快速发表论文中国论文网@ID/e%@x,nfg;o4b
C+wt#Qa%^6v`0
在水文调查资料整编过程中,还原计算需要各月水量值,2007年以前辽宁水文资料整编使用辽宁水文资料整编程序,该程序具有计算各月水量的功能[1]。
从整编2008年水文资料开始,辽宁使用了北方片全国统编水文资料整编程序,该程序不提供计算各月水量的功能。在进行水文调查资料整编时,需要用水文资料
整编中的成果表《逐日平均流量表》逐日相加(累计值单位:m3/s),再乘以日秒数8.64万s,得到各月水量值(单位:万m3),相加可选用Excel
列求和功能或使用计算器累加,计算方法十分烦琐。为解决水文调查资料整编水量还原对各月水量的需要,现介绍一种利用程序计算各月水量的方法,该方法适合全
国统编的北方片整编程序计算环境,是在北方片水文资料整编的基础上,通过程序在成果数据库中读取逐日平均流量值,计算各月流量总数,输出各月水量表,输出
格式与以前使用程序计算的结果相同。 发表论文代理中国论文网2FR!YPx4D 1基本思路 中国论文网
Aj9iX"LS#eK
北方片水文资料整编程序,计算逐日流量结果保存在数据库中及Excel成果表
中。程序可以在数据库中读取,也可以在Excel成果表中读取。在Excel成果表中读取数据要知道成果表存放在哪个目录中,该目录位置信息可以通过北方
片程序读出,也可以在数据库表COM_PATHSET中得到[2-3]。通过北方片程序读出要手动操作,十分烦琐;另外,程序操作Excel速度比较慢,
要尽量避免操作Excel。在COM_PATHSET表中读取要连接数据库,对于不同的使用者该目录有可能不同。
(W^kc4Z8nE+GV0 在数据库中直接读取流量日
表数据,首先,要知道数据库的配置参数,用来连接数据库,北方片水文资料整编程序数据库配置参数保存在注册表中,根键
“hkey_local_machine”,子键“software\田中岳\北方片整汇编软件”,“linkset”项键值保存数据库连接字。其次,要
了解数据库中流量日表在数据库中的位置,逐日流量数据保存在数据库表sou_zcgb_qal中;该表的结构中stcd字段是站号,yr字段是年份,yy
是月份,d01,d02,d03,……,d31分别表示1日、2日、3日,……、31日平均流量。
l+F:bqad P0 2实现方法 中国论文网1\X(E5U)? R{ u9o
获取数据库配置参数,使用Delphi7.0语言读取注册表中数据库配置参数,配置数据库的程序段如下:
?tj8l-\0 Procedure TForm1.FormCreate(Sender: TObject); 中国论文网0or`-@"jf{
var
iTKgW@Jj8Y0 registry1:tregistry;// 注册注册表对象
SQ$o[^_*{0 s:string;
;J)}q6el#mE%l0 Begin 中国论文网r9I~`"[+Y@#o)}`
try 中国论文网8mnTW U;X1vX)d4D+e
registry1:=tregistry.Create;// 创建注册表对象
,{1wR#z
fG0 with registry1 do 中国论文网8G M&b(ba"_
begin
Vd;JOO'A7LS0 rootkey:=hkey_local_machine;// 确定根键
6}1V;wHs
M-KF}0 // 注册子键software\田中岳\北方片整汇编软件 中国论文网9om/k$R@3f.t,B,C
if openkey('software\田中岳\北方片整汇编软件',false) then
'z5Y6{JE3G;CL0 s:=readstring('linkset');// 读 linkset 键值
_+S}k7b4i%R0 end; 中国论文网$N'|)xU)R1l#r6g
ADOConnection1.ConnectionString:=s;//数据库连接字设置
QA/@ i[ Q7N {p0 except 中国论文网k J0LpF)T
application.MessageBox('读取注册表数据失败','提示信息',64); 中国论文网[@;j$U2m3bU'l~\
end;
S(M P|T;q]0 registry1.Destroy;// 释放注册表对象 中国论文网4f ]1al;j6]Q
end; 中国论文网Rqj'P4s}J8J
逐日流量数据查询,要查询某年某站的逐日流量,在配置好数据库的情况下,查询逐日流量的程序关键语句如下:
Yl,w$XJ1z8t/wIX,n0 with adoquery1 do
y6lxb5F3zo3^m0begin 中国论文网
oEo\-V+S3b.w*Z*D+E
close;sql.Clear;
%m0D
c3Z ~S0 sql.Add('select stcd 站号,yr 年份,yy 月,d01,d02,d03,d04,d05'+
2{"e?Ugy?0 ',d06,d07,d08,d09,d10,d11,d12,d13,d14,d15,d16,d17,d18,'+
{-`Bf#FL PE0 'd19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,+
@-??_L-zy0 ′ from sou_zcgb_qal'); 中国论文网W`0\c)u QUTe
sql.Add('where (stcd=:stcd1) and (yr=:yr1)'); 中国论文网8f
iq'D.a#L%h:h
sql.Add('order by yy'); 中国论文网&l*M.p$q:cu$zh_XR
parameters.ParamByName('stcd1').Value:=edit1.Text;
MPpF$E%C*TZ0h;v0 parameters.ParamByName('yr1').Value:=edit2.Text;
W}4ZP"U7F0 open; 中国论文网Q-Q`
?.z\R
end; 中国论文网$iY
xiP-E
根据查询结果计算逐日流量月总数,再乘日秒数计算月水量。
"?yg._
yYM0 3计算结果输出
^BY3m+Z"_HHLb0
经过计算的结果输出Excel表中,Excel表采用模板形式。在程序中与Excel连接采用VCL的方法。首先在程序中加入
TexcelApplication、TexcelWordbook和TexcelWorksheet对象,分别命名为EA、EW、ES。由于使用以上3
个控件,所以需要加入ExcelXP、OleServer单元。连接模板文件采用如下语句:
o:_L S0V
T5?L0 TryEA.Connect;
-kE,D Mg%Q'S\4n0 EA.Workbooks.Open(模板文件名,null,null,null,null, 中国论文网/\$J
n Wd7OP,an
null,null,null,null,null,null,null,null,null,null,1); 中国论文网8c:G{\f1}l
EW.ConnectTo(EA.Workbooks[1] as _workbook);
'kL{X6b-pm0 ES.ConnectTo(EW.Worksheets[1] as _worksheet);