我在做一个多媒体数据库时,出现了一个比较麻烦的问题,问过一些人到现在都还没解决,眼看毕业设计就快结束了,我真的都快给急死了。
我用的是paradox做数据库,图片和AVI文件都用的是BLOB格式,存储问题已经都解决了。现在就是要把数据库中AVI文件字段的AVI文件释放出来,并把这个文件用mediaplayer播放,我想过生成零时文件,没做成,后面又听从别人的意见把AVI字段的AVI文件用流式对象保存到硬盘上播放,但是现在却不能创建文件,代码如下忘指教!!!!procedure TForm1.FormActivate(Sender:TObject) ;
begin
Form2.ShowModal; // ÏÔʾÈí¼þ·âÃæ
end ;procedure TForm1.N87Click(Sender: TObject);
varaa:tmemorystream;
begin
     form3.showmodal;
   if form3.ModalResult=mrok then
     begin
       table1.Open;
       table1.AppendRecord([form3.Edit1.Text,form3.Edit2.Text,form3.Edit3.Text,form3.image1.Picture,nil]);
       aa:=tmemorystream.Create;
       aa.LoadFromFile(form3.FileListBox1.FileName);
      table1.Open;
     table1.Edit;
       (table1.FieldByName('AVIÎļþ')as tblobfield).LoadFromStream(aa);
     
       end;
    end;
procedure TForm1.N88Click(Sender: TObject);
begin
   if application.MessageBox('ÊÇ·ñɾ³ýµ±Ç°¼Ç¼£¿','ɾ³ýÈ·ÈÏ',
                         mb_okcancel)=idok then
                        table1.Delete;end;procedure TForm1.N89Click(Sender: TObject);
begin
 if table1.State=dsbrowse then table1.Edit;
  table1.Post;
end;procedure TForm1.N80Click(Sender: TObject);
begin
  aboutbox.ShowModal;
end;procedure TForm1.DBImage1Click(Sender: TObject);
var
filestream:tmemorystream ;
begin
    filestream:=tmemorystream.create;
    (table1.fieldbyname('AVIÎļþ') as tblobfield).savetostream(filestream);
    filestream.savetofile('d:\a.avi');
    mediaplayer1.FileName:='d:\a.avi';
    mediaplayer1.Open;
    mediaplayer1.Play;
    filestream.free;
    if mediaplayer1.Mode=mpstopped then
    begin
      mediaplayer1.Free;
      deletefile('d:\a.avi');
    end;  end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if mediaplayer1.Mode=mpplaying then
    begin
     form1.ScrollBar1.Position:=form1.MediaPlayer1.Position;
    end;
 end;end.

解决方案 »

  1.   

    好象这一段有问题:
    procedure TForm1.N87Click(Sender: TObject);
    varaa:tmemorystream;
    begin
         form3.showmodal;
       if form3.ModalResult=mrok then
         begin
           table1.Open;
           table1.AppendRecord([form3.Edit1.Text,form3.Edit2.Text,form3.Edit3.Text,form3.image1.Picture,nil]);
           table1.close; //修改   
           aa:=tmemorystream.Create;
           aa.LoadFromFile(form3.FileListBox1.FileName);
          table1.Open;   //如果不用上面修改的语句,把这句删除。
         table1.Edit;
           (table1.FieldByName('AVIÎļþ')as tblobfield).LoadFromStream(aa);
           table1.post;  //再添加上这一句 
           end;
        end;
      

  2.   

    你能不能帮我看看这段有什么问题procedure TForm1.DBImage1Click(Sender: TObject);
    var
    filestream:tmemorystream ;
    begin
        filestream:=tmemorystream.create;
        (table1.fieldbyname('AVIÎļþ') as tblobfield).savetostream(filestream);
        filestream.savetofile('d:\a.avi');
        mediaplayer1.FileName:='d:\a.avi';
        mediaplayer1.Open;
        mediaplayer1.Play;
        filestream.free;
        if mediaplayer1.Mode=mpstopped then
        begin
          mediaplayer1.Free;
          deletefile('d:\a.avi');
        end;  end;
      

  3.   

    其实这个问题应该是这样的,在文件还没有创建完成时,我就已经开始在调用该文件,所以就不能让文件的创建过程完成,所以程序会提示出错,解决的方法是,在mediaplayer的对象观察器中的filename中找到你要播放的文件,而不能将文件在程序中调用!!!!!