通常我们查询sql表中某一字段(此字段类型为float型)的空值时,sql语句为select * from a where isnull(sl,0)=0,这样既能查到sl字段为0或为null值的记录;但在DBgrideh1column7UPDATEDATE事件中添加如下代码(sql表a的内容通过qy1显示在dbgrideh1中),procedure TSSPBM.DBGridEh1Columns7UpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var i:integer;
begin
for i:=0 to DBGrideh1.ComponentCount-1 do
if DBGrideh1.Components[i] is TInplaceEdit then
Edit1.text := TEdit(DBGrideh1.Components[i]).Text;
DBgrideh1.columns[20].picklist.Clear;
if (qy1.fieldbyname('snw').asfloat<>0) and (qy1.fieldbyname('nwgt').asfloat<>0) and (strtofloat(edit1.text)<>0) then
qy1.fieldbyname('qxl').Value:=(strtofloat(edit1.text)-qy1.fieldbyname('nwgt').asfloat)/strtofloat(edit1.text)*100;
end;
意为当snw字段变化时,自动更新qxl字段,但在DBGRIDEH1中将snw字段按退格键删除该字段值时,提示' ''is not a valid floating point value'错误,该错误发生在(strtofloat(edit1.text)<>0)处,是因为此时edit1.text的值为'',请问在此处该如何写edit1.text的值为空;如果是字符型的话用edit1.text<>''即可,但这里是float型,请问该如何写?
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var i:integer;
begin
for i:=0 to DBGrideh1.ComponentCount-1 do
if DBGrideh1.Components[i] is TInplaceEdit then
Edit1.text := TEdit(DBGrideh1.Components[i]).Text;
DBgrideh1.columns[20].picklist.Clear;
if (qy1.fieldbyname('snw').asfloat<>0) and (qy1.fieldbyname('nwgt').asfloat<>0) and (strtofloat(edit1.text)<>0) then
qy1.fieldbyname('qxl').Value:=(strtofloat(edit1.text)-qy1.fieldbyname('nwgt').asfloat)/strtofloat(edit1.text)*100;
end;
意为当snw字段变化时,自动更新qxl字段,但在DBGRIDEH1中将snw字段按退格键删除该字段值时,提示' ''is not a valid floating point value'错误,该错误发生在(strtofloat(edit1.text)<>0)处,是因为此时edit1.text的值为'',请问在此处该如何写edit1.text的值为空;如果是字符型的话用edit1.text<>''即可,但这里是float型,请问该如何写?
update还有insert into
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
i:integer;
vStr : double;
begin
for i:=0 to DBGrideh1.ComponentCount-1 do
if DBGrideh1.Components[i] is TInplaceEdit then
Edit1.text := TEdit(DBGrideh1.Components[i]).Text;
DBgrideh1.columns[20].picklist.Clear; if TryStrToFloat(Edit1.text,vStr) then
begin
if (qy1.fieldbyname('snw').asfloat <>0) and (qy1.fieldbyname('nwgt').asfloat <>0) and (strtofloat(edit1.text) <>0) then
qy1.fieldbyname('qxl').Value:=(strtofloat(edit1.text)-qy1.fieldbyname('nwgt').asfloat)/strtofloat(edit1.text)*100;
end
end;
也可TryStrToFloat(Edit1.text,vStr)改为vStr := StrToFloatDef(Edit1.text,0)
procedure TSSPBM.DBGridEh1Columns7UpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var i:integer;
begin
for i:=0 to DBGrideh1.ComponentCount-1 do
if DBGrideh1.Components[i] is TInplaceEdit then
Edit1.text := TEdit(DBGrideh1.Components[i]).Text;
DBgrideh1.columns[20].picklist.Clear;
if length(trim(edit1.text))=0 then
edit1.text:='0';
if (qy1.fieldbyname('snmpdz').asfloat<>0) and (qy1.fieldbyname('snw').asfloat<>0) then
qy1.fieldbyname('mpzb').Value:=(qy1.fieldbyname('snmpdz').asfloat-strtofloat(edit1.text))/qy1.fieldbyname('snmpdz').asfloat*100;
if (qy1.fieldbyname('snw').asfloat<>0) and (qy1.fieldbyname('nwgt').asfloat<>0) and (strtofloat(edit1.text)<>0) then
qy1.fieldbyname('qxl').Value:=(strtofloat(edit1.text)-qy1.fieldbyname('nwgt').asfloat)/strtofloat(edit1.text)*100;end;