web server 程序中的后台oracle连接问题(100分)

A

an

Unregistered / Unconfirmed
GUEST, unregistred user!
我编写了一个web 服务程序,在用http:/10.67.198.200/scripts/project.dll运行时,总是返回如下错误信息:
Internal Server Error 500
Exception: EDBEngineError
Message: Vendor initialization failed. Alias: DA

我的服务器是NT4.0,我使用的连接方式如下:
procedure TWebModule1.WebModule1Create(Sender: TObject);
begin
with database1 do
begin
drivername :='ORACLE';
params.add('SERVER NAME=@ORACLE71');
params.add('USER NAME=KF');
params.add('PASSWORD=KF99');
params.add('NET PROTOCOL=TCP/IP');
params.add('OPEN MODE=READ/WRITE');
params.add('SCHEMA CACHE SIZE=8');
params.add('LANGDRIVER=DB936CN0');
params.add('SQLQRYMODE=SERVER');
params.add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
params.add('SCHEMA CACHE TIME=-1');
loginprompt :=false;
end;
end;


我使用同样的方法在同一个机器上,利用C/S方式编写的程序连接oracle时可以顺利通过。
请高手门指点!
 
不知你DATABASE1的DATABASENAME有没有赋值?从你的错误提示来看,你的

TQUERY或TTABLE的DATABASENAME赋值是DA对吗?

你的机器装了ORACLE SQLNET的什么版本?一般网络协议最好用TNS
将 params.add('NET PROTOCOL=TCP/IP')

改为: params.add('NET PROTOCOL=TNS');

大致可能的问题就在此了,最好再多给一些信息,以便做准确判断。
 
谢谢 xuwentao!

我的DATABASE1的DATABASENAME和TQUERY的DATABASENAME赋值都是DA
sql net 为2.3.2.1.4
oracle tcp/ip Adapter 2.3.2.1.4

我将NET PROTOCOL改为TNS还是不行!

我如果使用win95的个人web服务器时,使用BDE Administrator建立一个名为DA
oracle连接时,在使用浏览器第一次访问project.dll时,server 机器会弹出
登陆oracle时的口令提示窗,如果输入口令,将能够正常工作,如果使用自动登陆
(我以上的方法)也出现Vendor initialization failed. Alias: DA




 
稍稍看了你给的源程序,

问题在DATABASE1上。请在设计时将DATABASE1的PARAMS删除。
再修改:
rocedure TWebModule1.WebModule1Create(Sender: TObject);
begin
with database1 do
begin
drivername :='ORACLE';
params.add('SERVER NAME=@ORACLE71');{一定得与你的SQLNET配置一致}
params.add('USER NAME=KF');
params.add('PASSWORD=KF99');
{ params.add('NET PROTOCOL=TNS');可不要,默认是TNS}

{其余的参数均为其默认值可不设置}

loginprompt :=false;
open;{原来的程序没有OPEN,问题可能在此}
end;
end;
若还不行,再说!修改后我在我这儿的环境没问题。
 
xuwentao 你好
我按你的方法试过了,还是不行,是不是跟我的NT配置有关,你的环境如何
奇怪的是在同一台机器上,我用C/S开发的程序连接oracle一点问题也没有
 
我觉得是你NT端的oracle未配置好。
你的webserver是在NT上运行吗?

如果在,请确定NT上的BDE是否安装正确。方法很简单,在NT上用BDE Administrator则可

从返回信息来看,我认为是WebServer运行机器上BDE或Oracle未安装好
 
也许是你的INTERNET用户权限的问题,查一下是不是它对有些目录或文件没有权限。
 
刚才在xuwentao处看过你的源程度
觉得有几个问题:
TQuery先于TDataBase创建,且其DatabaseName在设计时已指明为DA;
(此时DA应为BDE固定配置的别名,而你的
现象1-"我如果使用win95的个人web服务器时,使用BDE Administrator建立一个名为DA oracle连接时,在使用浏览器第一次访问project.dll时,server 机器会弹出登陆oracle时的口令提示窗,如果输入口令,将能够正常工作"正说明了这点,即你的TDATABASE根本未起作用;

我觉得正常作法应是:
TDATABAS的Creation Order应先于TQUERY(在TDATAMODULE中),同时取消BDE中DA别名,在TDATABASE的Open := True后,将TQUERY.DATABASENAME := 'DA'方可!!
 
我仔细检查了,终于找到了!!!

你的程序中DATABASE1和QUERY1的SESSIONNAME不一致,应都设置为DEFAULT。

改为一致后,在我这儿的WIN NT环境中一点问题也没了。
 
各位老兄!
安各位指点的反复try了多次,还是不行,请各位再多费心。
谢谢!
另外
PageProducer1.HTMLFile 上次忘mail,
我将mail to volan and xuwentao
 
to an

你将DATABASE1的SESSIONNAME和QEURY1的SESSIONNAME设置为一致,当正确。
我将你给我的源码编译了,在我的NT下的IIS3.0下运行OK!。你没给我HTML
文件,没关系,我自己找了个代替,当然数据库的表我也修改了。总之,我
觉得问题就在哪儿,当然前面我给你的关于DATABASE1的参数设置的建议,你
也应当按我的建议写,如下:


with database1 do
begin
drivername :='ORACLE';
params.add('SERVER NAME=@ORACLE71');{一定得与你的SQLNET配置一致}
params.add('USER NAME=KF');
params.add('PASSWORD=KF99');
{ params.add('NET PROTOCOL=TNS');可不要,默认是TNS}

{其余的参数均为其默认值可不设置}

loginprompt :=false;
end;
 
我已经在PWS下通过了,谢谢xuwentao! 分可以先加上,
我怀疑我的NT有问题,准备重新安装了!
 
顶部