高手阿ado QUERY 动态参数问题周六还加班惨阿HELP ME(50分)

  • 主题发起人 wyismail
  • 开始时间
W

wyismail

Unregistered / Unconfirmed
GUEST, unregistred user!
CMeetReseanStr='select count(*) as t from meettable m ,eventproperty ep ,eventreason er'+
' where m.reasoncode = er.reasoncode and m.eventprocode = ep.eventprocode'+
' and ep.name = :propertyname and er.name = :resonname'+
' and m.catchtime >=: StartDate and m.catchtime <: EndDate';

function TStatisticsQueryFrm.DoSelect(ParRow,ParLine: string): integer;
var
Query:TADOQuery;
TemStr:String;
begin
Query:=TADOQuery.Create(self);
Try
Query.Connection :=DbModule.ADOConnection1 ;
Query.SQL.Text :=CMeetReseanStr;

With query.Parameters do
begin
CreateParameter('propertyname',ftString,pdInputOutput , 20, 0);
CreateParameter('resonname',ftString,pdInputOutput , 20, 0);
CreateParameter('StartDate',ftDateTime,pdInputOutput , 0, 0);
CreateParameter('Enddate',ftDateTime,pdInputOutput , 0, 0);
end;

Query.Parameters.ParamByName('propertyname').value:=ParRow;
Query.Parameters.ParamByName('resonname').value:=ParLine;
Query.Parameters.ParamByName('StartDate').value:=StartDate;
Query.Parameters.ParamByName('Enddate').value:=Enddate;

// Query.AfterClose :=self.QueryAfterClose;
TemStr:=Query.SQL.Text; //这里设置断点,但显示参数的值并没有传过来还是原来的值
Query.Open;

Result:=Query.Fields[0].asinteger;
Except
Query.Free;
Result:=0;
end;
end;

出现错误"对象不正确定义提供不一致或不完整的信息"
 
CMeetReseanStr='select count(*) as t from meettable m ,eventproperty ep ,eventreason er'+
' where m.reasoncode = er.reasoncode and m.eventprocode = ep.eventprocode'+
' and ep.name = :propertyname and er.name = :resonname'+
' and m.catchtime >= :StartDate and m.catchtime < :EndDate';
“:”放在变量前面,不要有空格,你试试!
 
你的参数格式不对!即冒号后面不能有空格。
另,用不着createparameter
 
T0 dlnew
可是我的QUERY是动态的阿不作动态的怎么作
 
我觉得干脆动态组装SQL命令字符串来得方便。
 
我不能作成静态的阿 我把空格去掉果然不报错了但是
TemStr:=Query.SQL.Text; //这里设置断点,但显示参数的值并没有传过来还是原来的值
还是常量子父串
CMeetReseanStr='select count(*) as t from meettable m ,eventproperty ep ,eventreason er'+
' where m.reasoncode = er.reasoncode and m.eventprocode = ep.eventprocode'+
' and ep.name = :propertyname and er.name = :resonname'+
' and m.catchtime >=: StartDate and m.catchtime <: EndDate';
是不是要到QUERY.OPEN才回把参数传进去那???????????????????????
 
CMeetReseanStr='select count(*) as t from meettable m ,eventproperty ep ,eventreason er'+
' where m.reasoncode = er.reasoncode and m.eventprocode = ep.eventprocode'+
' and ep.name = :propertyname and er.name = :resonname'+
' and m.catchtime >=:StartDate and m.catchtime <:EndDate';


with query do
begin
sql.clear;
sql.add(CMeetReseanStr);
Parameters.ParamByName('propertyname').value:=ParRow;
Parameters.ParamByName('resonname').value:=ParLine;
Parameters.ParamByName('StartDate').value:=StartDate;
Parameters.ParamByName('Enddate').value:=Enddate;
open;
end;
 
TO dlnew:
我照你的方法作了出现错误
说参数propertyname没找到
 
在sql.clear前加上close;
如果还不对,在open前加上TemStr:=SQL.Text
看看temstr的值是什么,注意,此时的sql.text仍是带参数的string
 
不要用你的参数啦,用常量啦
把你的带参数的Sql写好成一个常量
再把变量用Format搞掂就可以用。多方便,还不存在这个那个的。很爽!!
 
問題應該是出在日期上面,StartDate如果是字符使用strtodate(startdate)試一下
 
我用了DELPHI自己带的例子

Query2.SQL.Clear;

Query2.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)');
Query2.SQL.Add('VALUES :)Name, :Capital, :population)');

Query2.Params[0].AsString := 'Lichtenstein';
Query2.Params[1].AsString := 'Vaduz';
Query2.Params[2].AsInteger := 420000;
Query2.ExecSQL;
temstr:=query2.sql.text//这句是我加的啊
发现temstr 仍然是带参数的SQL字符串
这么说我已经成功了哈,呵呵,还有没别的
我要散分了
女人最了解女人,程序员最了解程序员啊,谢谢
 
我还有一个问题。怎样知道一个月最后一日是几号?????
 
用个Case就知道了呀
Case month then
1,3,5,7,8,10,12:31;
4,6,9,11:30
2:28; //润年的话是29
end;

 
在你要的月份的后一個月再減一天 如
如求2002年9月 2002/10/1 - 1天

 
多人接受答案了。
 
顶部