ISAPI 中,Tquerytableproducer 查询出得内容为何无法显示?(急)(80分)

  • 主题发起人 主题发起人 minewdy
  • 开始时间 开始时间
M

minewdy

Unregistered / Unconfirmed
GUEST, unregistred user!
我得系统是 (NT4.0 SP5.0) D4


先用 HTML 写的一段小的赋值语句,采用POST 和GET 方法
ISAPI 程序得到数据后分解出需查询得内容,
用Tquerytableproducer 调用query1 ,查询出数据(数据现已确认查出),
在显示在 浏览器上时,显示不出来,
显示语句如下 querytableproducer1.query :=qeury1;
querytableproducer1.query.open;
response.content :=querytableproducer1.content;
querytableproducer1.query.close;

希望各位大虾指点
 
调用Path对吗?显示什么错误信息
 
PATH 是对的

出错信息是(编译时是没有问题的,在浏览器里显示)

" 您要访问的页有问题,无法显示该页。"

 
不会吧
这问题没人回答
 
active:=true 可以吗?
 
active:=true 和 open
是一样的吧

 
呵呵,我觉得好象是数据库的连接不对呀,试试加上TSession和TDatabase (把它们放到另一个TModel中)
 
querytableproducer1.query :=qeury1;?QUERY1 !!

看看HTML中<ACTION >是否写正确.
SERVER中的配置是否正确.
另外,你怎么知道确实查到了数据?




 
我也遇到过同样的问题,TSession和TDatabase加上都加上了!
即使在cgi中也有同类问题!!如果用table和TDataSetTableProducer就没有关系!

 
用query查询,用TQueryTableProducer输出。如果在输出结果之前的get和post方法中不传任何数据,结果正常。如果有数据,TQueryTableProducer就显示不了。(所传的数据并没有用于query的查询中)!!
 
当post中有数据时,query的结果可以保存到文件中,我试过,但不能用TQueryTableProduecr输出!!只要不用TQueryTableProducer输出,query就没错!
在这段代码中,我只能用response.content来拼结果,而不能使TQueryTableProducer来输出!!在调用TQueryTableProducer的时候post和get的数据自动作为Query的Params,同时不受控制!
procedure TWebModule1.WebModule1WebActionItem3Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
user,pwd,telnum:string;
temp:integer;
sql:string;
tempstr:string;
begin
//显示按局号进行查询的结果
//取得用户名
user:=Request.ContentFields.Values['user'];
if((user='')or(Length(user)>20))then
begin
Response.Content:='<html><body><center>user error!</center></body></html>';
Exit;
end;
//取得密码
pwd:=Request.ContentFields.Values['pwd'];
if((pwd='')or(Length(pwd)>20))then
begin
Response.Content:='<html><body><center>pwd error!</center></body></html>';
Exit;
end;
{$IFDEF ISAPI}
if(user<>userbak)then
begin
Response.Content:='<html><body><center>user error!</center></body></html>';
Exit;
end
else if(pwdbak<>pwd)then
begin
Response.Content:='<html><body><center>pwd error!</center></body></html>';
Exit;
end;
{$ENDIF}
{$IFDEF CGI}
userbak:=user;
pwdbak:=pwd;
{$ENDIF}
//取得局号
telnum:=Request.ContentFields.Values['telnum'];
if((telnum='')or(Length(telnum)>5))then
begin
Response.Content:='<html><body><center>telnum error!</center></body></html>';
Exit;
end;
try
temp:=StrToInt(telnum);
if(temp<0)then
begin
Response.Content:='<html><body><center>telnum error!</center></body></html>';
Exit;
end;
except
Response.Content:='<html><body><center>telnum error!</center></body></html>';
Exit;
end;
//按局号进行查询并显示结果
sql:='select * from tel_main where tel_num=''%s''';
sql:=Format(sql,[telnum]);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sql);
Query1.Open;
try
if(Query1.RecordCount=1)then
begin
tempstr:='';
tempstr:=tempstr+'<html><head><title></title></head><body><center>查询结果<br><br>';
tempstr:=tempstr+'局号:';
tempstr:=tempstr+VarToStr(Query1.FieldValues['tel_num'])+'<br>';
tempstr:=tempstr+'业务1:';
if(VarToStr(Query1.FieldValues['work1'])='1')then
begin
tempstr:=tempstr+'yes'+'<br>';
end
else begin
tempstr:=tempstr+'no'+'<br>';
end;
tempstr:=tempstr+'业务2:';
if(VarToStr(Query1.FieldValues['work2'])='1')then
begin
tempstr:=tempstr+'yes'+'<br>';
end
else begin
tempstr:=tempstr+'no'+'<br>';
end;
tempstr:=tempstr+'业务3:';
if(VarToStr(Query1.FieldValues['work3'])='1')then
begin
tempstr:=tempstr+'yes'+'<br>';
end
else begin
tempstr:=tempstr+'no'+'<br>';
end;
tempstr:=tempstr+'受理方式:';
tempstr:=tempstr+VarToStr(Query1.FieldValues['method'])+'<br>';
tempstr:=tempstr+'受理地点:';
tempstr:=tempstr+VarToStr(Query1.FieldValues['place'])+'<br>';
{$IFDEF CGI}
tempstr:=tempstr+'删除   ';
tempstr:=tempstr+'修改';
{$ENDIF}
{$IFDEF ISAPI}
tempstr:=tempstr+'删除   ';
tempstr:=tempstr+'修改';
{$ENDIF}
tempstr:=tempstr+'</center></body></html>';
Response.Content:=tempstr;
end
else begin
Response.Content:='<html><body><center>result is zero!</center></body></html>';
Exit;
end;
finally
Query1.Close;
end;
Handled:=true;
end;
 
我怀疑是TQueryTablProducer的Bug,我现在改用Cgiexpert,一切都好了!
cgiexpert5.0和web broker比起来就象法拉利和夏利一样!!
 
至关重要的问题是:
对于传参的QUERY,你必须用CONTENTFIELD
或QUERYFIELDS得到参数,并赋给QUERY中的变量!!!
 
脚码兄:
当然用了CONTENTFIELD或QUERYFIELDS,你看看我的代码!!!!
即使我从CONTENTFIELD或QUERYFIELDS中得到的变量不用于QUERY,TQueryTableProducer也不能输出!!
也就是说,只要CONTENTFIELD或QUERYFIELDS中有值,TQueryTableProducer就不能输出!!!!
你试试就知道了!!
 
sorry ,最近较忙,没上网!

这个问题确实比较怪,我至今也不能明白到底是怎么回事,我在测试时,编写静态的
SQL 语句是可以用 Tquerytableproducer 输出的,但动态的sql 语句就怎么也不行
他应该和 Trequest 的方式get ,post,any ,等是没有关系的,这些只是从
浏览器中得到查询的条件的方式,别的什么pathinfo,程序语句对否,数据库连接
对否tsession 是否设置等我全都是过,都不能解决这个问题,
我想可能是此控件的一个bug 吧,

我现在用循环语句显示了我的内容,只是编写程序较烦,
如果大家想继续讨论这个问题,我就不将此问题结束
 
注意!!!!!!!!
你的.dll必须在wwwroot/scripts下(winnt)
 
minewdy:
我测试过,动态的sql 语句是可以输出的,只要之前不用get和post输入数据!!!!
 
apathy: 如果不用get,post 从浏览器中得到数据---查询---输出
而直接 查询--输出- 就可以不用tquerytableproducer
用table +filter 就可以实现了

cjfandhf: 你的意思我明白,我的iis 的设置是对的,这个不用考虑
 
我认为是bug,于是改用cgiexpert。
 
根本不是BUG,'response.content:=querytableproducer1.content;'
这句写错了,可改为:
response.content:='<h1>'+querytableproducer1.content+'</h1>';
这是因为Tquerytableproducer不产生HTML HEADER.
 
后退
顶部