动态树组 ( 积分: 100 )

  • 主题发起人 主题发起人 f19881021
  • 开始时间 开始时间
F

f19881021

Unregistered / Unconfirmed
GUEST, unregistred user!
Procedure Read_RR(StrDT1:String;StrDT2:String;var LlCount:integer;var StrCD:array of String;var DtR:array of TDateTime;var StrVRR:array of String);
var
StrSql:String;
My_temp:TADOQuery;
li:Integer;
StrV:String;
LiV:LongInt;

begin
LlCount := 0;

StrSql := 'select * from ST_RNFL_B where YMDHM>''' + StrDT1 + ''' And YMDHM<=''' + StrDT2 + ''' And V>0 order by YMDHM,STCD';
My_temp:=TADOQuery.Create(nil);
My_temp.Connection:=My_cnn;
My_temp.Active:=false;
My_temp.SQL.Clear;
My_temp.SQL.Text:=StrSql;
My_temp.Active:=true;
If My_temp.RecordCount > 0 Then
begin
My_temp.First;
LlCount := My_temp.RecordCount;
setlength(StrCD,LlCount);
Setlength(DtR,LlCount);
Setlength(StrVRR,LlCount);
li:=0;
While Not My_temp.EOF do
begin
StrCD[li] := My_temp.FieldByName('STCD').AsString;
DtR[li] := My_temp.FieldByName('YMDHM').AsDateTime;
StrV := FormatFloat('0.0',My_temp.fieldByname('V').asFloat);
Set_Real(StrV);
StrVRR[li] := StrV;
li := li + 1;
My_temp.Next;
end;
End;
My_temp.Close;
My_temp.Free;
end;


我想在函数中动态定义数组,怎么出现[Error] Main.pas(400): Incompatible types错误呢
 
有没分配内存了?
 
setlength(StrCD,LlCount);
Setlength(DtR,LlCount);
Setlength(StrVRR,LlCount);
就是在这几行出错
 
先定义个类型.
TDynamicArrString = array of String;

等...

然后把相应地方改成 TDynamicArrString
 
顶一下:
www.chinadacs.cn
 
LZ把StrCD、DtR、StrVRR三个的定义贴出来看看
 
type
MyType = array of String;

procedure Myfunc(var strarr: MyType);
begin
SetLength(strarr, 10);
end;

这样才可以编译通过,原因是:"函数的参数如果是动态数组,则需要先定义一个名称"。
你可以uses Types单元(Delphi6+),里面有多种动态数组的定义。
 
//LlCount 就是strcd的count
其它的就是StrCd访问就成了
PROCEDURE Read_RR(StrDT1: STRING; StrDT2: STRING; VAR StrCD, DtR, StrVRR:
Tstrings);
BEGIN
WITH TADOQuery.Create(NIL), StrRet DO
TRY
sql.text :=
'select STCD,YMDHM,v from ST_RNFL_B where YMDHM>''' + StrDT1 +
''' And YMDHM<=''' + StrDT2 + ''' And V>0 order by YMDHM,STCD';
open;

WHILE NOT eof DO
BEGIN
StrCD.Add(FieldByName('STCD').AsString);
DtR.Add(FieldByName('YMDHM').AsString);
StrVRR.Add(format('%.1f', [fieldByname('V').asFloat]));
next;
END;
FINALLY
free;
END;
END;
 
对于传入的参数,要过程中是不需要定义或者说分配内存的,只需你在外部调用时进行分配就可以了
 

Similar threads

I
回复
0
查看
569
import
I
I
回复
0
查看
762
import
I
I
回复
0
查看
875
import
I
后退
顶部