怎样用简易的方法将动态数组转化为静态数组(100分)

  • 主题发起人 主题发起人 delphi 首富
  • 开始时间 开始时间
D

delphi 首富

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我有两个表table_source和table_dest,想把table_source地记录的值赋给table_dest
于是使用了一个动态数组的方法
var:
srValueLst: array of Variant;
begin
SetLength(srValueLst, table_dest.FieldCount);
with table_source do begin
for I := 0 to FieldCount-1 do begin // Iterate
srValueLst[I+1]:= table_source.Fields.Value;
end; // for
// 将table_source的一条记录赋给动态数组
然后使用
table_dest.appendrecord(srValueLst) {出错,提示动态数组与静态数组类型不匹配}
的方法将记录添加到目的表

我知道可以用以下的方法将动态数组转化为静态数组:
var
temp: array[10] of variant
srValueLst: array of Variant;
begin
for i:= low(temp) to high(temp) do
temp:= srValueLst;
而且我也知道字段的数目,但是我有很多表,表中字段的数量非常多,
要一个一个数。不知道是否有这种简易的数组类型转换方法
动态数组to静态数组(srValueLst,temp)




 
AppendRecord在底层也就是这么一句话:
procedure TDataSet.SetFields(const Values: array of const);
var
I: Integer;
begin
for I := 0 to High(Values) do Fields.AssignValue(Values);
end;
而High也可用于动态数组,所以你自己写一句代码也就搞定了。至于参数类型不匹配,这
大概是Pascal语言特点所致,在C/C++当中这样的情况就可以通用。
 
to Sachow
谢谢,你说得没错。
但是那条语句怎么写?是这样吗,在我的过程里直接写
with table_dest do
append;
for I := 0 to High(srValueLst) do Fields.AssignValue(Values);
//其实现在我就是这么写的
但是,本来我就是想偷懒得,这样让我感觉是偷鸡不成赊把米
 
用 batchmove
如果结构相同
 
我的问题的根本目的并不是将一个表复制到另一个表,而是就此为例讨论如何将动态数组
转化为静态数组
 
动态数组本质上以一个指针数组,物理结构上和静态数组是不相同的,
它们之间不能用Move来复制,所以你的办法已经可以了。
 
use COPY function to do it.
ep:
A:array[0..10] of integer;
B:array of integer;
...
SetLength(B,20);
for i:=0 to High(B) do
B:=i;
A:=Copy(B,0,10);
...
 
后退
顶部