使用三层结构,如何从读取/存储bolb型的字段的好办法(后台使用interbase6.0)????(50分)

  • 主题发起人 主题发起人 zbwsh
  • 开始时间 开始时间
Z

zbwsh

Unregistered / Unconfirmed
GUEST, unregistred user!
使用三层结构,如何从读取/存储bolb型的字段的好办法(后台使用interbase6.0)????
要求:简单,明了,快速,不使用数据库控件.
希望各位大侠,高手,不吝赐教!!!!!!!!!!!!
 
各位高手不要客气,知道你就说吗[:)]
 
使用interbase如果你不要控件的话,那可以用interbase提供的编程接口,不过是用c
interbase还专门为blob提供的一些函数(PHP里面都可以)
 
interbase提供的编程接口delphi中怎么用?
 
别扯。所有对IB的操作,只要C能做到的,Pascal也一定能。
这里你没有说得太清楚。是中间层访问blob数据还是客户端访问blob数据。
好象客户端不应该直接访问blob呀,如果是中间层访问blob那会两层没有什么区别。
如果是这样,我告诉你一个顶好的方法:那就是用IBX中的IBSQL.既快又方便。
取数据直接用其字段。不过IBSQL执行前设置的参数并不是TParam类型,执行后返回的字段
也并不是TField,两者都是TIBXSQLVAR。呵呵,那就方便了。因为TIBXSQLVAR有两个好方法:
SaveToStream和LoadFromStream。
如果是客户端与中间层交换数据,那是网络方面的问题,与IB又无关了。这上面我用XML。
 
孙老师讲XML中的CDATA可以容二进制数据,按说也可以,不过我还没有来得及试。
眼下我用的是开辟TCP的第二个通道,专门传递二进制数据。
 
to barton:
请帮忙看一下下面的代码是否有错。我有时没报错,但数据库中也没有保存,
我的服务端用的就是IBSQL。
var
str1:string;
Stream1: TMemoryStream;
Stream2: TStream;
bmp:tbitmap;
begin
str1:= ' select bmpindex,bitmap from bmpdata WHERE bmpindex = 26266 ' ;
// bitmap为 BLOB SUB_TYPE 0 SEGMENT SIZE 80,
str1:=str1+ '''' + DZBM +'''';
with dm1do
begin
ClientDataSet1.Close;
ClientDataSet1.CommandText:=str1;
ClientDataSet1.open;
if not (ClientDataSet1.State in [dsInsert, dsEdit]) then
ClientDataSet1.Edit ;
Stream1:= TMemoryStream.Create();
bmp:=tbitmap.Create ;
try
bmp.LoadFromFile('C:/WINDOWS/web/wvleft.bmp');
bmp.SaveToStream(Stream1);
Stream1.Position :=0;
Stream2 := ClientDataSet1.CreateBlobStream( ClientDataSet1.FieldByName('bitmap'), bmReadWrite);
try
Stream2.CopyFrom(Stream1, Stream1.Size);
ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(0);
finally
Stream2.Free;
end;
finally
Stream1.Free;
bmp.free;
end;
end;

end;
 
请问版主,问题解决能否将分收回??
 
说说解决方法
 
to zbwsh
请说说解决的方法,我也有类似的问题
 
就说一说你的解决方法嘛,别解决了就不要别人吧。
 
李维的书中有比较详细的介绍!
 
后退
顶部