procedure TForm1.Button1Click(Sender: TObject);
var
    st:tmemorystream;
begin
    aq1.SQL.Text:='select id,wav from wen where id=1';
    aq1.Active:=true;    if aq1.FieldValues['id']=null then aq1.Insert else aq1.Edit;    st:=tmemorystream.Create;
    st.Clear;
    st.LoadFromFile(ExtractFilePath(paramstr(0))+'1.wav');    tblobfield(Aq1.FieldByName('wav')).LoadFromStream(st); //写音频流到数据库    st.Free;
    aq1.Post;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
    st:tmemorystream;
begin
    st:=tmemorystream.Create; //
    st.Clear;
    aq1.SQL.Text:='select wav from wen where id=1';
    aq1.Active:=true;    tblobfield(Aq1.FieldByName('wav')).SaveToStream(st); //读数据音频到流    //我的问题在这里开始------------------------------------------------    sndplaysound(pchar(st),SND_MEMORY and SND_ASYNC);     //如何才能播放呢?如何才能播放呢?如何才能播放呢?我快疯了!!! 
    //当然不写入临时文件,在内存中播放声音的其它的方法也可以,拜托了!!!
    //我的问题结束,谢谢----------------------------------------------
    st.Free;
end;

解决方案 »

  1.   

    只能提些小建议,  pchar(st) 这个用法是楼主自创的么,不觉得奇怪么
      

  2.   

    char(st)试试?
      

  3.   

    //供参考
    var hFind, hRes: THandle;
          Song: PChar;
    begin
      hFind := FindResource(HLib, PChar(SoundName), 'WAVE');
      if (hFind <> 0) then begin
        hRes := LoadResource(HLib, hFind);
        if (hRes <> 0) then begin
          Song := LockResource(hRes);
          if Assigned(Song) then SndPlaySound(Song, snd_ASync or snd_Memory);
          UnlockResource(hRes);
        end;
        FreeResource(hFind);
      end;
      

  4.   

    pchar(st.Memory)
      

  5.   

    播放文件不就得了。
      tblobfield(Aq1.FieldByName('wav')).SaveTofile('d:\a.wav'); 
      PlaySound('d:\a.wav',0, SND_ASYNC);