procedure TForm1.next1Click(Sender: TObject);//下一页按钮事件
var
i:integer;
strm:tadoblobstream;
jpegimage:tjpegimage;
begin
for i:=1 to 32 do
begin
(FindComponent('label'+inttostr(i)) as Tlabel).Caption := '';
(FindComponent('image'+inttostr(i)) as Timage).Picture.Graphic := nil;
end;
for i:=1 to ADOQuery1.RecordCount do
begin
try
strm := tadoblobstream.Create(TBlobField(ADOQuery1.FieldByName('图标')),bmread); //从SQL中读取图片,赋到strm
(FindComponent('label'+inttostr(i)) as Tlabel).Caption := ADOQuery1.FieldByName('游戏名称').AsString;
if adoquery1.fieldbyname('isbmp').asstring ='0' then //判断图像类型
begin
jpegimage := tjpegimage.Create;
try
jpegimage.LoadFromStream(strm);
(FindComponent('image'+inttostr(i)) as Timage).Picture.Graphic := jpegimage;
finally
jpegimage.Free;
end;
end;
ADOQuery1.Next;
finally
strm.Free ;
end;
end;
end;这里有个问题,就是按“下一页”,直到读完数据库里的图片后,数据库里的最后一张图片会显示很多张,因为1页显示32个图片,所以假设有35张图片时,第35张图片显示在第二页的第3个位置上,但之后的第4-35个位置也会显示数据库的最后一张图片!另外因为一个页面只有32个image控件供显示图片,所以显示32之后的图片时会出错!
var
i:integer;
strm:tadoblobstream;
jpegimage:tjpegimage;
begin
for i:=1 to 32 do
begin
(FindComponent('label'+inttostr(i)) as Tlabel).Caption := '';
(FindComponent('image'+inttostr(i)) as Timage).Picture.Graphic := nil;
end;
for i:=1 to ADOQuery1.RecordCount do
begin
try
strm := tadoblobstream.Create(TBlobField(ADOQuery1.FieldByName('图标')),bmread); //从SQL中读取图片,赋到strm
(FindComponent('label'+inttostr(i)) as Tlabel).Caption := ADOQuery1.FieldByName('游戏名称').AsString;
if adoquery1.fieldbyname('isbmp').asstring ='0' then //判断图像类型
begin
jpegimage := tjpegimage.Create;
try
jpegimage.LoadFromStream(strm);
(FindComponent('image'+inttostr(i)) as Timage).Picture.Graphic := jpegimage;
finally
jpegimage.Free;
end;
end;
ADOQuery1.Next;
finally
strm.Free ;
end;
end;
end;这里有个问题,就是按“下一页”,直到读完数据库里的图片后,数据库里的最后一张图片会显示很多张,因为1页显示32个图片,所以假设有35张图片时,第35张图片显示在第二页的第3个位置上,但之后的第4-35个位置也会显示数据库的最后一张图片!另外因为一个页面只有32个image控件供显示图片,所以显示32之后的图片时会出错!
ADOQuery1.MoveBy(29); //指向第30条记录for ADOQuery1.RecordCount - 2 for ADOQuery1.RecordCount do
begin
...
end;