帮帮我!(100分)

  • 主题发起人 主题发起人 李璋琦
  • 开始时间 开始时间

李璋琦

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一段程序,愿意是动态查询WEB数据库
function Twebmodule1.gettail(parentStr:string):string;
var
len:integer;
parentchar:pchar;
begin
parentchar:=pchar(parentstr);
parentchar:=strscan(parentchar,'=');
parentstr:=string(parentchar);
len:=length(parentStr);
result:=copy(parentstr,2,len-1);
end;

procedure TWebModule1.WebModule1QueryPriceAction(Sender: TObject;
Request: TWebRequest;
Response: TWebResponse;
var Handled: Boolean);
var
I:integer;
added:boolean;
select,fldqry,cndqry,valqry,flag:string;
qrydata:Tstrings;
begin
added:=false;
with requestdo
case methodtype of
mtget: qrydata:=queryfields;
mtpost: qrydata:=contentfields;
end;
//case
for i:=0 to qrydata.count-1do
begin
flag:='';
flag:=UpperCase(copy(qrydata.strings,1,3));
if flag='CHK' then
if not added then
begin
select:=select+gettail(qrydata.strings);
added:=true;
End
else
select:=select+','+gettail(qrydata.strings);
if flag='FLD' then
fldqry:= gettail(qrydata.strings);
if flag='CND' then
cndqry:= gettail(qrydata.strings);
if flag='VAL' then
valqry:= gettail(qrydata.strings);
end;
//for
with querytableproducer1do
begin
query.sql.clear;
query.sql.add('SELECT SP1 商品编号, SP2 商品名称, SP3 单位,SP4 品牌, SP5 规格, SP6 型号,SP7 产地, SP8 监测, SP9 说明 FROM "SPZK.DBF" Spzk ');
query.sql.add('where ');
query.sql.add(fldqry);
query.sql.add(' '+cndqry);
query.sql.add(' "'+valqry+'"');
query.open;
response.content:=querytableproducer1.content;
query.close;
end;
end;
可是出现了:
Exception: EDatabaseError
Message: Query1: Parameter 'FldQry' not found
错在那里?
 
补充一点:gettail是取得用GET向ISAPI传递的参数的‘=’后的子串
 
可怜可怜吧!各位大虾,答一句吧!
 
请看下面的代码:(来自delphi的source下的dbweb.pas)
function TQueryTableProducer.Content: string;
var
Params: TStrings;
I: Integer;
Name: string;
Param: TParam;
begin
Result := '';
if FQuery <> nil then
begin
FQuery.Close;
Params := nil;
if Dispatcher <> nil then
if Dispatcher.Request.MethodType = mtPost then
Params := Dispatcher.Request.ContentFields
else
if Dispatcher.Request.MethodType = mtGet then
Params := Dispatcher.Request.QueryFields;
if Params <> nil then
for I := 0 to Params.Count - 1do
begin
Name := Params.Names;
Param := FQuery.Params.ParamByName(Name);
if Param <> nil then
Param.Text := Params.Values[Name];
end;
FQuery.Open;
ifdo
CreateContent then
Result := FHeader.Text + HTMLTable(FQuery, Self, FMaxRows) + FFooter.Text;
end;
end;
可见QueryTableProducer在产生content时,自己运行了一次query,并切参数名使用
Dispatcher.Request.QueryFields或 Dispatcher.Request.ContentFields
这样一来你的程序中(sql中)再使用条件或参数就会出错。
解决方法:
写了一段程序,愿意是动态查询WEB数据库
function Twebmodule1.gettail(parentStr:string):string;
var
len:integer;
parentchar:pchar;
begin
parentchar:=pchar(parentstr);
parentchar:=strscan(parentchar,'=');
parentstr:=string(parentchar);
len:=length(parentStr);
result:=copy(parentstr,2,len-1);
end;

procedure TWebModule1.WebModule1QueryPriceAction(Sender: TObject;
Request: TWebRequest;
Response: TWebResponse;
var Handled: Boolean);
var
I:integer;
added:boolean;
select,fldqry,cndqry,valqry,flag:string;
qrydata:Tstrings;
begin
added:=false;
with requestdo
case methodtype of
mtget: qrydata:=queryfields;
mtpost: qrydata:=contentfields;
end;
//case
for i:=0 to qrydata.count-1do
begin
flag:='';
flag:=UpperCase(copy(qrydata.strings,1,3));
if flag='CHK' then
if not added then
begin
select:=select+gettail(qrydata.strings);
added:=true;
End
else
select:=select+','+gettail(qrydata.strings);
if flag='FLD' then
fldqry:= gettail(qrydata.strings);
if flag='CND' then
cndqry:= gettail(qrydata.strings);
if flag='VAL' then
valqry:= gettail(qrydata.strings);
end;
//for
with querytableproducer1do
begin
query.sql.clear;
query.sql.add('SELECT SP1 商品编号, SP2 商品名称, SP3 单位,SP4 品牌, SP5 规格, SP6 型号,SP7 产地, SP8 监测, SP9 说明 FROM "SPZK.DBF" Spzk ');
query.sql.add('where ');
query.sql.add(fldqry);
query.sql.add(' '+cndqry);
query.sql.add(' "'+valqry+'"');
query.open;---->去掉!
-->增加 Request.queryfields.clear 或 Request.contentfields.clear;
response.content:=querytableproducer1.content;
query.close;
end;

试试吧,不行mail 给我你的HTM文件,再帮你定夺
 
安:
一切Ok,
但是发现另一个问题,我的查询可能返回几千条记录。
不可能一次传输。我想做的向大富翁这样的分页的,不知该怎样
实现。
另外我在输出DLL文件时不能创建,得重新启动WIN98。
有方便的解决办法吗?
 
接受答案了.
 
后退
顶部