您在本站的位置:主 页 >> 站长专区 >> 站长作品:

《自编程序把 Foxpro 数据库转变成 Html 超文本表格》

《在 Intranet上建立“电子留言板”》《屏蔽 NetWare 内存驻留程序》

 1999年第2期】     自编程序把 Foxpro 数据库转变成 Html 超文本表格
    Internet 的 WWW 网页中有大量的二维表格,这些表格有的从数据库转化而来。笔者在将 .DBF 数据库文件转化为超文本表格时编写了一段程序来自动实现,效率很高,现介绍给读者朋友。
    程序的设计思想很简单:打开 .DBF 数据库,按记录顺序分别读取数据库的各字段,然后加上 HTML 文件的表格控制符,写到超文本格式的 .HTM 文件中。笔者的程序用 Vfp5.0 写成 ,可在 Foxpro 各版本下使用。 以数据库 Taxed.dbf 为例,源程序清单和生成的超文本文件 TAX.HTM 清单附后。
* Pragram: dbf2htm.prg
* 表结构: TAXED.DBF
* 字段名  类型  宽度 小数位
* SWDJZH 字符型  9        (税务登记证号)
* QYMC   字符型  20       (企业名称)
* TBRQ   日期型  8        (填表日期)
* SZ     字符型  10       (税种)
* YNSK   数值型  8    2   (应纳税款) set talk off set safe off cr=chr(13)+chr(10) text=&quot;<!-- A HTML table convented from *.dbf -->&quot;+cr text=text+&quot;<html>&quot;+cr text=text+&quot;<head>&quot;+cr+&quot;<title>纳税情况统计表</title>&quot;+cr+&quot;</head>&quot;+cr text=text+&quot;<body>&quot;+cr+&quot;<table border="1" cellpadding="5" cellspacing="0">&quot;+cr text=text+&quot;<caption>纳税情况统计表</caption>&quot;+cr text=text+&quot;<tr>&quot;+cr; +&quot;<th><p>税务登记证号</p></th>&quot;+cr; +&quot;<th><p>企业名称</p></th>&quot;+cr; +&quot;<th><p>填表日期</p></th>&quot;+cr; +&quot;<th><p>税种</p></th>&quot;+cr; +&quot;<th><p>应纳税款</p></th>&quot;+cr; +&quot;</tr>&quot;+cr Use taxed.dbf for i=1 to recc() text=text+&quot;<tr>&quot;+cr go i scat to Datas for j=1 to fcount() do case case type(&quot;Datas(j)&quot;)=&quot;C&quot; text=text+&quot;<td>&quot;+allt(datas(j))+&quot;</td>&quot;+cr case type(&quot;Datas(j)&quot;)=&quot;D&quot; text=text+&quot;<td>&quot;+dtoc(datas(j))+&quot;</td>&quot;+cr case type(&quot;Datas(j)&quot;)=&quot;N&quot; text=text+&quot;<td align="right">&quot;+allt(str(datas(j),10,2))+&quot;</td>&quot;+cr endcase endfor text=text+&quot;</tr>&quot;+cr endfor use text=text+&quot;</table>&quot;+cr+&quot;</body>&quot;+cr+&quot;</html>&quot; handle=fcreate(&quot;Tax.htm&quot;,0) if handle=-1 wait window &quot;Can't Open TAX.HTM!&quot; cancel endif result=fputs(handle,text) if result=0 wait window &quot;Failure writing TAX.HTM&quot; else =fclose(handle) wait window &quot;Successful writing TAX.HTM !&quot; timeout 2 endif return // HTML 文件 TAX.HTM 清单: <!-- A HTML table convented from Taxed.dbf --> <html> <head> <title>纳税情况统计表</title> </head> <body> <table border="1" cellpadding="5" cellspacing="0"> <caption>纳税情况统计表</caption> <tr> <th><p>税务登记证号</p></th> <th><p>企业名称</p></th> <th><p>填表日期</p></th> <th><p>税种</p></th> <th><p>应纳税款</p></th> </tr> <tr> <td>731001283</td> <td>红月亮餐厅</td> <td>01/05/99</td> <td>营业税</td> <td align="right">500.00</td> </tr> <tr> <td>671218001</td> <td>和诚打字复印部</td> <td>01/05/99</td> <td>个人所得税</td> <td align="right">168.00</td> </tr> <tr> <td>701001117</td> <td>微通计算机服务公司</td> <td>01/06/99</td> <td>城建税</td> <td align="right">1200.00</td> </tr> <tr> <td>750328002</td> <td>白鹿塬宾馆</td> <td>01/07/99</td> <td>教育费附加</td> <td align="right">7609.01</td> </tr> <tr> <td>760901182</td> <td>古城百货大厦</td> <td>01/09/99</td> <td>房产税</td> <td align="right">1000.00</td> </tr> </table> </body> </html>

《电脑编程技巧与维护》1999年第6期】     在 Intranet上建立“电子留言板”
    以 Intranet 的模式组建和运行企业内部网络是近年来比较流行的组网方法。 在安装和配置好您的 web server, 精心制作出您的内部主页之后,您一定想让您的主页像 Internet 上的许多网页一样具有“电子留言板”的功能,以方便浏览者的信息发布和反馈。笔者利用从 Web 页面访问 Intranet 数据库的 IDC 编程法,成功地建立了本单位内部的“电子留言板”,效果很好,朋友们不妨在您的 Intranet上试试。若有问题,请与我联系:zhangking@263.net。
    一、硬件和软件环境:
    笔者单位的 Intranet 在原星形拓扑结构的局域网的基础上组建。笔者以一台联想 pentium/166,16M 内存的机器作服务器,安装正版的中文 Win97,以 pwin97 内置的 Personal Web Server 提供 Web Server 服务(关于 Web Server 服务的安装和组建 Intranet 的方法请参考专业报纸上的有关文章)。 ODBC 驱动程序在安装中文 Visual Foxpor5.0 后也被附带安装,正确设置后,支持对 Visual Foxpro 数据库的驱动。 各工作站全部运行中文 Windows95,安装 IE3.0 浏览器。
    二、从 Web 网页访问 Intranet 数据库的 IDC 编程原理:
    客户端用户从浏览器网页通过调用 .idc 文件,向 Web Server 发出请求;Web Server 服务器接收到客户端送过来的 URL,从中得到 .idc 文件名,然后装载运行 httpodbc.dll 库文件,.idc 文件被映射到 httpodbc.dll;根据 .idc 文件中提供的 ODBC 数据源,执行 .idc 文件中的 SQL 查询语句;SQL 的执行结果,与 .idc 文件中指定的 HTML 扩展文件 .htx 合并,形成 HTML 文档;合并后的 HTML文档被送回 Web Server,再返回给用户客户端,在浏览器上呈现出来。
    三、ODBC 的设置:
    ODBC 的意思是“开放数据库互连”,它提供了管理和访问目前几乎所有类型数据库的软件接口,通过 ODBC,应用程序可对所有数据库进行存取访问。安装 ODBC 驱动程序后,打开控制面板,会看到一个“32位ODBC”图标,双击该图标,选“系统DSN”页,添加 Microsoft Visual Foxpro Driver 驱动程序,在“ODBC Visual Foxpro Setup”设置窗口中的“Data Source Name”栏中填入数据源名,选中 database type 栏的“Free table directory”,再在 Path 文本框中填入 .DBF 数据库文件所在的路径。本例中数据源名为 pvfp50,路径为 C:\database.dbf。
    四、建立“电子留言板”:
    pwin97 的 Personal Web Server 安装后,会自动创建一个 C:\webshare 目录,并包含三个子目录:Wwwroot,Scripts 和 Ftproot。您的个人主页就存放在C:\Webshare\Wwwroot 路径下,默认的主页文件名为 default.htm;而 httpodbc.dll 和 *.idc 文件存放在 C:\webshare\Scripts 路径下。(C:\Webshare\Ftproot为提供Ftp服务的根目录,与我们的讨论无关。)
    为说明问题,笔者将自己 Web Server 上的有关文件经过合理简化,附于文后,存放留言记录的数据库 C:\dadabase.dbf\bbs.dbf 的库结构也附在其后 。其中,Default.htm 为电子留言板的主页文件。Tobbs.idc 为向 bbs.dbf 库中添加留言记录的 IDC 文件,其中注明了数据源(Datasource)为 pvfp50,与我们在第二步中所设置的数据源名相对应;Tobbs.idc 文件还注明了与其相对应的模板文件 Tobbs.htx,实质上是一个 HTML 扩展文件,用于承载 Tobbs.idc 执行后的返回信息。而本 Tobbs.htx 文件实际上只提供了一些提示信息。 Frombbs.idc 文件用于打开留言板时从 bbs.dbf 库中取回所有留言记录,其对应的模板文件 Frombbs.htx 将各条留言记录以表格的形式在网页中显示出来。注意:所有数据库字段变量的引用,都必须用 <% %> 扩起来,如 <%email_addr%>(电子邮箱地址),且只能在标签 <%begindetail%><%enddetail%> 内引用。
    本“电子留言板”的大致工作流程是这样的:在主页上的各文本框中输入留言和留言者姓名等有关信息,点击“粘贴到《留言板》上”按钮,主页调用 Tobbs.idc 文件(参见 Default.htm文件第9行),将记录存放于 bbs,dbf 库文件中,然后告知用户“您的留言已被粘贴在《留言板》上!”在 Default.htm 文件的头部(第 5 行)和 Tobbs.htx 文件的尾部(第 8 行),都有一个“打开留言板”按钮,点按之,即执行Frombbs.idc 文件,将各条留言以表格的形式呈现给用户。
    这样,位于 Intranet 网上不同地理位置的用户都可通过浏览器在同一个“电子留言板上”进行信息交流。 // Default.htm: 1. <html> 2. <head><title>电子留言板</title></head> 3. <body bgcolor="#ffffff"> 4. <center> 5. <form ACTION="/scripts/frombbs.IDC" METHOD="POST"> 6. <font size="5" face="行楷" color="#ff0000"><p>蓝田地税留言板</font> 7. <input TYPE="SUBMIT" VALUE=" 打开《留言板》"> </p><hr> 8. </form> 9. <form ACTION="/scripts/tobbs.IDC" METHOD="POST"> 10. <table border="0" cellpadding="10"> 11. <tr><td><h3>在这里填写您的留言:</h3></td> 12. <td rowspan="5">&nbsp;</td> 13. <td align="center"><h3>留言者简况</h3></td> 14. </tr> 15. <tr><td rowspan="3"><textarea NAME="newwords" rows="6" cols="42" VALUE=" "></textarea> 16. <br><br><input TYPE="RESET" VALUE=" 擦除重新填写 "> </td> 17. <td>姓名:<input type="TEXT" value=" " name="man_name" size="22"></td> 18. </tr> 19. <tr> 20. <td>电话/传呼号码:<input type="TEXT" value=" " name="ph_number" size="24"></td> 21. </tr> 22. <tr> 23. <td>E-mail:<input type="TEXT" value=" " name="email_addr" size="30"></td></tr> 24. <tr> 25. <td><input TYPE="submit" value="粘贴到《留言板》上"></td> 26. </tr> 27. </table> 28.</form> 29.<hr> 30.</center> 31.<p align="center"> 32. <font size="3" color="ff0000" face="行楷">欢迎您到此一游!</font> 33. <font size="4" color="ff0000" face="黑体">严禁反动、低级、不健康的留言!</font> 34.</p> 35.</body> 36.</html> //表结构: C:\DATABASE.DBF\BBS.DBF 数据记录数: 16 最近更新的时间: 01/31/99 字段 字段名 类型 宽度 小数位 1 WORDS 字符型 254 (留言) 2 DATE 日期型 8 (日期) 3 TIME 字符型 11 (时间) 4 MAN_NAME 字符型 24 (留言者姓名) 5 PH_NUMBER 字符型 26 (电话/传呼号码) 6 EMAIL_ADDR 字符型 70 (电子邮箱地址) ** 总计 ** 394 // Tobbs.idc: Datasource: pvfp50 Template: tobbs.HTX RequiredParameters:newwords,man_name,ph_number,email_addr SQLStatement: +insert into bbs.dbf values('%newwords%',date(),time(0), +'%man_name%','%ph_number%', +'<a HREF="mailto:'+'%email_addr%'+'">'+'%email_addr%'+'</a>') Maxrecords: 5000 // Tobbs.htx: 1. <html> 2. <head><title></title></head> 3. <body> 4. <center> 5. <font size="3" color="#ff0000">您的留言已被粘贴在《留言板》上!</font> 6. <hr> 7. </center> 8. <form ACTION="/scripts/frombbs.IDC" METHOD="POST"> 9. <input TYPE="SUBMIT" VALUE="打开留言板"> 10. </form> 11. <hr> 12. <a href="/default.htm">还想留言!</a> 13. </body> 14.</html> // Frombbs.idc: Datasource: pvfp50 Template: frombbs.HTX SQLStatement: +select words,man_name,ph_number,email_addr from bbs.dbf Maxrecords: 5000 // Frombbs.htx: 1. <html> 2. <head><title></title></head> 3. <body> 4. <center> 5. <font size="5" color="#ff0000" face="行楷"> 6. 蓝田地税留言板 7. </font> 8. <hr> 9. </center> 10.<%begindetail%> 11.<table border="1" cellpadding="6"> 12. <tr><td align="center">留言</td><td align="center">留言者简况</td></tr> 13. <tr><td rowspan="4"><%words%></td><td>姓名:<%man_name%></td></tr> 14. <tr><td>电话/传呼号码:<%ph_number%></td></tr> 15. <tr><td>E-mail:<%email_addr%></td></tr> 16.</table> 17.<hr> 18.<%enddetail%> 19.<a href="/default.htm">还想留言</a> 20. </body> 21.</html> 张 庆 1999.02.01

《中国电脑教育报》1999年第30期】     屏蔽 NetWare 内存驻留程序
    笔者日前在单位的 Novell 网络服务器中安装一 DOS 应用软件后, 运行时总是报告“Out of memory”(基本内存不足)。运行 DOS 的 Mem 程序后,发现此时的内存中驻留有 Share 和 Doskey 两个程序,共占据基本内存约 18K 的宝贵空间,于是意欲使机器再启动时不再运行这两个程序。 但是这两个程序是什么时候被自动地执行并驻留内存的呢?由于该工作站是无盘站,且笔者转战 Windows 领地日久, 这个“前网络时代”的简单的小问题却险些让笔者当众“翻船”。 
    笔者在一阵手忙脚乱之后,成功地稳住阵脚,回忆了 Nevell 网无盘站从启动到用户注册的全过程, 然后按部就班地寻找,终于找出了这两个程序的“老窝”,将他们 Kick 出局。 
    Novell 无盘站的启动过程是:无盘站加电后,网卡上远程启动芯片里的固化程序自动寻找文件服务器, 并读取服务器硬盘上 Novell 分区的 Login 目录下的 net$dos.sys 文件至本机内存(Net$dos.sys 为远程启动镜像文件, 由有盘站启动软盘生成),建立虚拟 A: 盘,然后顺序执行 A: 盘中的相关启动文件,无盘站启动完毕。然后某用户注册。 用户注册时,系统首先运行系统注册脚本,再运行用户注册脚本,该用户即注册成功。 
    根据这一线索,笔者在无盘站启动到 Starting MS-DOS... 时按 F8 键,选分步执行, 果然发现,Share 程序在远程启动镜像文件的自动批处理文件中被自动加载运行。然后,笔者以超级用户 Supervisor 注册入网, 运行 Syscon 程序,编辑系统注册脚本,发现 Doskey 程序在这里以语句 #F:\DOS\Doskey /insert 被加载执行。 屏蔽掉这两个内存驻留程序后,获得了足够基本内存,前述软件终于可以运行了。
    笔者使用的 DOS 版本是 DOS6.20,网络操作系统是 Netware3.12 100用户版。(陕西 张庆)
返回“站长专区”
Copyright(C) By ZhangQing 张庆 返回主页
站长邮箱:zhangking@263.net  Bp:029-95808 呼 822686