//取图片
procedure TForm1.BitBtn1Click(Sender: TObject);
var
mm:Variant;
MyStream,MyStream1:TMemoryStream;
MyJPG:TjpegImage;
begin
with ADOQuery1 do
begin
close;
SQL.Text := 'select * from test where ID=1';
Open; if not eof then
begin
MyStream := TMemoryStream.Create;
if FieldByName('Pic').IsNull then
begin
showmessage('为空');
Exit;
end; TBlobField(FieldByName('Pic')).SaveToStream(MyStream);
MyStream.Position := 0;
MyJPG := TjpegImage.Create;
Image2.Picture.Graphic := nil;
Image2.Picture.Graphic := MyJPG;
Image2.Picture.Graphic.LoadFromStream(MyStream);
MyJPG.Free;
MyStream.Free;
end
else
showmessage('不存在');
end;
end;//存图片
procedure TForm1.Button1Click(Sender: TObject);
var
PicStream:TMemoryStream;
begin
PicStream := TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(PicStream);
with ADOQuery1 do
begin
SQL.Text := 'insert into test(Pic)values(:Pic1)';
Parameters.ParamByName('Pic1').LoadFromStream(PicStream,ftBlob);
ExecSQL;
end;
PicStream.Free;
end;现在在取图片显示在image中的时候老是提示invalid class typecast
procedure TForm1.BitBtn1Click(Sender: TObject);
var
mm:Variant;
MyStream,MyStream1:TMemoryStream;
MyJPG:TjpegImage;
begin
with ADOQuery1 do
begin
close;
SQL.Text := 'select * from test where ID=1';
Open; if not eof then
begin
MyStream := TMemoryStream.Create;
if FieldByName('Pic').IsNull then
begin
showmessage('为空');
Exit;
end; TBlobField(FieldByName('Pic')).SaveToStream(MyStream);
MyStream.Position := 0;
MyJPG := TjpegImage.Create;
Image2.Picture.Graphic := nil;
Image2.Picture.Graphic := MyJPG;
Image2.Picture.Graphic.LoadFromStream(MyStream);
MyJPG.Free;
MyStream.Free;
end
else
showmessage('不存在');
end;
end;//存图片
procedure TForm1.Button1Click(Sender: TObject);
var
PicStream:TMemoryStream;
begin
PicStream := TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(PicStream);
with ADOQuery1 do
begin
SQL.Text := 'insert into test(Pic)values(:Pic1)';
Parameters.ParamByName('Pic1').LoadFromStream(PicStream,ftBlob);
ExecSQL;
end;
PicStream.Free;
end;现在在取图片显示在image中的时候老是提示invalid class typecast
解决方案 »
- StringGrid指定单元格背景颜色改变
- Fastreport是不是发春了
- dataset中用sql语句as出来的列,如何赋值?
- 求救阿,求擅长C程序转delphi程序的高手帮忙,1000分相送,请进来帮忙阿
- asp和web snap之间怎么传递变量?
- forward 的用法很简单的啊但我不会????//
- 明天不上班,那就没有可用分了
- 大哥们救命啊如何在TREEview控制中出现复选框
- 帮我解决一个问题好吗(在线等待。
- 我想修改计算机的时间,例如我想把2002-7-1 16:46:26设定为当前的时间,高手怎么办啊?
- 急!关天DBGrid的访问??
- 用ODBC连接MYSQL,连接上了,DBGrid却显示不出来`~~
你使用MySQL4.1以上的版本吗?我们公司使用ADO+MYODBC3.51+MySQL4.1.12用Borland C++Builder来开发,
开始也是由于多国语言的问题,无法存取MySQL中的二进制数据,现在成功解决了,
确认一下,你的开发环境是什么?
TBlobField(FieldByName('Pic')).SaveToStream(MyStream);这句有问题,提示invalid class typecast
//加载(存)
var
sFileName : String;
function BlobConectToString(Const FileName : String) : String;
begin
with TFileStream.Create(FileName, fmOpenRead) do
try
SetLength(Result, Size);
Read(Pointer(Result)^, Size)
finally
Free;
end;
end;
begin
if OpenDialog1.Execute then
begin
sFileName := OpenDialog1.FileName;
ADOQuery1.Edit;
ADOQuery1.FieldByName('Blobs').AsString := BlobConectToString(sFileName);
ADOQuery1.Post;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
//显示(取)
var
sFileName : String;
Bs : TADOBlobStream;
begin
Bs := TADOBlobStream.Create(TBlobField(ADOQuery1.FieldByName('Blobs')), bmRead);
try
sFileName := ExtractFilePath(Application.ExeName) + 'tmpBlob';
sFileName := sFileName + '.' + ADOQuery1.FieldByName('文件扩展名').AsString;
Bs.SaveToFile(sFileName);
OleContainer1.CreateObject(sFileName, False);
finally
Bs.Free;
end;
end;
TADOBlobStream.Create(TBlobField(FieldByName('Pic')), bmRead);提示invliad argument,可能不能转换为TBlobField型,我测了一下该字段,发现该字段类型为ftVarBytes
加个query试试
TEMBMP.ASSIGN(JPEG)
TBlobField(FieldByName('Pic')).SaveToStream(MyStream);
好像是转换为TBlobField时出错