用ADO访问Oracle9i,才有Oracle公司的OLE DB驱动程序,
Delphi写的Midas中间层,中间层服务器是Dell 4600
现在用客户端把大量文件传到中间层,在由中间层把这个文件保存到数据库的
BLOB字段中,客户端把文件传递到中间层的方法是把文件流转换成OleVariant,到中间层再把OleVariant转换成流存到数据库中
问题是前几个文件是没问题的,当存了十几个文件后就再存不进去了
而用普通PC机做中间层服务器是没有问题的,问题只出在用Dell服务器做中间层的机器上
中间层存文件的代码如下
procedure TEGov.PutFile(FileBody: OleVariant; const File_ID: WideString;
FileOrder: Integer);
var
MS: TMemoryStream;
AQuery: TADOQuery;
begin
MS := TMemoryStream.Create;
AQuery := TADOQuery.Create(Self);
AQuery.Connection := Connection;
try
VariantToStream(FileBody, MS);
with AQuery do
begin
SQL.Text := 'Select * from file_table where 1=2';
Open;
Insert;
FieldByName('file_id').AsString := File_ID;
FieldByName('file_order').AsInteger := FileOrder;
TBlobField(FieldByName('file_body')).LoadFromStream(MS);
Post;
end;
finally
MS.Free;
AQuery.Free;
end;
end;
多个文件就是通过不断的调用这个中间层方法存入数据库的。
每个文件的大小都不超过1M
希望各位大侠帮忙,谢谢大家
Delphi写的Midas中间层,中间层服务器是Dell 4600
现在用客户端把大量文件传到中间层,在由中间层把这个文件保存到数据库的
BLOB字段中,客户端把文件传递到中间层的方法是把文件流转换成OleVariant,到中间层再把OleVariant转换成流存到数据库中
问题是前几个文件是没问题的,当存了十几个文件后就再存不进去了
而用普通PC机做中间层服务器是没有问题的,问题只出在用Dell服务器做中间层的机器上
中间层存文件的代码如下
procedure TEGov.PutFile(FileBody: OleVariant; const File_ID: WideString;
FileOrder: Integer);
var
MS: TMemoryStream;
AQuery: TADOQuery;
begin
MS := TMemoryStream.Create;
AQuery := TADOQuery.Create(Self);
AQuery.Connection := Connection;
try
VariantToStream(FileBody, MS);
with AQuery do
begin
SQL.Text := 'Select * from file_table where 1=2';
Open;
Insert;
FieldByName('file_id').AsString := File_ID;
FieldByName('file_order').AsInteger := FileOrder;
TBlobField(FieldByName('file_body')).LoadFromStream(MS);
Post;
end;
finally
MS.Free;
AQuery.Free;
end;
end;
多个文件就是通过不断的调用这个中间层方法存入数据库的。
每个文件的大小都不超过1M
希望各位大侠帮忙,谢谢大家
解决方案 »
- 如何在局域网内自动搜索TIdUDPServer
- 求!求!求!求助一条关于SQL语句中分组的问题
- (献上300分,高手快来救命! 我写了一个控件(继承自TImage),用Image来模仿button,但是不知怎样(或何时)把Caption写上去?
- 2个表结构相同,如何通过batchmove进行部分字段的更新
- delphi中有没有象C++当中的动态类型识别和vc中archive类似的类
- 请问如何整体清除EDIT筐的TEXT数据
- 各位大哥:如何做到像delphiide环境中那样,拖拉鼠标可以通过矩形框选则多个控件,多谢了
- 单机系统移植到网络环境,也就是变成客户/服务器系统如何实现?
- Win2000的关机API函数是什么
- Ttalbe.OnFilterRecord有何用途
- 如何使用一个没有标题的程序得到焦点(使程序在所以窗口的最前)
- 有关QuickRep报表修改的问题
procedure VariantToStream(const v: olevariant;
Stream: TMemoryStream);
var
p: pointer;
begin
Stream.Position := 0;
Stream.Size := VarArrayHighBound(v, 1) - VarArrayLowBound(v, 1) + 1;
p := VarArrayLock(v);
Stream.Write(p^, Stream.Size);
VarArrayUnlock(v);
Stream.Position := 0;
end;procedure StreamToVariant(Stream: TMemoryStream; var v: OleVariant);
var
p: pointer;
begin
v := VarArrayCreate([0, Stream.Size - 1], varByte);
p := VarArrayLock(v);
Stream.Position := 0;
Stream.Read(p^, Stream.Size);
VarArrayUnlock(v);
end;