我有知道该怎么办,就是关于tclientdataset的问题,请求大家帮助!!!(50分)

  • 主题发起人 主题发起人 gyfstar
  • 开始时间 开始时间
G

gyfstar

Unregistered / Unconfirmed
GUEST, unregistred user!
我第一次用三层,对tclientdataset不是很熟悉,我以前用ado做好的程序现在要改成三层
这一改,就出现了好多问题:
***tclientdataset不允许insert进的记录有空值,我要有空值该怎么办呢
我是用commandtext写入sql语句的,
commandtext:='insert into jbzl(number) values(:number)'
params.clear;
params.add;
params.ParamByName('number').asstring:=trim(enumber.text);
而且上面的语名提示不认识参数,
但是这句是对的
params[0].asstring:=trim(enumber.text);
这怎么回事呢,我好着急的,主管马上就要程序了,
 
ClientDataSet1.FetchParams;
 
maolu28:那一句是什么意思呢?我真的有知道
为什么insert进的值不可为空呢,好急呀
 
你的参数与字段名一样,不知道是不是有问题,另数据库是否允许用空值.
 
给你个关于参数的例子。
cdsTemp.Close;
cdsTemp.CommandText:='select shpmc from shpzd where shpid<:vv';
cdsTemp.FetchParams;
cdsTemp.Params.Add;
cdsTemp.Params[0].Name:='vv';
cdsTemp.Params.ParamByName('vv').value:=5;
cdsTEmp.Open;
 
我这样做
close;
ds.rs.commandtext:='insert into jbzl(number,name) values(:number,:name)'
params.clear;
fetchparams;
params.add;
params[0].name:='number';
params.parambyname('number').asstring:='aaa';
params.add
params[1].name:='name';
params.parambyname('name').asstring:=trim(ename.text);
execute;
close;
可是当我的name字段为空值时就出现错误;
而且我的数据库name是可以为空的
 
直接用SQL语句插入
sql :=
'insert into table jbzl(number,name) values('
+ QuotedStr( number ) + ',' + QuotedStr( name ) + ')';
 
这个问题我也遇到过
后来就用liboy的方法解决的
 
多人接受答案了。
 
to gyfstar:
1、为什么insert不能为空?因为:
tclientdataset->provider->adoquery中的adoquery的字段有个属性:Required,它决定
字段可否为空。
2、找不到参数:
commandtext:='insert into jbzl(number) values(:number)'//1
params.clear;//2
params.add;//3
params.ParamByName('number').asstring:=trim(enumber.text);//4
这样:
2
1
4
 
后退
顶部