|
利用PERL WIN32::ODBC与数据库互连的一个实例 |
|
安装
1.将perl5001.exe执行,自动解压到任意目录,如:perl,然后,install安装。 2.将PerlWin32odbc_v970208.zip解压到perl主目录,如:perl,安装便完成。 3.建立应用程序关联。双击.pl文件,弹出一个“打开方式”窗口,点击“其他(T)...”按钮,在弹出的“搜寻”窗口中找到“perlperl5binperl.exe”文件,确定。 数据源 建好ODBC系统数据源,方法略。 以下是两个示例,数据源是KJBB,映射会计科会计报表数据库。因前几月我行机构撤并,用DwRead.pl按月份读出单位,按记录号编号后生成radio单选钮,提供一个按单位查询报表的表单(FORM),然后用KjbbRead.pl读出相应的报表。 DwRead.pl # 余勇,98年10月9日 农行损益 与 资产负债二合一 CGI $|=1; if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } elsif($ENV{'REQUEST_METHOD'} eq "GET") { $buffer=$ENV{'QUERY_STRING'}; } @pairs=split(/&/,$buffer); foreach $pair(@pairs) { ($name,$value)=split(/=/,$pair); $value=~tr/+//; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $FORM{$name}=$value; } ############################### #print $FORM{'R1'},"n"; #nhsy / zcfz 数据源 #print $FORM{'D1'},"n"; #年 #print $FORM{'D2'},"n"; #月 ################################ print <<EOF; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>会计报表查询</title> </head> <body background="/images/bg03.gif"> <h2 align="center"><font color="#408080"> EOF if($FORM{'R1'} eq nhsy){ print "损益报"; }else{ print "资产负债"; } print "表查询"; print <<FOE; </font></h2> <hr> <form method="post" action="/scripts/pl/KjbbRead.pl"> <table border="0" width="100%"> <tr> <td width="33%" valign="top"> <p align="center"> 请选择要查的单位:<br> FOE print "月份: ",$FORM{'D2'}; print "<br>常规业务部分" if($FORM{'R3'} eq 1); print "<br>专项业务部分" if($FORM{'R3'} eq 2); print "<br>两报表合并" if($FORM{'R3'} eq 3); print <<OFE; </p> </td> <td width="33%"> OFE $i=0; use Win32::ODBC; $db = new Win32::ODBC("kjbb"); $db->Sql("SELECT xm FROM $FORM{'R1'}dw WHERE yue='$FORM{'D2'}'"); while($db->FetchRow()){ $value=''; $value=$db->Data(); @s=(($i eq 0) ? ""hz"" : ""dw$i"",$value); print "t<input type="radio" value=", ($i eq 0) ? ""hz$;$value"" : ""dw$i$;$value"", " name="R2"", ($i eq 0) ? " checked>" : ">", $value, "<br>n" if(length($value) > 0); $i++; } $db->Close(); print "没有查到数据!<br>n" if($i == 0); print <<QAZ; </td> <td width=34% valign=top> <p align=left> <input type="hidden" value="$FORM{'D1'}" name="D1"> <input type="hidden" value="$FORM{'D2'}" name="D2"> <input type="hidden" value="$FORM{'R1'}" name="R1"> <input type="hidden" value="$FORM{'R3'}" name="R3"> <input type="submit" value="确定" name="B1"><br> <input type="reset" value="重选" name="B2"><br> <input type="button" value="返回" name="B3" onclick="history.back()"> </p> </td> </tr> </table> </form> </body> </html> QAZ KjbbRead.pl # 余勇,98年10月9日 农行损益 与 资产负债二合一 CGI $|=1; if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } elsif($ENV{'REQUEST_METHOD'} eq "GET") { $buffer=$ENV{'QUERY_STRING'}; } @pairs=split(/&/,$buffer); foreach $pair(@pairs) { ($name,$value)=split(/=/,$pair); $value=~tr/+//; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $FORM{$name}=$value; } ($dwbh,$dwmc)=split(/$;/,$FORM{'R2'},2); print <<EOF; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>会计报表查询</title> </head> <body background="/images/bg03.gif"> <table border="0" width="100%"> <td width="95%"> <h3 align="center"><font color="#408080"> EOF if($FORM{'R1'} eq nhsy){ print $dwmc,"损益报"; }else{ print $dwmc,"资产负债"; } print "表查询(",$FORM{'D1'},$FORM{'D2'}; print "常规业务部分)" if($FORM{'R3'} eq 1); print "专项业务部分)" if($FORM{'R3'} eq 2); print "常规专项合并)" if($FORM{'R3'} eq 3); print "</font></h2></td><td width="5%">"; print "<input type="button" value="返回" name="B3" onclick="history.back()">"; print "</td>n</table>n"; print "<table border="1" width="90%">"; #年D1 月D2 数据源R1 字段名R2 常规.专项.合并 R3 use Win32::ODBC; $db = new Win32::ODBC("kjbb"); $db->Sql("SELECT hm,$dwbh FROM $FORM{'R1'}$FORM{'D1'} WHERE yue='$FORM{'D2'}' and bz='$FORM{'R3'}'"); $i=0; while($db->FetchRow()){ ($xm,$sz)=$db->Data(); print "<tr><td width="60%">",$xm,"</td><td width="40%" align="right">",$sz,"</td></tr>n"; $i++ } $db->Close(); print "</table>n"; print "没有查到数据!<br>n" if($i == 0); print "</body>n</html>"; |