TclientDataSet.Params 问题,整了好久,无法解决,救命....... ( 积分: 100 )

  • 主题发起人 主题发起人 LiGen
  • 开始时间 开始时间
L

LiGen

Unregistered / Unconfirmed
GUEST, unregistred user!
Procedure LoadParams;
begin
ClientDataset.Params.Clear;
For I:=0 to 5do
begin
// 从文件加载6个 Params 名为tName1,tName2, tName3,....
tName := 读自己定义的名字
tValue := 读自己定义的值
ft := 读自己定义的数据类型 //ftFloat
with ClientdataSet.Params.CreateParam(ft, 'a', ptInput)do
begin

Name:= tName;
AsFloat := tValue;
end;
end;
end;
上面加载自定义参数
1、
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName1 ';
LoadParams;
ClientDataSet.Open;
//结果正确
2、
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName2 ';
LoadParams;
ClientDataSet.Open;
//结果同1 ,不正确,
3、
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName3 ';
LoadParams;
ClientDataSet.Open;
//结果同1 ,不正确,
不管怎么设置参数为(tName2 ,tName3),查询的结果,都只认第一个参数(tName1),不知道为什么..
 
Procedure LoadParams;
begin
ClientDataset.Params.Clear;
For I:=0 to 5do
begin
// 从文件加载6个 Params 名为tName1,tName2, tName3,....
tName := 读自己定义的名字
tValue := 读自己定义的值
ft := 读自己定义的数据类型 //ftFloat
with ClientdataSet.Params.CreateParam(ft, 'a', ptInput)do
begin

Name:= tName;
AsFloat := tValue;
end;
end;
end;
上面加载自定义参数
1、
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName1 ';
LoadParams;
ClientDataSet.Open;
//结果正确
2、
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName2 ';
LoadParams;
ClientDataSet.Open;
//结果同1 ,不正确,
3、
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName3 ';
LoadParams;
ClientDataSet.Open;
//结果同1 ,不正确,
不管怎么设置参数为(tName2 ,tName3),查询的结果,都只认第一个参数(tName1),不知道为什么..
 
大哥,ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName1 ';你这条语句决定了ClientDataSet里只有一个Param,那你何来tName2、tName3......这些参数,所以每次只是第一个参数起了作用LoadParams生成的其他参数是不存在的,故后面两次的结果都是一样的因为每次只是第一个参数起了作用
应该这样写:
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName';
ClientDataset.Params[0].DataType:=xxx;
ClientDataset.Params[0].ParamType:=xxx;
ClientDataset.Params[0].Value:=xxx;
ClientDataSet.Open;
当你写下'Select * from TableName where 语文 = :tName'这样的SQL语句后就已经生成了
PARAM,不需要调用CreateParam(ft, 'a', ptInput)这样是多余的反而会出错
 
这样的动态创建是不行,楼主还是多打几行代码吧
tName1,tName2, tName3。。。。
 
ClientDataset的传参是有Bug的,用连接字符串的形式,不要传参数,肯定没有问题。
 
传参数可以,动态赋值的方法有错。借楼主宝地,我有类似问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3061871
 
To Killall 2004
ClientDataSet.Active:=False;
ClientDataSet.CommandText := 'Select * from TableName where 语文 = :tName';
ClientDataset.Params[0].DataType:=xxx;
ClientDataset.Params[0].ParamType:=xxx;
ClientDataset.Params[0].Value:=xxx;
ClientDataset.Params[1].DataType:=xxx1;
ClientDataset.Params[1].ParamType:=xxx1;
ClientDataset.Params[2].Value:=xxx2;
ClientDataset.Params[2].DataType:=xxx2;
ClientDataset.Params[2].ParamType:=xxx2;
ClientDataset.Params[2].Value:=xxx2;
ClientDataSet.Open;

这种写法有错,因为 ClientDataset.Params.count =0
我用以下几行的目的是为了得到 ClientDataSet.Params[0],ClientDataSet.Params[1]...
with ClientdataSet.Params.CreateParam(ft, 'a', ptInput)do
begin
//tName1,tName2, tName3,....
Name:= tName;
AsFloat := tValue;
end;
 
自己解决了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
I
回复
0
查看
775
import
I
后退
顶部