还是ODBC的问题,请各位老师帮助解决!!

还是ODBC的问题,请各位老师帮助解决!!

还是ODBC的问题,请各位老师帮助解决!!
我在安装ActiveState version 5.8.6(前面帖子有朋友提到可能版本过低,以前是5.8.0)以后,直接找到了ODBC.RAR,里面包含ODBC.PM、ODBC_XXX.PLL ,并按下面的步骤操作:
a) Copy the ODBC.PM file into the directory perl\lib\win32\
b) Rename the file ODBC_XXX.PLL to ODBC.PLL
c) Make a directory: perl\lib\auto\win32\odbc\
d) Copy the ODBC.PLL file into the directory in step c

然后在一个脚本里写了如下的句子:
use Win32::ODBC;
my $BbO = new Win32::ODBC("DSN=ORDERS;");
$BbO->Connection;

然后在IE里访问该文件,则出现“Can't call method "Connection" on an undefined value at D:/extrade/cgi-bin/lb.lib.pl line 183.”

首先想问,WIN32::ODBC要不要安装,但我在网上找了一圈,没有找到Win32-ODBC.ppd
Win32-ODBC.tar.gz 这两个文件,是否最上面的直接拷贝这ODBC.PLL、ODBC.PM有问题。

WIN32::ODBC的PM里有Connection的方法的,而且我看了WIN32::ODBC帮助,也有这个例子的,我帖出来:
#!/usr/bin/perl
use Win32::ODBC;
$DSN = "MS Access 97 Database";
$DBase = "access.mdb";

#连接数据库

if (!($db = new Win32::ODBC($DSN))){
print "连接数据库失败.n";
exit();
}
else{
print "连接数据库成功 (连接号:",[color=0000ff] $db->Connection()[/color], ")nn";
}

#数据库中的表
print "数据库中的表:";
@tables = $db->TableList;
print @tables;
print "n";
...........
看到楼主多次使用Connecti.
看到楼主多次使用Connection,我先查查手册.
我使用Win32::ODBC时没有见到过有楼主你说方法呀.
[quote]
#!/usr/local/bin/perl

use strict;
use Win32::ODBC;

my ($conn,$conn2,$sql_str,$dbsrv,$uid,$pwd,$db,@result);
my ($position);

$dbsrv='localhost';
$uid="sc";
$pwd="scscsc";
$db="test";

$conn=Win32::ODBC->new("DRIVER={SQL SERVER};SERVER=$dbsrv;database=$db;uid=$uid;pwd=$pwd") || die "$!\n";

$conn->Sql("SELECT * FROM table1");
while ($conn->FetchRow()){
@result=$conn->Data();
print "@result\n";
}
[/quote]
我进行了错误捕获,提示是.
我进行了错误捕获,提示是:[911][Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序。
WIN32::ODBC返回的代码是911,我去微软的ODBC查了,有类似的错误提示:[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 。

我在ODBC已经进行了设置了,而且是在系统DSN里添加的数据源,测试都通过的,请问怎么解决了!!谢谢了。
问题应该是你的 DSN 的问题。
“Can't call method "Connection" on an undefined value at D:/extrade/cgi-bin/lb.lib.pl line 183.”
我不知道你有没有认真地看过这句话,
我的理解是“不能调用一个未定义值所属的 Connection 方法”,
换句话说,不是 Win32::ODBC 没有这个方法,而是你的 ODBC 对象就没有 new 成功。
很显然,你的写法欠妥,正确的写法应该是:
[quote]use Win32::ODBC;
my $BbO = new Win32::ODBC("DSN=ORDERS;") || die "new ODBC 对象失败\n";
$BbO->Connection;[/quote]
这样子。
你说道[quote]我在ODBC已经进行了设置了,而且是在系统DSN里添加的数据源,测试都通过的,请问怎么解决了!!谢谢了。[/quote]
这不能证明 Perl 中会调用成功,
按照我的理解,你只是设置了一个 ODBC 数据源,并且测试了一下,通过了。
但是,这并不代表 Perl 中就会成功,因为 Perl 又不是你用来测试 ODBC 的那个东东。

很显然,你是一个有思路的人,贴出来这么多信息,并且描述了你所做过的事充分证明了这一点,
但是,你有一点做得不够,直接导致你的问题迟迟得不到解决,这一点就是:你不够冷静。

奉劝:冷静,冷静,再冷静,
冷静下来,比较一下运行正常的机器和你的机器有什么区别,包括 ODBC 驱动的版本、操作系统补丁的版本等等。
然后试着解决。
如果你希望别人能够帮助你的话,请再将你的动态发上来,毕竟提供越多的信息越有利于对你问题的解决。

如果可以的话,请加我 QQ。116544783
楼主用的是什么数据库?.
确认对应access.mdb的DSN名字是“MS Access 97 Database”?一般如果是access.mdb的话,大部分人会选择取access这样一个名字作为DSN的名字吧?MS Access 97 Database似乎容易把数据库驱动名和DSN名字搞混阿。

楼主确认系统DSN真的建立成功了么?看表述的确是DSN的问题,看看ODBC的FAQ:

http://www.roth.net/perl/odbc/faq/#SystemDSN

http://www.roth.net/perl/odbc/faq/#I can access my DSN from a command line but not my Web Server

如果楼主确认系统DSN成功建立,那么应该在控制台下运行程序连接access数据库是没有问题的,否则就如flw所说那样,是DSN或者程序还有问题
下面有一个以前写的例子:

http://bbs2.perlchina.org/cgi-bin/gforum/gforum.cgi?post=9588#9588[/url]




   

[quote]回复给 beckheng :.
[quote]回复给 beckheng : 楼主用的是什么数据库?....[/quote]

我用的是ORACLE 9.2I

在ODBC管理器中,我已经设置(在系统DSN)了数据源“ORDER”(驱动程序是ORACLE自身的,叫做ORACLE 92 IN HOME),估计是ODBC的问题,微软有句话(产生这个问题的原因):

CAUSE
Shareable file DSN and DSN-less connections use the DRIVER keyword to indicate which ODBC driver to use. The DRIVER keyword is set to a driver description that must match the description of an installed driver on the client computer. On computers with localized ODBC driver descriptions, the description used in the file DSN or DSN-less connection may not match that of the installed driver, thereby causing the error message described above.

For example, if the German version of Microsoft Office 97 installed the ODBC Access 97 driver with a description of "Microsoft Access-Treiber (*.mdb)," a file DSN or a DSN-less connection containing "DRIVER={Microsoft Access Driver (*.mdb)}" will fail, even though the Access driver has been installed properly。
[quote]回复给 flw : ...换句话说,不是 Win32::ODBC 没有这个方法,而是你的 ODBC 对象就没有 new 成功...[/quote]

是的,经过捕获,我也知道是NEW没有成功!请问老师,跟不正常系统装OFFICE 2003有没有关系?

[quote]回复给 flw : ...按照我的理解,你只是设置了一个 ODBC 数据源,并且测试了一下,通过了。
但是,这并不代表 Perl 中就会成功,因为 Perl 又不是你用来测试 ODBC 的那个东东。...[/quote]
老师说的对,在设置DSN的界面上有“TEST CONNECTION”的按键,我所有设置好以后,按该键,提示出现“CONNECTION SUCCESS”!
而且,我在ACCESS里,有链接表,然后选择ODBC里的“ORDER”数据源都能跟ORACLE进行连接成功的!
[quote]回复给 cnhacktnt .
[quote]回复给 cnhacktnt : 确认对应access.mdb的DSN?....[/quote]


谢谢老师,你给我的链接,我自己早就查过了!!