看看这段代码,就没人能解决这个问题吗?高手请 (20分)

H

huayf

Unregistered / Unconfirmed
GUEST, unregistred user!
with ADOQuery3 do begin
SQL.Text :='select count(ques) as sum from quest where name='''+Edit1.Text+'''';
Prepared;
Open;
end;
q :=ADOQuery3.FieldByName('sum').Value

with ADOQuery1 do begin
SQL.Text :='select ques from quest where name='''+Edit1.Text+'''';
Prepared;
Open;
end;
//--------------------读问题选项并赋值给数组-----------------------------------
with ADOQuery2 do begin
SQL.Text :='select count(chck) as sum from answ where name='''+Edit1.Text +''' and qst='''+ADOQuery1.FieldByName('ques').Value+'''';
Prepared;
Open;
end;
n :=ADOQuery2.FieldByName('sum').Value;
SetLength (MyCheck,q,n)
//确定二维数组的长度

//-----------问题出在以下这段代码------------------
for H := 0 to q-1 do begin
for J := 0 to n-1 do begin
with ADOQuery2 do begin
SQL.Text :='select chck from answ where name='''+Edit1.text+''' and qst='''+ADOQuery1.FieldByName('ques').Value+'''';
Prepared;
Open;
while not EOF do begin
MyCheck[H,J] := FieldByName('chck').Value
Next;
end;
end;
end;
读表给二维数组赋值,发现循环不对,二维数组种新的数据覆盖了前面的数据
 
SetLength(MyCheck,q,n);

for H := 0 to q-1 do begin
//for J := 0 to n-1 do begin
j :=0;//改在这儿,第一次j没有初始化
with ADOQuery2 do begin
SQL.clear;//先调用这个函数,可能好一点
SQL.Text :='select chck from answ where name='''+Edit1.text+''' and qst='''+ADOQuery1.FieldByName('ques').Value+'''';
Prepared;
Open;
first;////////////////
while not EOF do begin
MyCheck[H,J] := FieldByName('chck').Value
// showmessage(MyCheck[H,J])
if j<=n-1 then //n要注意赋值
j :=j+1
else break;
Next;
end;
close;//关闭
//j :=0;
end;

ADOQuery1.next;///可能要加
end;
如果ADOQuery1.FieldByName('ques').Value的值不变,你这样做会每次都查询出
相同的结果集的,
 
是循环的问题,SQL选出所有符合条件的记录,其实有三重循环,如何使二维数组的两重循环
和ADOQuery2的while循环协调的问题,即:简单点假如我有一个这样的表,表中的数据都
符合条件,如何通过循环把这所有的数据赋值给一个二维数组。
 
vat i, j
SetLength(MyCheck,q,n);
i:=0;
while not dataset.eof do
begin
for j:=0 to dataset.filedcount-1 do
mycheck[i,j]:= dataset.fields[j].asstring;
dataset.next
i:=i+1
end
 
不好意思,我解释错了,我要的是一个字段中符合条件的值并赋给二维数组
 
var i,j
begin
query.sql.add('你的查询SQL');
query.open;
if Query.recordcount > 0 then begin
SetLength(Mycheck,Query.Recordcount,query.fieldcount);
i:=0;
query.first;
while not query.eof do
begin
for j:=0 to query.filedcount-1 do
mycheck[i,j]:= query.fields[j].asstring;
query.next;
i:=i+1;
end;
end;

end;
end;
 
顶部