记录的引用问题(100分)

  • 主题发起人 主题发起人 dyf
  • 开始时间 开始时间
D

dyf

Unregistered / Unconfirmed
GUEST, unregistred user!
type
Rec = reccord
a : string[10];
b : Integer;
pascal有没有类似数组那样的引用 Rec 办法? 便于循环中使用,还是只能 Rec.a ...
 
?
从 你写的REC看, 你有一个 rec 结构的数组
引用每一个REC ,当然可以用 REC
引用每一个REC中的 a ,是要用 rec.a
 
假如要给数据表添加记录,先定义个记录变量 REC ,对应数据表结构,其中可能有很多字段。现在给这个 Rec付值,
应该:
rec.a := something1;
rec.b := something2;
...
希望有如下效果的写法:
for i:=1 to xdo

rec(i):= something with number(i) ;

能否实现?

 
定义一个variant数组
var rec:array[1..n]of Variant;
...
for i:=1 to xdo
rec:= something with number(i) ;
 
由于题目是这样的:
Rec = reccord
a : string[10];
b : Integer;
......
明显,a,b是不同类型的有可能是String,可能是整数,也可能是实数。
很显然它们的长度不一。如果尝试通过长度来处理应该是不实际的。
又由于这个记录它的类型不一,所以尽管 tqz 的方法可行但也背离了
原来的要求吧?所以我认为原题是不能实现的。
 
我之所以用Variant就是因为它可以是任何的数据类型。
 
在下有个遇见,就是Variant会严重影响应用程序的速度,
特别在数组很大时。不过这条问题要是我提的话,T兄也
可得分了。 :-)
 
无论对记录中各域的引用都要以'.'来引出,即'王寒松'所言。
 
number(i)返回什么类型?
 
就是希望tqz的答案
dbtables.pas中处理recordlocate参数就是这样处理
 
unless you can save name "a","b" in a array, then
use rec.array
,but i can't fulfill it.
 
如果a,b是类型相同的,可以这样写:
Rec = reccord
case Boolean of
true: (
a : Integer;

b : Integer;);
false: (
arr: array[0..1] of integer);
end;
这样: Rec.a和Rec.arr[0]是等价的.
 
后退
顶部