ODBC问题!!!急!!急!!急!!急!!急!!急!!急!!急!!急!!急!!
ibicp 2002-09-16 11:09:59 为了能够在局域网内实现记费,我采用了如下文所说的一种计费方式,但是按照文中提示的步骤设置,在建立ODBC数据源(设置过程没有错误)后,出现错误。提示为
ODBC Error:
the data source name maybe incorrect!
这是什么原因?请教各位高手如何解决!
附录:建立方式
使用ODBC为局域网上网计费
许多单位都想对通过代理服务器上网的电脑进行收费,但多数代理服务器软件设置管理一般都比较繁琐,计费统计麻烦。而微软的Microsoft Proxy Server 2.0却能与操作系统以及其他软件紧密结合,能够将客户端产生日志通过ODBC记录在数据库里,保存非常详细的客户端上网时间、流量等信息的数据,为上网费的计算、统计、分析带来便利。
Proxy Server的设置
首先可以通过“域用户管理器”建立账号,如果是一批账号同时上网,则可以把建立的账号进行分组,只要授予组上网的权限,组下面的账号都可以上网了。
然后,打开Internet Service Manager中的Web Proxy服务,通过其下面的Permissions选项对其进行上网授权(共有FTP Read、Gopher、Secure、WWW四项权限),其过程如下:单击Permissions选项中的Edit按钮,出现一个授权窗口,单击添加出现用户与组的窗口,通过双击相应的用户与组进行添加。增加完后通过双击两次确定后结束授权。以上只授予上面四种权限的一种,如要对其他权限授权,只要选中相应用户或组后,单击Permissions选项中“Copy To”按钮进行权限的复制。
建立Acces 97数据库
Proxy Server一般把数据写入Access和SQL二种数据库。为方便使用,笔者选择Access数据库,在建立之前,必须把保存这一数据库的路径选好,一般要选择磁盘空间比较大的地方,因为以后产生的数据量是非常大的。
复制C:Winnthelpproxy miscMsp.sql文件到一个临时位置,并将其改名成Msp.txt,用记事本打开此文件。然后打开Access程序后选择空数据库,为其选好保存位置与取好文件名(如:sjk.mdb), 选择查询选项卡,单击新建,在新建查询对话框中选择设计视图,然后点击确定。
在视图中选择SQL视图,删除里面的所有内容,把刚才打开的Msp.txt文件的内容全部复制到此视图中,单击保存并为此查询取个文件名, 双击此查询文件名,在提示时点“是”,完成Access表的建立,默认表名为MSP_LOG_TABLE,我们可以把其改名(如:msplogin)。
建立系统DSN
完成Access数据库与表的建立后,可以开始建立ODBC数据源,通过双击控制面板中的ODBC图标打开ODBC数据源管理器。其建立过程如下:在数据源管理器中选择系统DSN,单击添加按钮,选择Microsoft Access Driver(?.mdb)作为需要安装的数据源驱动程序,点击完成。输入数据源名(如:msp),并选取相应的数据库后出现窗口,点击确定完成添加。
设置Proxy Server的日志
进入Internet Service Manager窗口, 双击Web Proxy,选择Logging选项卡,点“Log to SQL/ODBC Database”,在“ODBC Data Source Name”中输入刚才所建立的系统DSN,即数据源名(如:msp);在Table中输入刚才所建立的Access表名(如:msplogin);“User name and Password”一般不用输,完成后点确定(图1)。
通过上面的设置,ODBC服务器就可以开始记录Proxy Server授权用户的上网日志。信息是非常详细的,其中包括:上网的用户名(即NT域用户账号)、上网电脑的IP地址、实际上网时间、所去网站、详细网址、接收与发送字节数等,信息是可以进行利用的。
对所得数据的利用
统计每个账号的上网时间及费用
首先通过Access查询向导创建一个简单查询,里面必须包括ClientUserName(上网账号名)、processingtime(实际上网时间)、bytessent(发送的字节数)、bytesrecvd(接收的字节数)四个字段(完成后可将字段名改成中文,便于理解)。
然后点击视图选单中的总计项,将ClientUserName设成Group By,其他三个字段设成Sum,由于要对某一账号统计费用,所以在完成上面步骤后,要为ClientUserName字节创建提示准则(如:[请输入要查询的账号全名]),这样Access就会在查询时提示用户输入要查询的账号,等用户输入完成后就会统计出相应账号的上网信息。
通过加入总计项后,Access就可以汇总相应账号的数据,我们还要加入一个用户计算费用的表达式,由于实际上网时间以毫秒为单位,所以公式中应把其转换成小时。公式格式为:([实际上网时间]/3600000)×3.5+([发送字节数]/1048576)×0.5+([接收字节数]/1048576)×0.5,在此公式中,实际上网时间、发送字节数、接收字节数为该用户相应项的总数,3.5为上网费率(即3.5元/实际上网小时数),0.5为数据流量费率(即0.5元/MB),相应的费率可以根据实际需要作调整。
查询某一用户详细上网清单
有时候用户对自己的上网费用感到怀疑,需要建立一个详细用户上网清单查询。
首先,通过查询向导建立一个简单查询,要包括ClientUserName(上网账号名)、ClientIP(上网账号IP地址)、processingtime(实际上网时间)、bytessent(发送的字节数)、bytesrecvd(接收的字节数)、DestHost(网站名)、URL(详细网站名),然后为上网账号名建立查询准则,使Access能够查询相应账号的详细信息。图2所示为建立好的查询,要查询某一用户,只要输入完整的用户名(含域名与用户名),就会得到相应用户的详细上网清单。
作为其他程序调用的数据
上面的方法是一个快速建立上网费及清单的查询,由于已经有了用户上网的详细数据,所以完全可以通过其他编程语言来调用这些数据,建立比较完整的用户上网费查询与管理系统。限于篇幅,这方面问题本文不进行讨论,有兴趣的读者可以进一步进行研究。