拜托各位大虾帮帮忙!
解决方案 »
- 请教一下ActiveX的问题
- 求解!serversocket..
- ftp的菜鸟问题
- 关于日期问题。。。不难(抱歉,分用完了)
- 有人用Delphi做Web开发或在学Delphi7Web开发与应用的书?进来look Look up给分
- 如何在shelllistview中实现文件的删除、剪切、复制、粘贴
- 问个简单的问题,大家别笑我,Delphi里去字符串前后的空格的函数是什么啊?
- 我以前用的bde可以设置cachedupdates为true,现在在ado里却找不到相应功能的属性?
- 向大家学习,有关form释放内存的问题?
- 有谁用过数据仓库控件吗?小弟在此碰到了几个问题。
- ★★回家了,散分★★
- 用PCHAR获取单个字符的问题,简单,轻松得分 200412
adoquery.sql.text := 'select id, img from table';
adoquery.open;
adoquery.edit;
Tblobfield(adoquery.fieldbyname('img')).loadfromfile('c:\test.bmp');
adoquery.post;
procedure AddPicToDatabase(Filename:string);
var
JPG:TJPEGImage;
Stream:TMemoryStream;
begin
try
jpg:=TJPEGImage.Create;
stream:=TMemoryStream.Create;
jpg.LoadFromFile(Filename);
jpg.SaveToStream(stream);
stream.Position:=0;
TBlobField(mainfrm.Table1.FieldByName('Pic')).LoadFromStream(stream);
jpg.Free;
stream.Free;
except
end;
end;从数据库中读出图片
procedure LoadPicFromDatabase(Sender:TImage);
var
Jpg:TJpegImage;
Stream:TMemoryStream;
begin
jpg:=TJpegImage.Create;
stream:=TMemoryStream.Create;
TBlobField(mainfrm.Table1.FieldByName('Pic')).SaveToStream(stream);
stream.Position:=0;
jpg.LoadFromStream(stream);
sender.Picture.Assign(jpg);
jpg.Free;
stream.Free;
end;
----------------------------------------------
****************************************************
ms:=TMemoryStream.Create ;
image1.Picture.Graphic.SaveToStream(ms);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into T_EmergenceAssistantInfo (PlanNumber,PlanEnterprise,Name,'+
'StyleIndex,ReplaceIndex)'+
' values('+quotedStr(Trim(edtPlanNumber.Text))+','+
quotedStr(Trim(edtPlanEnterprise.Text))+','+
quotedStr(Trim(cbxPicture.Text))+','+
quotedStr('Picture')+','+quotedStr('Y')+')');
ExecSql;
close;
sql.clear;
sql.Add('select * from T_EmergenceAssistantInfo where PlanNumber='+
quotedStr(Trim(edtPlanNumber.Text))+' and PlanEnterprise='+
quotedStr(Trim(edtPlanEnterprise.Text))+
' and Name='+quotedStr(Trim(cbxPicture.Text))+
' and StyleIndex='+quotedStr('Picture')+
' and ReplaceIndex='+quotedStr('Y'));
Open;
adoquery1.Edit;
ms.Position :=0;
Tblobfield(adoquery1.fieldbyname('Picture')).LoadFromStream(ms);
post;
end;
ms.Free ;
***************************************************
从数据库中取出图片:
************************************************************
with adoquery1 do
begin
close;
sql.Clear; sql.Add('select * from T_EmergenceAssistantInfo where PlanNumber='+
quotedStr(Trim(edtPlanNumber.Text))+' and PlanEnterprise='+
quotedStr(Trim(edtPlanEnterprise.Text))+
' and Name='+quotedStr(Trim(cbxPicture.Text))+
' and StyleIndex='+quotedStr('Picture')+
' and ReplaceIndex='+quotedStr('Y'));
Open;
if fieldBYName('Picture')<>nil then
begin
ms:=TMemoryStream.Create ;
Tblobfield(adoquery1.fieldbyname('Picture')).SaveToStream(ms);
ms.Position:=0;
if ms.Size>0 then
begin
image1.Picture.Graphic.loadFromStream(ms);
end;
end;
end;
ms.Free ;
MemStream := TMemoryStream.Create; //创建流
try
MemStream.LoadFromFile(filedirectory); //将文件读到流中去,你文件都没有LOAD,那怎么保存
MemStream.Seek(0, soFromBeginning);
with ADOQuery do
begin
Append;
TBlobField(FieldByName('fieldname')).LoadFromStream(MemStream);
Post;
end;
finally
MemStream.Free;
end;
var
ImageBMP:Tbitmap;
ImageJPEG:Tjpegimage;
begin
try
if bsSkinOpenPictureDialog1.Execute then
begin
Data.dsProbation.DataSet.Edit;
if uppercase(ExtractFileExt(bsSkinOpenPictureDialog1.FileName))='.JPG' then
begin
ImageBMP:=Tbitmap.Create;
ImageJPEG:=TjpegImage.Create;
ImageJPEG.LoadFromFile(bsSkinOpenPictureDialog1.FileName);
ImageBMP.Assign(ImageJPEG);
ImageBMP.SaveToFile(ExtractFilePath(application.ExeName)+'TempBMP.BMP');
//bsSkinDBImage1.Picture.LoadFromFile(bsSkinOpenPictureDialog1.FileName);//
bsSkinDBImage1.Picture.LoadFromFile(ExtractFilePath(application.ExeName)+'TempBMP.BMP');
end
else
bsSkinDBImage1.Picture.LoadFromFile(bsSkinOpenPictureDialog1.FileName);
end;
except
unit1.frm_mian.bsSkinMessage1.MessageDlg('您选择的图片格式有误,请从新选择!', mtInformation, [mbOK], 0);
exit;
end;
end;
不知道是我用的控件问题还是DELPHI的BUG ,DBImage1不能正常显示JPG的图片,所以要把JPG的转成BMP的,如果在放入数据库,这样唯一不好的就是BMP的图太大了,影响数据库的质量!
CREATE PROCEDURE sp_textcopy
@srvname varchar (30), --服务器名
@login varchar (30), --用户名
@password varchar (30), --密码
@dbname varchar (30), --数据库名
@tbname varchar (30), --表名
@colname varchar (30), --存储文件的字段名
@filename varchar (30), --要存取的文件名
@whereclause varchar (40), --条件
@direction char(1) --I 为存储到数据库,O 从数据库中读出成文件
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S"' + @srvname +
'" /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F "' + @filename +
'" /' + @direction
EXEC master..xp_cmdshell @exec_str
go--调用示例:
--1.创建示例表和初始化数据
create table tb(id int,img image)
insert tb
select 1,0x
union all select 2,0x
go--2.将文件保存到数据库中
declare @srv varchar(255),@db sysname,@tb sysname,@col sysname
select @srv=@@servername --服务器名
,@db=db_name() --数据库名
,@tb='tb' --表名
,@col='img' --列名
sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','I' --保存到id=1的记录中,注意条件是:id=1
sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','I' --保存到id=2的记录中,注意条件是:id=2--3.从数据库中读出保存为文件
sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','O' --读出id=1的记录,注意条件是:id=1
sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','O' --读出id=2的记录,注意条件是:id=2在delphi中只需执行sql语句:“adoquery1.SQL.Add(exec sp_textcopy);
adoquery1.execsql;”/*--利用 textcopy.exe文件实现在数据库中存储/读取文件 需要textcopy.exe文件,该文件可以在sql 7.0安装光盘找到--转贴自大力--*/
procedure TFBathDetail.LoadData;
var
ImageStream: TMemoryStream;
JPEGImage: TJPEGImage;
SqlText:string;
begin
with FDMPurchase.BathDetail do
begin
if RecordCount > 0 then
begin
EdtXSNo.Text := FieldByName('XSNo').AsString;
EdtXStypeNo.Text := FieldByName('XStypeNO').AsString;
if FDMPurchase.BathSort.Lookup('XStypeNO',FieldByName('XStypeNO').AsString,'XStypeName')<>null then
EdtXStypeName.Text:=FDMPurchase.BathSort.Lookup('XStypeNO',FieldByName('XStypeNO').AsString,'XStypeName');
EdtCsimpleName.Text := FieldByName('CsimpleName').AsString;
EdtCpropName.Text := FieldByName('CpropName').AsString;
EdtEnglishName.Text := FieldByName('EnglishName').AsString;
EdtRe.Text := FieldByName('Re').AsString;
if FBathDetail.State = 2 then
begin
SqlText := format('select XSTX from IXiShuiDetail where XSNo=''%s''', [trim(EdtXSNo.Text)]);
OpenData(SqlText, FDMPurchase.Comm);
ImageStream := TMemoryStream.Create;
if (trim(FieldByName('Format').AsString) = 'jpg') or (trim(FieldByName('Format').AsString) = 'JPG')
or (trim(FieldByName('Format').AsString) = 'jpeg') or (trim(FieldByName('Format').AsString) = 'JPEG') then
begin
JPEGImage := TJPEGImage.Create;
try
TblobField(FDMPurchase.Comm.FieldByName('XSTX')).SaveToStream(ImageStream);
ImageStream.Seek(0, 0);
JPEGImage.LoadFromStream(ImageStream);
ImgXSTX.Picture.Bitmap.Assign(JPEGImage);
SetSize;
finally
ImageStream.Free;
JPEGImage.Free;
end;
end
else
begin
try
TblobField(FDMPurchase.Comm.FieldByName('XSTX')).SaveToStream(ImageStream);
ImageStream.Seek(0, 0);
ImgXSTX.Picture.Bitmap.LoadFromStream(ImageStream);
SetSize;
finally
ImageStream.Free;
JPEGImage.Free;
end;
end;
end;
end;
end;
end;function TFBathDetail.SaveData: boolean;
var
SqlText,ImageType,filepath: string;
begin
result := false;
if trim(EdtXSNo.Text)='' then
begin
messagedialog('警告', '編號不能為空,請輸入!', mtWarning, [MBok], 0, 0);
abort;
end;
if State = 1 then
begin
SqlText := format('select XSNo from IXiShuiDetail where XSNo=''%s''', [trim(EdtXSNo.Text)]);
OpenData(SqlText, FDMPurchase.Comm);
if FDMPurchase.Comm.RecordCount <> 0 then
begin
messagedialog('警告', '已存在此類別編號,請重新輸入', mtWarning, [MBok], 0, 0);
abort;
end;
end;
if State = 1 then
begin
with FDMPurchase.BathDetail do
begin
OpenData('select top 1 * from IXiShuiDetail',FDMPurchase.BathDetail);
Append;
FieldByName('XSNo').AsString := EdtXSNo.Text;
FieldByName('XStypeNO').AsString := EdtXStypeNo.Text;
FieldByName('CsimpleName').AsString := EdtCsimpleName.Text;
FieldByName('CpropName').AsString := EdtCpropName.Text;
FieldByName('EnglishName').AsString := EdtEnglishName.Text;
FieldByName('Re').AsString := EdtRe.Text;
filepath:=ExtractFileExt(PictureFileName);
ImageType := rightstr(PictureFileName, (length(filepath) - Pos('.', filepath)));
if ImageType <> '' then
begin
TblobField(FieldByName('XSTX')).LoadFromFile(PictureFileName);
FieldByName('Format').AsString := ImageType;
FieldByName('ImagePath').AsString:=PictureFileName;
end;
Post;
ApplyUpdates(0);
PictureFileName := '';
end;
State := 0;
OpenData('select * from IXiShuiDetail', FDMPurchase.BathDetail);
result := true; end;
if State = 2 then
begin
try
with FDMPurchase.BathDetail do
begin
OpenData('select * from IXiShuiDetail where XSNo='+#39+trim(EdtXSNo.Text)+#39,FDMPurchase.BathDetail);
Edit;
FieldByName('XSNo').AsString := EdtXSNo.Text;
FieldByName('XStypeNO').AsString := EdtXStypeNo.Text;
FieldByName('CsimpleName').AsString := EdtCsimpleName.Text;
FieldByName('CpropName').AsString := EdtCpropName.Text;
FieldByName('EnglishName').AsString := EdtEnglishName.Text;
FieldByName('Re').AsString := EdtRe.Text;
filepath:=ExtractFileExt(PictureFileName);
ImageType := rightstr(PictureFileName, (length(PictureFileName) - Pos('.', PictureFileName)));
if ImageType <> '' then
begin
TblobField(FieldByName('XSTX')).LoadFromFile(PictureFileName);
FieldByName('Format').AsString := ImageType;
FieldByName('ImagePath').AsString:=PictureFileName;
end;
Post;
ApplyUpdates(0);
PictureFileName := '';
end;
State := 0;
OpenData('select * from IXiShuiDetail', FDMPurchase.BathDetail);
result := true;
except
messageDialog('出錯', '保存數據時出錯,請重新保存或放棄.', mterror, [mbOk], 0, 0);
end;
end;
end;
http://blog.csdn.net/ghyghost/archive/2003/07/21/15774.aspx
以下的代码只是代码片断,有什么可以e-mail给我。
--------------------------------------------------------------------
保存
---------
function PicToVarArray(pic: TPicture): Variant;
var
MS: TMemoryStream;
s: string;
begin
MS := TMemoryStream.Create();
Pic.Bitmap.SaveToStream(MS);
SetLength(S, MS.Size);
Move(MS.Memory^, Pointer(S)^, MS.Size);
MS.Free();
Result := StringToVariantArray(S);
end;
------------------------------------------------------
function SaveImage(var imag: OleVariant):Boolean
begin
...
SQL:='insert table(Fimag) values(:imag)'
....
Parameters[1].Value :=imag;
end
------------------------------
读取
-----------------------------
var
MS:TMemoryStream;
begin
...........
MS:=TMemoryStream(DataSet.CreateBlobStream(DataSet.FieldByName('Fimag'),bmRead));
MS.SaveToFile('保存的文件名');
................
end
这个是我很早以前的代码了,希望能帮到你。