三层模式下一个插入数句库声音文件的问题?

linkyou 2005-02-25 11:33:46
这是一个监听程序,就是将电话录音的文件插入到数据库当中,这里录音文件统一存放在一个文件夹里。我使用timer控件一旦发现存放录音文件的文件夹里有录入数据库的文件,那么就往数据库里插入数据。问题是插入几条记录以后,就会出现程序没有响应的情况。插入一条是没有问题的,就是插入几条以后就会出现这种问题,希望高手能够指点,代码如下,出现应用程序无法响应的地方在调用服务器端代码时。
客户端:
procedure TfrmTransCallrec.Timer1Timer(Sender: TObject);
var i: Integer;
j: Integer;
F: TextFile;
S,tempStr: String;
Strm: TMemoryStream;
iTelRec: OleVariant;
Err: WordBool;
Msg: WideString;
FSearchRec : TSearchRec;
FindResult: Integer;
// DDTList,WAVList: TStringList;
CurTelRec : TTelRec;
iCount,jCount: Integer;
ADDFILEName: STring;
begin
FindResult := FindFirst('.\RecordFile\'+'*.DDT',faAnyFile,FSearchRec);
ADDFILEName := RightStrb(Lowercase(FSearchRec.Name),'.',0);
FindClose(FSearchRec);
if FileExists('.\RecordFile\'+ADDFILEName+'.Wav') then
begin
Strm:=TMemoryStream.Create;
Strm.Clear;
Strm.Position := 0;
Try
tempStr :='.\RecordFile\'+ADDFILEName+'.ddt';
AssignFile(F, tempStr);
Reset(F);
Readln(F,S);
CurTelRec.Number := RightStrb(S,'|',0);
CurTelRec.iO := 0;
if BetweenStr(s,'|','&') = '来电' then
CurTelRec.iO := 0
else if BetweenStr(s,'|','&') = '去电' then
CurTelRec.iO := 1;
CurTelRec.Time := BetweenStr(S,'&','$');
CurTelRec.FileName := ADDFILEName +'.Wav';
CurTelRec.Period := StrtoInt(BetweenStr(S,'$','^'));
CurTelRec.Line := StrtoInt(RightStrb(S,'^',1));
CloseFile(F);
Strm.LoadFromFile('.\RecordFile\'+CurTelRec.FileName);
StreamToVariant(Strm,iTelRec);
//添加到数据库
with CurTelRec do
begin
DataModule1.sktcnn.AppServer.SaveCallRec //这里出现错误,多次调用以后程序 (Number,Time,Period,iO,Line,iTelRec,Err,MSg); //停在这里
if not Err then
begin
DeleteFile('.\RecordFile\'+CurTelRec.FileName);
DeleteFile(tempStr);
end;
end;
Strm.Free;
Strm := nil;
Except
Strm.Free;
Strm := nil;
CloseFile(F);
end;
end;
end;
服务器端:
var
nPicStream: TMemoryStream;
I : integer;
begin
adoQCallRec.SQL.Text := 'Insert into CallRec (' +
'CR_TIME,CR_RTEL,CR_PERIOD,CR_IO,CR_Line,CR_WAV) values (''' +
cTime + ''',''' +
cNumber + ''',' +
Inttostr(cPeriod) + ',' +
Inttostr(cIO) + ',' +
inttostr(cLine) + ' ,'+' :rdfile)';
nPicStream:=TMemoryStream.Create;
nPicStream.Clear;
VariantToStream(cTellRec,nPicStream);
nPicStream.Position := 0;
adoQCallRec.Parameters.ParamByName('rdfile').LoadFromStream(nPicStream,ftVarBytes);
Try
I := adoQCallRec.ExecSQL;
if i <=0 then
begin
vErr:= True;
vMsg:= '保存出错!' ;
end;
Except
on E:Exception do
begin
vErr := True;
vMsg := '打开电话记录数据出错!';
nPicStream.Free;
nPicStream := NIl;
Exit;
end;
end;
vErr := False;
nPicStream.Free;
nPicStream := nil;
// if adoQCallRec.ExecSQL > 0 then
// begin

end;
...全文
78 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
redmoon_line 2005-02-25
  • 打赏
  • 举报
回复
关注

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧