procedure TForm1.Button1Click(Sender: TObject);
var
stream:TMemorystream;
begin
query1.CacheBlobs:=false;
query1.SQL.Text:='select * from arc_guide1,guide_photo where arc_guide1.身份证号=guide_photo.Id';
query1.Open;
// query1.Last;
// query1.First;
application.ProcessMessages;
showmessage(inttostr(query1.RecordCount));
stream:=Tmemorystream.Create();
TblobField(query1.FieldByName('Photo')).SaveToStream(stream);
showmessage(inttostr(stream.Size));
showmessage('asf');
end;如果执行如上代码, 显示的记录数为-1,别的都没有问题.
如果把
query1.Last;
query1.First;
两行加上,记录显示正确,但:
TblobField(query1.FieldByName('Photo')).SaveToStream(stream);
执行出错. 这是为什么,是不是delphi的一个BUG???
var
stream:TMemorystream;
begin
query1.CacheBlobs:=false;
query1.SQL.Text:='select * from arc_guide1,guide_photo where arc_guide1.身份证号=guide_photo.Id';
query1.Open;
// query1.Last;
// query1.First;
application.ProcessMessages;
showmessage(inttostr(query1.RecordCount));
stream:=Tmemorystream.Create();
TblobField(query1.FieldByName('Photo')).SaveToStream(stream);
showmessage(inttostr(stream.Size));
showmessage('asf');
end;如果执行如上代码, 显示的记录数为-1,别的都没有问题.
如果把
query1.Last;
query1.First;
两行加上,记录显示正确,但:
TblobField(query1.FieldByName('Photo')).SaveToStream(stream);
执行出错. 这是为什么,是不是delphi的一个BUG???
'select * from arc_guide1,guide_photo where arc_guide1.身份证号=guide_photo.Id'
这样出来的是笛卡尔矢量积,有冗余,可写成
'select * from arc_guide1 inner join guide_photo on arc_guide1.身份证号=guide_photo.Id'
TblobField(query1.FieldByName('Photo')).SaveToStream(stream);
出错,你就看看相关帮助了~
改成
(query1.FieldByName('Photo') as TblobField).SaveToStream(stream);试试
bug也太多了吧
好好学学吧