DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: szliyu112358
今日帖子: 58
在线用户: 21
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/29 17:22:13
标题:
关于Blob字段的问题 浏览:3321
加入我的收藏
楼主: 想把MySQL数据库中blob字段里的内容保存到文件
一开始是用query,然后读取相应的字段保存,发现最大只有33K,
而用Table,读取响应的字段保存,则能保存完全
代码如下,其实table1和query2的内容是一样的,为什么会出现这样的结果?
begin
     self.Table1.Open  ;
     self.Table1.Last  ;
     TMemoField(self.Table1.FieldByName('Neirong')).SaveToFile('E:\temp.eqt');
     self.Table1.Prior ;
     TBlobField(self.Table1.FieldByName('Neirong')).SaveToFile('E:\temp1.eqt');
     self.Table1.Close;

     self.Query2.Close;
     self.Query2.SQL.Clear ;
     self.Query2.SQL.Add('select * from gongxiang;');
     self.Query2.Open ;
     self.Query2.Last ;
     TMemoField(self.Query2.FieldByName('Neirong')).SaveToFile('E:\qtemp.eqt');
     self.Query2.Prior ;
     TBlobField(self.Query2.FieldByName('Neirong')).SaveToFile('E:\qtemp1.eqt');

end;
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/29 17:36:23
1楼: 同样还是Blob字段的问题,把文件内容保存到blob里面去,代码如下
procedure TForm1.Table_Add_Recored(const about, beizhu, name,
  filename: string);
begin
    self.Table1.Open ;
    self.Table1.Append;
    self.Table1.FieldByName('About').AsString :=about;
    self.Table1.FieldByName('Beizhu').AsString :=beizhu;
    self.Table1.FieldByName('Xinming').AsString :=name;
    self.Table1.FieldByName('Filename').AsString :=ExtractFileName(Filename);
    self.Table1.FieldByName('Upload_Date').AsDateTime :=now();
    TMemoField(self.Table1.FieldByName('Neirong')).LoadFromFile(filename);
    self.Table1.Post;
    self.Table1.Close;
end;
在文件比较小的时候没有任何问题,文件大点,如1M就提示invaild blob length,
我用的是MySQL5+MyODBC5+Delphi7,可是Mysql5里longblob最大能保存4G?为什么1M的文件就出错?
----------------------------------------------
-
作者:
男 fcwbad89 (fcwbad89) ★☆☆☆☆ -
盒子活跃会员
2008/8/29 21:48:58
2楼: 用流加载,然后用随便的字符串或者二进制压缩保存,取出也一样
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/31 9:51:00
3楼: 查了一下
procedure TBlobField.LoadFromFile(const FileName: string);
var
  Stream: TStream;
begin
  Stream := TFileStream.Create(FileName, fmOpenRead);
  try
    LoadFromStream(Stream);   //从此处可以看出读文件和读流是一样的效果
  finally
    Stream.Free;
  end;
end;

procedure TBlobField.LoadFromStream(Stream: TStream);
begin
  with DataSet.CreateBlobStream(Self, bmWrite) do
  try
    CopyFrom(Stream, 0);
  finally
    Free;
  end;
end;

我用流试验了一下,问题依旧
问题应该出在别的地方
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/2 9:24:55
4楼: 我google一下,大多用我这样的方法的人都碰到了这样的问题,
有人建议用ADO,经过我测试,完全可行,试验最大到16M都没有问题,
问题解决了,估计是BDE里面做了设置,所以上面的设置不起作用
----------------------------------------------
-
作者:
男 tintin1943 (零输好) ★☆☆☆☆ -
盒子活跃会员
2008/9/6 22:08:06
5楼: BDE默认的Blob字段,大小为32K左右,你要到BDE管理平台去修改参数。
不过,个人建议你使用SQL DIRECT/UNIDAC、zeosdb,都比ADO和BDE强悍很多。
----------------------------------------------
不喧哗 自有声 心静 思远 志行千里
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 8:17:19
6楼: 同意楼上说的,BDE默认的Blob字段,大小为32K左右,你要到BDE管理平台去修改参数,
不过我对SQL DIRECT/UNIDAC、zeosdb都不了解,先google一下,然后不懂再请教您
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 14:42:44
7楼: BDE的确设置了BLOB SIZE的大小,且在BDE里面不能修改,不知道怎么修改?
此帖子包含附件:
JPEG 图像
大小:56.1K
----------------------------------------------
-
作者:
男 reger (reger) ★☆☆☆☆ -
普通会员
2008/9/12 19:38:17
8楼: 不要用BDE,用ADO就没问题了
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS