关于null问题
一、字段a为字符型,并且值为null
当用nvl(字段a,'')转换后,在grd表格中不在显示.null.,显示为空白,并且此column的readonly为.f.,但是不能修改,提示为唯读,请问如何解?????
二、字段a为数值型,并且值为null
在grd表格中对应column显示为.null.如何做到不显示.null.直接为空白,并且要求可改变column栏值
其实以上问题是:当字段值为空(不论什么类型)在其对应的grd表格column栏位中不显示.null.要显示为空白并且(栏位column的readonly为.f.的情况下)可以修改栏位值??????
[解决办法]
如果只是不想显示 .null.,而值仍允许为 Null,不需要使用 nvl 函数做转换,vfp 有全局显示设置命令,
在主程序或 Command 窗口执行 set nulldisplay to '' 即可
[解决办法]
另:grid.column.ControlSource 使用 nvl 函数后即变成计算字段,计算字段是不允许修改的
[解决办法]
一、是的,只要有运算符参与便不可修改。原因很简单,因为无法保证结果可唯一性的逆转回原值,换句话说,你修改后的值可能有多个原始值与之对应,vfp 便无法确定要在原字段中填回哪个值。
二、有多种解决方案
1. sql 端在生成数据库时就定义成字符类型字段。不利的一面是无法保证字段值有效性,因为你可以在其中储存任何值,例如,2013-bb-cc 56:78:zz 或看似有效的值 2013-02-30 01:23:45;即使你的前端应用中加入了有效性验证,你仍无法阻止别人用查询分析器写入无效的值(也许是无意的)。
2. 从 sql 端取值时就转换成要显示的形式。例如,在 sql server 中可以用
select field1, field2, convert(char(10),datetime字段名,120) as fieldN from ...仅返回日期部分。不利的一面是 vfp 远程视图或 ca 可能(未验证)不允许更新回 sql 端。
return ttod(cursor名.datetime字段名)_assign 方法中写代码:
lparameters tvNewVal5. ......
replace next 1 datetime字段名 with dtot(tvNewVal) in cursor名