当前位置:主页>销售管理软件> 列表

高分求解SQL问题?(200分都给你) 找昆明速达软件

销售管理软件版1楼: 有一个问题,用过程传递数组变量,这样做SQL 为什么数组传递不过去?怎样做才能传递过去?
代码?
==================
type
rodarray=array of array of array of double;
qofarray=array[0..2] of TQuery;
nofarray=array[0..2] of string;

procedure A(var r:rodarray);
var
i,j,si:integer;
q:qofarray;
s1,s2,ss:string;
const
n:nofarray=(''rr01'',''rr02'',''rr03'');
begin
s1:=''select * from '';
s2:='' where 年代>=1960'';
for si:=0 to 2 do
begin
q[si]:=TQuery.Create(nil);
q[si].DatabaseName:=''sy'';
q[si].Close;
q[si].SQL.Clear;
ss:=s1+n[si]+s2;
q[si].SQL.Add(ss);
q[si].ExecSQL;
q[si].Open;
setlength(r,12,q[si].RecordCount,3);
for i:=0 to q[si].RecordCount-1 do
begin
for j:=0 to 11 do
begin
r[j,i,si]:=q[si].Fields[j+1].AsFloat;
end;
q[si].Next;
end;
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
dd:rodarray;
s:string;
begin
A(dd);
str(dd[1,2,3]:6:1,s);
sg.Cells[3,3]:=s;//sg==>>>>是TStringGrid
end;
===============
结果显示是0;
有谁解决了,马上加分!!!200分都给他(测试结果通过...),分数不够可以另行开贴加分!!!!怎么样?

2楼: setlength(r,12,q[si].RecordCount,3);应该放到第一个For循环前面啊! 如昆明速达软件

3楼: to royal1442
如果像你说的这样,怎么能行呢,q[si]还没有建造,哪里来q[si].RecordCount个;不过我还是要试试!!!

4楼: 你必须给数组设置了长度,才能访问它的元素啊!

5楼: to royal1442
===>>>setlength(r,12,q[si].RecordCount,3);应该放到第一个For循环前面啊!
我刚刚上试验了你的说法,不行的!
===>>>你必须给数组设置了长度,才能访问它的元素啊!
q[si].RecordCount 这个不就是长度吗?

6楼: 你每次SetLength一次,你之前的赋值就被冲掉了!

销售管理软件版7楼: to royal1442
真是点石成金呀!
200分都给你!
看看改成静态数组就可以了~!




ype
rodarray=array[0..11,0..100,0..2] of double;
qofarray=array[0..2] of TQuery;
nofarray=array[0..2] of string;
procedure A(var r:rodarray);
var
i,j,si:integer;
q:qofarray;
s1,s2,ss:string;
const
n:nofarray=(''rr01'',''rr02'',''rr03'');
begin
s1:=''select * from '';
s2:='' where 年代>=1960'';
for si:=0 to 2 do
begin
q[si]:=TQuery.Create(nil);
q[si].DatabaseName:=''sy'';
q[si].Close;
q[si].SQL.Clear;
ss:=s1+n[si]+s2;
q[si].SQL.Add(ss);
q[si].ExecSQL;
q[si].Open;
for i:=0 to q[si].RecordCount-1 do
begin
for j:=0 to 11 do
begin
r[j,i,si]:=q[si].Fields[j+1].AsFloat;
end;
q[si].Next;
end;
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
dd:rodarray;
s:string;
begin
A(dd);
str(dd[0,0,0]:6:1,s);
sg.Cells[3,3]:=s;
end;

end.

8楼: 谢谢啦!
解贴!!!说到做到。。。