我在存储图片到sql server2k时出现"invaild blob length"错误,这是怎么回事?
我的代码如下:procedure TForm1.Button2Click(Sender: TObject);
var
Filestream:Tfilestream;
begin
table1.Edit;
opicdlg1.Execute;
filestream:=tfilestream.Create(opicdlg1.FileName,fmopenRead);
filestream.Position:=0;
tblobfield(table1.Fields.FieldByName('相片')).LoadFromStream (filestream) ;
table1.Post;
end;
我的代码如下:procedure TForm1.Button2Click(Sender: TObject);
var
Filestream:Tfilestream;
begin
table1.Edit;
opicdlg1.Execute;
filestream:=tfilestream.Create(opicdlg1.FileName,fmopenRead);
filestream.Position:=0;
tblobfield(table1.Fields.FieldByName('相片')).LoadFromStream (filestream) ;
table1.Post;
end;
解决方案 »
- TdxSideBar控件的问题
- 关于insert插入数据的问题
- 请问如何判断pagecontrol的tabsheet的数量?
- tlibimp导出pas文件有重复属性错误,该怎么解决?
- 我用ADO+SQl2000+Delphi6.0作的应用程序。执行都正常。但启动特别的慢。请问高手为什么啊。
- 如何自己制作office小助手
- 请问这条SQL语句的写法,等待散分!
- 请教Delphi专家:打印字体的问题
- 求助高手,股票自动交易的问题
- ADO连接请问怎样让所有的DB组件禁用....如果禁用ADOTABLE1.????...如果是取消禁止那..
- 很菜的问题,关于sql语句
- 用delphi如何改显示分辩率?
var
strm : Tmemorystream;
begin
if fileexists(openpicturedialog1.FileName) then
begin
strm := Tmemorystream.Create;
strm.LoadFromFile(openpicturedialog1.FileName);
strm.Position := 0;
with dm.ClassMateQuery do
begin
append;
TBlobfield(fieldbyname('pic')).LoadFromStream(strm);
try
post;
showmessage('保存成功');
except
showmessage('保存失败');
end;
end;
strm.Free;
end;
procedure TForm1.Button19Click(Sender: TObject);
var
bmp : TImage;
jpg : TJPEGImage;
fn : string;
begin
bmp := TImage.Create(nil);
jpg := TJPEGImage.Create;
if OpenDialog1.Execute then
begin
fn := Trim(OpenDialog1.FileName);
if Not FileExists(fn) then
begin
exit;
end
else
begin
bmp.Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
jpg.Assign(bmp.Picture.Bitmap);
jpg.SaveToFile(ChangeFileExt(OpenDialog1.FileName,'.jpg'));
ADOTable1.Edit;
ADOTable1.FieldByName('photo').Assign(jpg);
ADOTable1.Post;
end;
end;end;
Query.SQL.Clear;
Query.SQL.Add('INSERT INTO myimages(FileName,pic) VALUE(''Image1'',:pic)');
Query.ParamByName('pic').LoadFromFile('D:\Hasd.bmp',ftBlob);
Query.ExecSQL;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,jpeg,
ExtDlgs, Db, DBTables, StdCtrls, ExtCtrls, ADODB;type
TForm1 = class(TForm)
Button1: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Button2: TButton;
Image1: TImage;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
filename:string;
procedure SetPicture(pos:string;TempQuery:TADOQuery); /////往数据库中插入图片
procedure GetPicture(pos:string;TempQuery:TADOQuery); ////得到图片
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.GetPicture(pos:string;TempQuery: TADOQuery);
var
MS_JpegStream:TMemoryStream;
begin
try
MS_JpegStream:=TMemoryStream.Create;
with tempQuery do
begin
close;
sql.clear;
//修改这个语句
sql.Add('select picture from table where no=:pos');
Parameters.ParamByName('pos').value:=pos;
Open;
end;
if tempquery.FieldByName('image').isnull then
begin
image1.Picture.Graphic:=nil;
end
else
begin
(tempQuery.FieldByName('image') as tblobfield).savetostream(MS_JpegStream);
image1.Picture.Graphic:=nil;
image1.Picture.Graphic:=TJpegImage.Create;
MS_JpegStream.Position:=0;
image1.Picture.Graphic.LoadFromStream(MS_JpegStream);
end; finally
MS_JpegStream.Free;
end;end;procedure TForm1.SetPicture(pos:string; TempQuery: TADOQuery);
var
MS_JpegStream:TMemoryStream;
M_BitMap:TBitMap;
M_Jpeg:TJpegImage;
begin
try
MS_JpegStream:=TMemoryStream.Create;
M_BitMap:=TBitMap.Create;
M_Jpeg:=TJpegImage.Create;
if extractfileext(filename)='.bmp' then
begin
M_BitMap.LoadFromFile(filename);
M_Jpeg.Compress;
M_Jpeg.Assign(M_BitMap);
end
else if extractfileext(filename)='.jpg' then
begin
M_Jpeg.LoadFromFile(filename);
end;
M_Jpeg.SaveToStream(MS_JpegStream);
with tempQuery do
begin
close;
sql.clear;
//修改这个语句
sql.Add('insert into table (no,IMage) values (:pos,:image)');
Parameters.ParamByName('pos').Value:=pos;
Parameters.ParamByName('image').LoadFromStream(MS_JpegStream,ftblob); ExecSQL;
end;
finally
MS_JpegStream.Free;
M_BitMap.Free;
M_Jpeg.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);//打开图片并写入数据库
begin
if openpicturedialog1.Execute then
begin
filename:=openpicturedialog1.FileName;
SetPicture(edit1.text,ADOQuery1);
end
end;procedure TForm1.Button2Click(Sender: TObject);//显示图片
begin
getpicture(edit1.text,ADOQuery2);
end;end.