http://expert.csdn.net/Expert/topic/1248/1248313.xml?temp=.3044702
解决方案 »
- indy10中idcookiemanager的bug??
- 打包基本问题,给分了~~~~~~~~~~~顶啊!!
- 有没有在编译时取编译时间的函数?编译后就替换成常量了.(用来作版本控制)
- 几个小问题,请大家帮帮忙,谢谢!!!!! 1,如何取整,例如将小数2.7取值为2 2,如何判断edit.text的内容是否为integer型
- delphi6.0中播放*.wav文件的控件在哪里?
- 人生杜抉择,请大家给个建议!
- 那里下载delphi的Installshield Express
- 新手:窗体变量设为nil含义??
- DBGrid如何显示行标?
- 关于DELPHI调用JAVA 的webservice问题
- 设计菜单时怎样加一条为横线的菜单项
- 请问怎样才能做出像Norton那种界面的form呢?
http://expert.csdn.net/Expert/topic/1248/1248313.xml?temp=.3044702
////////////////////////////////////////////////////////////////////
//有关blob字段的读写操作公共函数
////////////////////////////////////////////////////////////////////
interface
uses classes,db,dbtables,graphics;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:IMAGE字段的读写操作
function gfWriteDataToBlobField(bIndex,eIndex:integer;data:array of double;var fieldObject:TBlobField):boolean;
function gfReadDataFromBlobField(bIndex,eIndex:integer;var data:array of double;fieldObject:TBlobField):boolean;function gfWriteImageToBlobField(bitmapObject:TBitmap;var fieldObject:TBlobField):boolean;
function gfReadImageFromBlobField(var bitmapObject:TBitmap;fieldObject:TBlobField):boolean;implementation////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:从IMAGE字段中读取数据到数组中
//输入: data:实型数组 bIndex,eIndex:数组起止索引 fieldObject:与IMAGE字段对应的fieldObject对象
//输出:fieldObject对象数据将被修改 返回成功标志TRUE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function gfWriteDataToBlobField(bIndex,eIndex:integer;data:array of double;var fieldObject:TBlobField):boolean;
var
bufferLen:integer;
dataStream:TMemoryStream;
begin
//check parameters:
// Assert((data<>nil) AND (fieldObject<>nil),'Parameters error in gfReadDataFromBlobField()!');
Assert(eIndex>=bIndex,'Parameters error in gfReadDataFromBlobField()!'); Result:=true;
//make memory stream
bufferLen:=sizeof(double)*(eIndex-bIndex);
dataStream:=TMemoryStream.Create;
dataStream.SetSize(bufferLen+1);
//write data into memory stream
dataStream.Write(data,bufferlen);
//write data into field object from memory stream
try
fieldObject.LoadFromStream(dataStream);
except
Result:=False;
end;
dataStream.free;
end;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:从IMAGE字段中读取数据到数组中
//输入: data:实型数组 bIndex,eIndex:数组起止索引 fieldObject:与IMAGE字段对应的fieldObject对象
//输出:data数组中数据将被修改 返回成功标志TRUE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function gfReadDataFromBlobField(bIndex,eIndex:integer;var data:array of double;fieldObject:TBlobField):boolean;
var
bufferLen:integer;
dataStream:TMemoryStream;
myBlobStream:TBlobStream;
begin
//check parameters:
// Assert((data<>nil) AND (fieldObject<>nil),'Parameters error in gfReadDataFromBlobField()!');
Assert(eIndex>=bIndex,'Parameters error in gfReadDataFromBlobField()!'); Result:=true;
//make memory stream
bufferLen:=sizeof(double)*(eIndex-bIndex);
dataStream:=TMemoryStream.Create;
dataStream.SetSize(bufferLen+1); try
begin
//make blob stream
myBlobStream:=TBlobStream.Create(fieldObject,bmRead); //read data from blob stream to memory stream
dataStream.LoadFromStream(myBlobStream);
end
except
begin
Result:=false;
end
end; //read data into data array from memory stream
if Result then dataStream.Read(data[bIndex],bufferlen);
dataStream.Free;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:从IMAGE字段中读取数据到image对象中
//输入: bitmapObject:图形对象 fieldObject:与IMAGE字段对应的fieldObject对象
//输出:fieldObject数据将被修改 返回成功标志TRUE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function gfWriteImageToBlobField(bitmapObject:TBitmap;var fieldObject:TBlobField):boolean;
var
bufferLen:integer;
dataStream:TMemoryStream;
begin
//check parameters:
Assert(((bitmapObject<>nil) AND (fieldObject<>nil)),'Parameters error in gfReadDataFromBlobField()!'); Result:=true;
//make memory stream
bufferLen:=sizeof(bitmapObject);
dataStream:=TMemoryStream.Create;
dataStream.SetSize(bufferLen+1);
//write data into memory stream
bitmapObject.SaveToStream(dataStream); //write data into field object from memory stream
try
fieldObject.LoadFromStream(dataStream);
except
Result:=False;
end;
dataStream.free;
end;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:从IMAGE字段中读取数据到image对象中
//输入: bitmapObject:图形对象 fieldObject:与IMAGE字段对应的fieldObject对象
//输出: bitmapObject数据将被修改 返回成功标志TRUE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function gfReadImageFromBlobField(var bitmapObject:TBitmap;fieldObject:TBlobField):boolean;
var
myBlobStream:TBlobStream;
begin
//check parameters:
Assert((bitmapObject<>nil) AND (fieldObject<>nil),'Parameters error in gfReadDataFromBlobField()!'); Result:=true;
//make memory stream
try
begin
//make blob stream
myBlobStream:=TBlobStream.Create(fieldObject,bmRead); //read data from blob stream to memory stream
bitmapObject.LoadFromStream(myBlobStream);
end
except
begin
Result:=false;
end
end; //read data into data array from memory stream
myBlobStream.Free;
end;
end.
问题是我以前的程序是用流来操作的,现在还数据库了,改用文件的话改起来很麻烦。
我知道postgresql可以用流的,但我不知道delphi下怎么用