我的同事用类似的方法在PB中实现过这样的功能。但是我想请教一下,在DELPHI中就没有别的方法一次性完成存入么。

解决方案 »

  1.   

    看来你不要用bde驱动数据库,可能他比较旧,对数据库的新特性不支持把。改用ado吧
      

  2.   

    把bde 别名中的blob size 改大些 默认只有64k
      

  3.   

    反复调用
    第一次insert,以后update
      

  4.   

    我也曾经遇到过类似的问题,当时我的BLOB只能存到3M,再大就不行了。
    原因还是在BDE里面。解决方法如下:
    在BDE ADMINISTRATOR的CONFIGURATION页里,打开到SYSTEM的INIT里面,其中有个MAXBUFSIZE选择项,将其改为你想存取数据的大小就可以解决这个问题,DATABASE页的BLOB SIZE也最好改一下。如果你用的是DB2要把DB2的性能中的query heap也要设置成你想存放数据的大小,否则会报“堆溢出”。
    这样的话,问题就可以解决了。肯定可以,因为我试过的。
      

  5.   

    blob size 改成10240试试。你的一个表里面有几个BLob型字段?
    Oracle表只支持一个Blob字段的。
      

  6.   

    试了几天,通过设置BLOB SIZE的方法还是没有获得成功。而且考虑到在客户端需要做一些设置,比较麻烦(主要用户大多属于电脑初级水平)。所以决定使用将一个大文件切割成若干小与32K小文件的方法。但现在新的问题是,切割完的文件拼装不回去了。:(
    痛苦呀,谁知道如何将一组小文件组合成一完整的大文件。切割的代码如下procedure TForm1.Button1Click(Sender: TObject);
    var m,n,j:tmemorystream;
        s:string;
        s1,s2:string;
    begin
         if OpenDialog1.Execute then
            begin
                 m:=tmemorystream.Create;
                 m.LoadFromFile(OpenDialog1.filename);
                 edit1.text:=inttostr(m.Size);
                 //m.Free;
                 setlength(s,m.size);
                 n:=tmemorystream.Create;
                 j:=tmemorystream.Create;
                 n.SetSize(m.size-32768);
                 j.setsize(32768);
                 //move(m.memory^,pchar(s)^,m.size);
                 move(m.memory^,j.memory^,32768);
                 //m.Position:=m.Position+32768;
                 edit2.Text:=inttostr(m.position);
                 move(m.memory^,n.memory^,m.size-32768);
                 edit2.text:=inttostr(n.size);             j.SaveToFile('c:\001.swf');
                 n.SaveToFile('c:\002.swf');
                 m.free;
                 n.Free;
                 j.free;
            end;
    end;
      

  7.   

    var
        m,n,j:tmemorystream;
        i,k:integer;
    begin
       m:=tmemorystream.Create;
       m.LoadFromFile('c:\001.txt');
       n:= tmemorystream.Create;
       n.LoadFromFile('c:\002.txt');
       j:=tmemorystream.Create;
       i:=m.Size;
       k:=n.Size;
       j.SetSize(i+k);
       move(m.memory^,j.memory^,m.Size);
       move(n.memory^,j.memory^,m.Size);
       j.SaveToFile('c:\test.txt');
       showmessage('OK!');