kbmMW 5.07.00试用笔记
在kbmMW 5.06.20试用笔记 中遇到的问题,在这个版本中,基本都解决了。但还是发现修正后存在的小问题及新问题:
1.Resolve返回值错误
当提交的ClientQuery是执行一条sql语句,如Insert,当发生错误时,如主键重复,则Resolve无法返回正确的结果。具体情况就是在客户端显示异常信息。
q1.Query.Text:='Insert into t1 (fid,fname) values (''1000'',''aaaa'')'; //q2.Query.Text:='Insert into t2 (fid,fcustomername) values (''1'',''aaaa'')'; tx.StartTransaction; tx.TransactionResolver:=kbmMWClientTransactionResolver1; try ///q1.Execute(tx); //q2.Execute(tx); tx.AddDataset(q1); tx.AddDataset(q2); r:=tx.Resolve;//抛出异常,返回结果不对 ....
后记:5.08依旧存在这个问题
2.SameFile
比较文件是否相同,第一次运行正常,如果继续执行一次,则结果错误。跟踪了一下,发现还是存在5.06.20中的问题,WaitRun不等待线程执行完,直接跳到下一句代码。
procedure Tmainform.Button5Click(Sender: TObject); begin if kbmMWFileClient1.SameFile('.\1.png','1.png') then ShowMessage('File is same.')//显示这句,比较结果是对的 else ShowMessage('File not same.'); if kbmMWFileClient1.SameFile('.\1.png','1.png') then ShowMessage('File is same.') else ShowMessage('File not same.');//执行这句,比较结果是错的 end;
后记:5.08.10解决!
3.kbmMWTCPServerTransport
kbmMW 5.07.00基于ScrossSocket,实现新的Transport,网友遇到从kbmMWTCPIPIndyServerTransport换成kbmMWTCPServerTransport后,遇到问题。我测试过程如下:
procedure Tmainform.Button6Click(Sender: TObject); var i:integer; begin // 删除所有记录 kbmMWClientQuery1.Close; kbmMWClientQuery1.Open; kbmMWClientQuery1.DeleteRecords; kbmMWClientQuery1.Resolve; for i := 1 to 10000 do begin Label3.Caption:=i.ToString; application.ProcessMessages; kbmMWClientQuery1.AppendRecord([i, i.ToString]); end; kbmMWClientQuery1.Resolve; end;
服务端利用TCPServerTransport时,一次性提交1000条记录成功,变成10000条记录失败;换成TcpipIndyServerTransport,提交10000条记录成功。
这与xalion所说相符,他说在封装CrossSocket时遇到:就是数据包不能太大。
5.08解决
4.rest上传文件服务
测试xalion做的rest服务器,发现无法上传文件,还是xalion威武,在TkbmMWHTTPMimeHeaderValue.GetDelimiter方法中,增加一行搞定:
function TkbmMWHTTPMimeHeaderValue.GetDelimiter(const AName:string):char; begin if (AName=KBMMW_HTTP_REQUEST_HEADER_AcceptDatetime) or (AName=KBMMW_HTTP_REQUEST_HEADER_Date) or (AName=KBMMW_HTTP_REQUEST_HEADER_Expires) or (AName=KBMMW_HTTP_REQUEST_HEADER_Cookie) or (AName=KBMMW_HTTP_REQUEST_HEADER_IfModifiedSince) or (AName=KBMMW_HTTP_REQUEST_HEADER_IfUnmodifiedSince) or (AName=KBMMW_HTTP_REQUEST_HEADER_IfRange) or (AName=KBMMW_HTTP_REQUEST_HEADER_TE) or (AName=KBMMW_HTTP_RESPONSE_HEADER_SetCookie) or (AName=KBMMW_HTTP_RESPONSE_HEADER_Date) or (AName=KBMMW_HTTP_RESPONSE_HEADER_Expires) or (AName=KBMMW_HTTP_RESPONSE_HEADER_RetryAfter) or (AName=KBMMW_HTTP_RESPONSE_HEADER_LastModified) or (AName=KBMMW_HTTP_RESPONSE_HEADER_ContentType) or (AName=KBMMW_HTTP_RESPONSE_HEADER_ContentDisposition)//增加这行 then Result:=';' else Result:=','; end;
后记:5.12解决,具体在哪一个版本中未知。
5.TkbmMWProcess.CreateProcess调用一个外部EXE出地址错 误:
procedure Tmainform.Button1Click(Sender: TObject); begin //ShellExecute(0, 'open', PWideChar(String('SyncLocalDateTime.exe')),'',nil,SW_SHOWNORMAL); //uses Winapi.ShellAPI TkbmMWProcess.CreateProcess('.\SyncLocalDateTime.exe',''); end;
利用ShellExecute调用没有问题,换成CreateProcess则产生地址错 误,已经发给作者。
作者回复很快,确认并在即将发布的版本中修正。另外我进一步测试,调用windows的CMD也是同样的错误。
5.08解决
procedure Tmainform.Button1Click(Sender: TObject); begin // TkbmMWProcess.CreateProcess('.\Test.exe',''); TkbmMWProcess.CreateProcess('c:\windows\system32\cmd.exe',''); end;
6.kbmMWTCPServerTransport
这是作者新加的基于ScrossSocket修改的Transport,要启用他,需要在inc文件中增加