关于WEB程序访问ORACLE数据库的问题(200分),急(200分)

  • 主题发起人 主题发起人 song2
  • 开始时间 开始时间
S

song2

Unregistered / Unconfirmed
GUEST, unregistred user!
我在WEB服务器程序的数据模块放如SESSION1,DATABASEA,QUERY1
默认ACTION中执行代码如下:(代码中ORA9是BDE中别名,在BDE或者C/S模式访问时候正常)
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
sstr:string;

begin
try
database1.AliasName:='ora9';
database1.DatabaseName:='s1';
database1.Params.Values['User_Name'] := 'sys';
database1.Params.Values['Password'] :='mon;
database1.loginprompt :=false;
database1.open;
query1.DatabaseName:='s1';
query1.active:=true;
while not query1.eof do
begin
sstr:=sstr+'<p>'+query1.fieldbyname('lastname').asstring+'</p>';
query1.next;
end;
finally
query1.active:=false;
end;
response.content:=sstr;
handled:=true;
end;

在浏览器中执行发布后EXE什么也没有!
为什么,高手门帮助我啊!
 
我在设计时候已经写好了QUERY1的SQL语句
:SELECT DISTINCT T1 FROM TABLE1
 
是 SELECT DISTINCT LASTNAME FROM TABLE1
 
但是我把
database1.Params.Values['User_Name'] := 'sys';
database1.Params.Values['Password'] :='mon;
两行屏蔽掉
访问DELPHI的DBDEMO,却顺利执行,
为什么ORACLE不可以呢?

大家快帮助我,
 
应该是连接数据库是出了问题
你试试把ORACLE目录下的network/admin/sqlnet.ora中的
SQLNET.AUTHENTICATION_SERVICES= (NTS)
改成
SQLNET.AUTHENTICATION_SERVICES= (NONE)
再试试。
 
连接字符串写对了没?
 
>>xianjun,
我查了我的机器上的sqlnet.ora,里面已经是
SQLNET.AUTHENTICATION_SERVICES= (NONE)
 
>snjat
你是说database1.AliasName:='ora9';
中的ora9吗?
绝对写对了,因为我用C/S模式访问这个别名,浏览数据正常,
不止为什么WEB下不可以了,大家帮我想想办法啊?
 
那你查查sqlnet.log,看看是什么错误
或者你确认一下是否已经连接到Oracle了。
 
>xianjun
sqlnet.log里面没有最近日期的错误记录,
连接ORACLE肯定没问题,因为我用BDE或者delphi的C/S程序访问之,都正常,就是WEB不可以
 
这样说我就找不到原因了, 你试试用try..except把你的代码括起来,看有没有错误:
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
sstr:string;

begin
try
try
database1.AliasName:='ora9';
database1.DatabaseName:='s1';
database1.Params.Values['User_Name'] := 'sys';
database1.Params.Values['Password'] :='mon;
database1.loginprompt :=false;
database1.open;
query1.DatabaseName:='s1';
query1.active:=true;
while not query1.eof do
begin
sstr:=sstr+'<p>'+query1.fieldbyname('lastname').asstring+'</p>';
query1.next;
end;
finally
query1.active:=false;
end;
except
on E: Exception do
sstr := E.Message;
end;
response.content:=sstr;
handled:=true;
end;
 
>>xianjun
谢谢你啊。按你方法,浏览器提示
Invalid configuration parameter. Alias: s1
帮我看看如何解决??/
谢谢啊
 
看来应该是query1.DatabaseName:='s1';这句出了问题
具体原因我现在也搞不清楚
 
多努力啊,伙计!
 
你直接在Object Inspector里设置一下数据模块中TDatabase对象的各个属性试试看,在把
AliasName, Params, DatabaseName, LoginPrompt等属性设置好以后再把Active设为true
试试,如果成功的话再把它设回来,之后再把TQuery的Active也设为true,如果这些都通过
的话,在程序编译成CGI/ISAPI程序后也就不出现低级的数据库错误了。
还应该注意WebModule1WebActionItem1Action的Default和Enabled属性都为True。
 
>>Sachow
你说的我都试过了,是没什么问题。但就是发布成EXE后web执行时候不可以,
怎么办?急死我了
 
管理工具->Internet信息服务->默认Web站点->属性->主目录->执行许可:选为“脚本和可
执行程序”
 
>>Sachow
这个我知道,要不我换连DELPHI的自带的DBDEMO的表时候WEB程序可以正常执行,就是连接DELPHI的时候不可以
,不知道为什么,
 
留下E_Mail,我发一个简单的例程给你,再不行的话你再把你的程序发给我,我帮你分析
一下。最好把你的表结构写出来,这样能够更快地衔接。
 
谢谢!我的E——MAIL
songxy321@21cn.com

对了,我的数据库别名是用ODBC连接的,用C/S模式访问没问题啊。可WEB不可仪
 
后退
顶部