关于null有关问题

关于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 端。
  3. 如果前端用 ca,在 Cursor Scheme 中可以直接修改 sql 端与 vfp 端 cursor 字段类型的映射方式,这样取回的字段就已经是 date 类型,更新回 sql 端时会自动加上时间部分 00:00:00。
  4. 不用 ca 的话会麻烦很多,同样也有多种解决方案。其中一种是,表单新增一个自定义属性 mydate,此属性同时定义 mydate_access 和 mydate_assign 方法,grid.column.controlsource 绑定 thisform.mydate
_access 方法中写代码:
return ttod(cursor名.datetime字段名)
_assign 方法中写代码:
lparameters tvNewVal 
replace next 1 datetime字段名 with dtot(tvNewVal) in cursor名
  5. ......