安装 1.将perl5001.exe执行,自动解压到任意目录,如:\perl,然后,install安装。
2.将PerlWin32odbc_v970208.zip解压到perl主目录,如:\perl,安装便完成。
3.建立应用程序关联。双击.pl文件,弹出一个“打开方式”窗口,点击“其他(T)...”按钮,在弹出的“搜寻”窗口中找到“\perl\perl5\bin\perl.exe”文件,确定。
数据源 建好ODBC系统数据源,方法略。
以下是两个示例,数据源是KJBB,映射会计科会计报表数据库。用DwRead.pl按月份读出单位,按记录号编号后生成radio单选钮,提供一个按单位查询报表的表单(FORM),然后用KjbbRead.pl读出相应的报表。
DwRead.pl $|=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">
请选择要查的单位:
FOE
print "月份: ",$FORM{'D2'};
print "常规业务部分" if($FORM{'R3'} eq 1);
print "专项业务部分" if($FORM{'R3'} eq 2);
print "两报表合并" 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,
"\n" if(length($value) > 0);
$i++;
}
$db->Close();
print "没有查到数据!\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">
<input type="reset" value="重选" name="B2">
<input type="button" value="返回" name="B3" onclick="history.back()">
</p>
</td>
</tr>
</table>
</form>
</body>
</html>
QAZ
KjbbRead.pl $|=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";
3 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 "没有查到数据!\n" if($i == 0);
print "</body>\n</html>";