又是一个Update的问题,本人在线的(50分)

  • 主题发起人 主题发起人 zytzjx
  • 开始时间 开始时间
Z

zytzjx

Unregistered / Unconfirmed
GUEST, unregistred user!
strSQL := 'Update Sell set 客户编号 = :ClientNo, 客户名称 = :ClientName,'
+' 折扣 = :Less, 日期 = :NowDate, status = ''P'' where status=''N''';
try//status是文本型
Query := TADOQuery.Create(nil);
Query.Connection := DataM.ADOCon;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add(strSQL);
Query.Parameters.ParamByName('ClientNo').Value := Edit2.Text;//文本
Query.Parameters.ParamByName('ClientName').Value := Edit3.Text;//文本
Query.Parameters.ParamByName('Less').Value := Less.Text;//Double
Query.Parameters.ParamByName('NowDate').Value := Date;//日期型的
Query.ExecSQL;
Query.Close;
Query.Free;
finally
end;
这个出现"非法的精确度数值。"
 
Query.Parameters.ParamByName('NowDate').Value := FormatDateTime('YYYY-MM-DD HH:NN:SS',Date);//日期型的
 
问题还是这样呀,还出错的,现像一样的
 
是不是你的折扣使用的类型不对?
 
1.>檢查折扣使用的类型
2.>用stringreplace ,在query anly 裡面調試看看.
strSQL := 'Update Sell set 客户编号 = :ClientNo, 客户名称 = :ClientName,'
+' 折扣 = :Less, 日期 = :NowDate, status = ''P'' where status=''N''';
strsql:=stringreplace(strsql,......

不要用參數,

 
Query.Parameters.ParamByName('Less').Value := Less.Text;//Double
Less.Text是String
 
是不是less字段的类型和Double有冲突
 
我把这一句改成了Query.Parameters.ParamByName('Less').Value := 1.0;
还是出错的
 
折扣在Access中是"双精度型"
 
我知道原因了,就是“客户编号 , 客户名称”不能为空,可以我要为空怎么办呀,如果这是第
一次来的,我什么也不知道,这个当然就要为空了,不写的,我的字段是可以为空的。可是写空就不行呢
 
把表结构改了不就得了吗?
再不行,用个特殊的字符串先填进去,如"noname"(没有哪个客户会叫这个名字吧?!)
 
这两个字段我在定义的时候,是可以为空的呀
 
折扣是否应该小于 1
 
没有的,这个没有关系的,出错不是这个问题的,我把Edit2与Edit3都有值就好了,但应该是
这填也可以才是我所想要的
 
后退
顶部