关于table['字段'],table.fieldbyname('字段')和table.fieldvalues['字段']的看法

flyingsnowfox 2003-06-13 11:02:00
table['字段']
table.fieldbyname('字段')
table.fieldvalues['字段']
这三种方法想必大家都用过,我在网上也查找了一些关于三者的资料,
有人说table['字段']简短、扩充性好,table.fieldvalues['字段']好是borland
推荐的使用方法,table.fieldbyname('字段')过时了等。
我在使用中也有这方面的感觉。
在我有一个问题不太明白, 在用table.fieldbyname('字段')的时候,字段值可以
变换类型,如table.fieldbyname('字段').asstring,
还有一点,在给一个变量赋值的时候,用table.fieldvalues['字段']的话,
如果字段值为空则会出错,而用table.fieldbyname('字段').asstring将会得到一个
空值,从而不会弹出错误,

我不知道为什么table.fieldbyname('字段')这种方法不好,谁能帮我解释一下吗?
谢了!
...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingsnowfox 2003-06-13
  • 打赏
  • 举报
回复
我的意思是vartofloatdef()
firetoucher 2003-06-13
  • 打赏
  • 举报
回复
1 由于返回的是value所以不能为空
2 按照teamB的建议,最好不用astring等会引起空值,用asvariant
3 有啊
Delphi syntax:
function VarToStrDef(const V: Variant; const ADefault: string): string;
firetoucher 2003-06-13
  • 打赏
  • 举报
回复
function TDataSet.GetFieldValue(const FieldName: string): Variant;
var
I: Integer;
Fields: TList;
begin
if Pos(';', FieldName) <> 0 then
begin
Fields := TList.Create;
try
GetFieldList(Fields, FieldName);
Result := VarArrayCreate([0, Fields.Count - 1], varVariant);
for I := 0 to Fields.Count - 1 do
Result[I] := TField(Fields[I]).Value;
finally
Fields.Free;
end;
end else
Result := FieldByName(FieldName).Value
end;
其他的就不帖了,在DB的TDataSet内
你可以看到table['字段']就是调用table.fieldvalues['字段'],而table.fieldvalues['字段']又调用FieldByName,不同的是返回的类型。
flyingsnowfox 2003-06-13
  • 打赏
  • 举报
回复
有没有类似vartostrdef()的函数啊?
firetoucher 2003-06-13
  • 打赏
  • 举报
回复
procedure TDataSet.SetFieldValue(const FieldName: string;
const Value: Variant);
var
I: Integer;
Fields: TList;
begin
if Pos(';', FieldName) <> 0 then
begin
Fields := TList.Create;
try
GetFieldList(Fields, FieldName);
for I := 0 to Fields.Count - 1 do
TField(Fields[I]).Value := Value[I];
finally
Fields.Free;
end;
end else
FieldByName(FieldName).Value := Value;
end;
firetoucher 2003-06-13
  • 打赏
  • 举报
回复
function TDataSet.FieldByName(const FieldName: string): TField;
begin
Result := FindField(FieldName);
if Result = nil then DatabaseErrorFmt(SFieldNotFound, [FieldName], Self);
end;

property FieldValues[const FieldName: string]: Variant read GetFieldValue write SetFieldValue; default;
97866 2003-06-13
  • 打赏
  • 举报
回复

table['字段']

table.fieldvalues['字段']
可以不用考虑返回的类型
前提是不能为空:)
WWWWA 2003-06-13
  • 打赏
  • 举报
回复
其实无所谓,只要能实现取值,用什么不重要
bbs791109 2003-06-13
  • 打赏
  • 举报
回复
我覺得差不多吧﹐我習慣用table.fieldbyname('字段') ---有時覺得就是慢了點吧。

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧