导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2008/8/29 17:22:13
标题:
加入我的收藏
楼主:
想把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;
----------------------------------------------
-
作者:
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的文件就出错?
----------------------------------------------
-
作者:
2008/8/29 21:48:58
2楼:
用流加载,然后用随便的字符串或者二进制压缩保存,取出也一样
----------------------------------------------
-
作者:
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; 我用流试验了一下,问题依旧 问题应该出在别的地方
----------------------------------------------
-
作者:
2008/9/2 9:24:55
4楼:
我google一下,大多用我这样的方法的人都碰到了这样的问题, 有人建议用ADO,经过我测试,完全可行,试验最大到16M都没有问题, 问题解决了,估计是BDE里面做了设置,所以上面的设置不起作用
----------------------------------------------
-
作者:
2008/9/6 22:08:06
5楼:
BDE默认的Blob字段,大小为32K左右,你要到BDE管理平台去修改参数。 不过,个人建议你使用SQL DIRECT/UNIDAC、zeosdb,都比ADO和BDE强悍很多。
----------------------------------------------
不喧哗 自有声 心静 思远 志行千里
作者:
2008/9/9 8:17:19
6楼:
同意楼上说的,BDE默认的Blob字段,大小为32K左右,你要到BDE管理平台去修改参数, 不过我对SQL DIRECT/UNIDAC、zeosdb都不了解,先google一下,然后不懂再请教您
----------------------------------------------
-
作者:
2008/9/9 14:42:44
7楼:
BDE的确设置了BLOB SIZE的大小,且在BDE里面不能修改,不知道怎么修改?
此帖子包含附件: 大小: 56.1K
----------------------------------------------
-
作者:
reger (reger)
★☆☆☆☆
-
普通会员
2008/9/12 19:38:17
8楼:
不要用BDE,用ADO就没问题了
----------------------------------------------
-