今天在一份资料上看到如下代码:
原文如下:
begin
table1.edit;
table1.fieldbyname('姓名').asstring:=edit1.text;//不建议
table1.fieldbyname('日期').asdatetime:=date;
///
table1['姓名']:=edit1.text;//建议//简短/扩充性好
//table1.fieldvaluest['姓名']:=edit1.text;//borland建议的方法。
table1['日期']:=date;
end;
结束。
请教各位:1、前辈为什么这样建议我们呢?
2、table1['姓名']不用指出字段类型,难道是增强了灵活性吗?
3、依照您来看用什么方法访问、修改数据库的字段比较安全?
欢迎大家参与,谢谢!
原文如下:
begin
table1.edit;
table1.fieldbyname('姓名').asstring:=edit1.text;//不建议
table1.fieldbyname('日期').asdatetime:=date;
///
table1['姓名']:=edit1.text;//建议//简短/扩充性好
//table1.fieldvaluest['姓名']:=edit1.text;//borland建议的方法。
table1['日期']:=date;
end;
结束。
请教各位:1、前辈为什么这样建议我们呢?
2、table1['姓名']不用指出字段类型,难道是增强了灵活性吗?
3、依照您来看用什么方法访问、修改数据库的字段比较安全?
欢迎大家参与,谢谢!
2、的确,不管姓名字段是什么类型,都会自动转换,可能在帮助中说使用变体类型会造成程序效率差,但是看看VCL源代码,发现,即时AsString赋值,也是转换成变体类型后在赋值。(这个没有仔细研究好像是这样)
3、hoho不知。其实这个我看过其中还有一个就是建议使用
While not Eof do begin end 来循环数据集而不建议用For循环,hoho这个我就不懂了。不是For循环效率好一些,还有如果在写While时如果忘记写Next ,则非常容易造成死循环,但是用For就不会了。
var
I: Integer;
begin
Query1.First;
for I := 0 to Query1.RecordCount - 1 do begin //不建议//容易被影响
Query1.Next;
{};
end;
原来的是这样的,不知这里的“容易被影响”是指什么?
如果是指Query1.RecordCount的值受到影响,显然是星星前辈搞错了。
在For循环的时候,循环的次数是一次计算好,存储在寄存器中的,在循环的过程中是不会再计算RedordCount的值的。
如果For循环之中有删除操作,建议使用DownTo语句。其他的我想不出什么:“容易被影响”