kbmMW 5.06.20试用笔记
1.kbmMWConfiguration自动备份配置文件的问题还没有修正。
下面是以前写过的内容,再一次在新闻组中提出这个问题:
kbmMW提供一个强大的配置信息管理对象,前期译过这个对象的介绍,在使用过程中,发现一个问题, 就是TkbmMWCustomConfigurationStorage.BackupMaxCount属性,当设置为0时,也会生成配置信息的备份文件,在最新的kbmMW 5.05.11版本中,每运行一次就生成一个配置文件,对此,修正了代码。
function kbmMWBackupFile,
....
if not FileExists(AFile) then
begin
Result:=AFile;
exit;
end;
if AMaxBackups<= then//判断AMaxbackups来决定是否生成备份文件:
begin
Result:=AFile;
exit;
end;
...
TSysConnectionParam = class//(TkbmMWConfigurableObject)
private
[kbmMW_Config('QueryServiceVersion',mwcdReadWrite)]
FQueryServiceVersion: string; [kbmMW_Config('QueryServiceName',mwcdReadWrite)]
FQueryServiceName: string; [kbmMW_Config('SessionName',mwcdReadWrite)]
FSessionName: string; [kbmMW_Config('FileServiceVersion',mwcdReadWrite)]
FFileServiceVersion: string; [kbmMW_Config('FileServiceName',mwcdReadWrite)]
FFileServiceName: string; public
property SessionName: string read FSessionName write FSessionName;
property QueryServiceName: string read FQueryServiceName write FQueryServiceName;
property QueryServiceVersion: string read FQueryServiceVersion write FQueryServiceVersion;
property FileServiceName:string read FFileServiceName write FFileServiceName;
property FileServiceVersion:string read FFileServiceVersion write FFileServiceVersion;
end;
这个TSysConnectionParam不从TkbmMWConfigurableObject继承,否则在android平台,出这个错误:Type (TSysConnectionParam@6260DC60) not registered as a known type.
说明TkbmMWConfigurableObject还是存在跨平台的问题。
既然不能从TkbmMWConfigurableObject继承,怎么实现一个自动读取与保存的配置对象呢,按Configuration REST easy with kbmMW #7。
为配置对象重载AfterConstruction与BeforeDestruction方法,实现自动保存与读取配置对象!
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
{ TSysConnectionParam }
procedure TSysConnectionParam.AfterConstruction;
begin
inherited;
Config.ReadConfig(Self);
end;
procedure TSysConnectionParam.BeforeDestruction;
begin
Config.WriteConfig(Self);
inherited;
end;
现在,TSysConnectionParam的实例在建立与释放时,就能自动读取与保存参数,在Win32及Android下测试通过。
虽然TkbmMWConfigurableObject存在跨平台问题,但用上面方法来跳过,也是很好的方案,毕竟可以跨平台使用kbmMWConfiguration Frame!
procedure Tmainform.Button3Click(Sender: TObject);
begin kbmMWClientQuery1.Close;
kbmMWClientQuery2.Close; kbmMWClientQuery1.Open;
kbmMWClientQuery2.Open; kbmMWClientQuery1.AppendRecord([,'']);
kbmMWClientQuery1.AppendRecord([,'']);//t1表在数据库中主键重复错 kbmMWClientQuery2.AppendRecord([,'']);
kbmMWClientQuery2.AppendRecord([,'']);//t2表在数据库中主键重复错 kbmMWClientTransactionResolver1.Resolve([kbmMWClientQuery1,kbmMWClientQuery2]); end;
上面是测试代码,同时提交两个ClientQuery,每个表都有主键重复错误,造成提交失败的场景,这时候,客户端会产生异常:stream read error.
已经反馈到官方新闻组,但作者还让我写个demo,已经发给他,等处理。注意:这个问题在上一版本中就存在。
4.更新主键遇到的问题
这个是朋友在学习过程中遇到的,整理出测试项目,大体情况是这样的:
现在有表t1,FID是主键,假设有如下记录
FID FName
1 1
2 2
把第一条记录,FID改成2,提交,这时候主键重复,提交失败,这时候kbmMW的工作结果是对的
FID FName
1 1
2 2
现在把第一条记录的FID改成3,提交,这时候没有了主键重复问题,提交成功,这时候kbmMW的工作结果也是对的。
FID FName
3 1
2 2
现在把第一条记录的任务字段改变值,如FName改成2,提交失败,这个结果不对的。问题就在这里。
FID FName
3 2
2 2
这是按上面的测试方法写的代码,重显问题:
procedure Tmainform.Button4Click(Sender: TObject);
begin //这是一个bug Label1.Caption := ''; Memo1.Lines.Clear; // 删除所有记录
kbmMWClientQuery1.Close;
kbmMWClientQuery1.Open;
kbmMWClientQuery1.DeleteRecords;
kbmMWClientQuery1.Resolve; kbmMWClientQuery1.AppendRecord([, '']);
kbmMWClientQuery1.AppendRecord([, '']);
kbmMWClientQuery1.Resolve; // keyfield
//
// 1,2 2,2 3,2 3,1
// 2,2 2,2 2,2 2,2
// error ok error kbmMWClientQuery1.Close;
kbmMWClientQuery1.Open; kbmMWClientQuery1.First;
kbmMWClientQuery1.Edit;
kbmMWClientQuery1.FieldByName('fid').AsInteger := ;//主键重复
if not kbmMWClientTransactionResolver1.Resolve([kbmMWClientQuery1]) then
begin
DataSource3.DataSet := kbmMWClientQuery1.InfoTable;
Label1.Caption := kbmMWClientQuery1.InfoTable.FieldByName('kbmMW_ErrorMessage').AsString;
Memo1.Lines.Add('Step 1: Modify the primary key to generate an error, the submission failed,it''s right. '+kbmMWClientQuery1.InfoTable.FieldByName('kbmMW_ErrorMessage').AsString);
end; kbmMWClientQuery1.First;
kbmMWClientQuery1.Edit;
kbmMWClientQuery1.FieldByName('fid').AsInteger := ;//设置主键不重复 if not kbmMWClientTransactionResolver1.Resolve([kbmMWClientQuery1]) then
begin
DataSource3.DataSet := kbmMWClientQuery1.InfoTable;
Label1.Caption := kbmMWClientQuery1.InfoTable.FieldByName('kbmMW_ErrorMessage').AsString;
Memo1.Lines.Add('Step 2: Modify the primary key to resolve the error and submit successfully,it''s right. '+kbmMWClientQuery1.InfoTable.FieldByName('kbmMW_ErrorMessage').AsString);
end
else
begin
Memo1.Lines.Add('Step 2: step 2:Modify the primary key to resolve the error and submit successfully,it''s right.');
Label1.Caption := 'Resolve OK.';
end; kbmMWClientQuery1.First;
kbmMWClientQuery1.Edit;
kbmMWClientQuery1.FieldByName('fname').AsString := '';//无法修改这条记录了!这是bug. if not kbmMWClientTransactionResolver1.Resolve([kbmMWClientQuery1]) then
begin
DataSource3.DataSet := kbmMWClientQuery1.InfoTable;
Label1.Caption := kbmMWClientQuery1.InfoTable.FieldByName('kbmMW_ErrorMessage').AsString;
Memo1.Lines.Add('Step 3: Modify any field and cannot submit,it''s bug. '+kbmMWClientQuery1.InfoTable.FieldByName('kbmMW_ErrorMessage').AsString);
end
else
begin
Label1.Caption := 'Resolve OK.';
end; end;
5.洞主测试rest上传文件服务需要修正下面两个方法,并已经提交给作者,等待修正。
function TkbmMWHTTPMultiPart.GetAsBytes:TBytes;
var
p:PByte;
i:integer;
begin
SetLength(Result,FDataLength);
p:=PByte(FOwner.FStream.Memory);
inc(p,FDataOfs);
Move(p^,Result[],FDataLength); end; function TkbmMWHTTPMultiPart.GetAsString:string;
begin
Result:=TkbmMWPlatformMarshal.UTF8Decode(GetData,FDataLength);
end;
这是xalion写的上传文件服务的例子,必须学习了!
6.Scheduler存在的问题
WaitRuns: FileService的SameFile方法,不等取得本地文件的CheckSum,造成执行结果错误,这个问题在5.04.30解决过,不知为何又回来了,问题出在WaitRuns上,不等Scheduler执行。
SynchronizedAfterRun:利用Scheduler在线程中执行一个查询,然后在SynchronizedAfterRun使用查询回来的数据集,偶尔会出现找不到字段的问题。感觉与WaitRuns存在的问题有关系。
7.Q友冰雨反应Resolve问题
KbmMW V5.06.2,修改数据,kbmwclntrnsctnrslvrTR.Resolve([kbmwclntqryMain]),保存的时候,变成insert语句,导致主键重复。KbmMW V5.06.1 beta版本已经发现了这个问题,退回前一个正式版,目前正常了。
kbmMW 5.06.20试用笔记的更多相关文章
- kbmMW 5.07.00试用笔记
在kbmMW 5.06.20试用笔记中遇到的问题,在这个版本中,基本都解决了.但还是发现修正后存在的小问题及新问题: 1.Resolve返回值错误 当提交的ClientQuery是执行一条sql语句, ...
- kbmmw 5.06.20 发布
经过1个多月的测试,终于发布正式版. 5.06.20 July 11 2018 Important notes (changes that may break existing c ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
- CentOS 7 mini 试用笔记
CentOS 7 mini 试用笔记 安装过程中,网卡是默认关闭的,要手动打开. 安装好以后,查看IP地址:# ip addr----------------------1: lo: 本地回环2: e ...
- android权限大全转http://www.cnblogs.com/classic/archive/2011/06/20/2085055.html
android权限大全转http://www.cnblogs.com/classic/archive/2011/06/20/2085055.html 访问登记属性 android.permission ...
- kbmMW 5.10.01试用报告
1.FileClient.SameFile 调用这个方法,当本地文件不存在时,会一直等待.跟踪代码,发现: function TkbmMWCustomFileClient.SameFileEx(Loc ...
- kbmmw 5.06.00 beta 发布
原生.高效.可扩展.跨平台通信库来了. we are happy to announce v5.06.00 BETA of our popular middleware for Delphi and ...
- iOS阶段学习第20天笔记(MRC内存管理)
iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效 OC中采用 ...
- uniGUI试用笔记(十三)调用WebService
今天尝试用uniGUI做Web服务器,调用应用服务器的WebService,遇到些问题记录下来备忘. 1.对WebService的调用同一般App程序,只是注意如果WebService的执行时间较长, ...
随机推荐
- Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)
不多说,直接上代码. 一共12列,我们只需提取有用的列:第二列(犯罪类型).第四列(一周的哪一天).第五列(具体时间)和第七列(犯罪场所). 思路分析 基于项目的需求,我们通过以下几步完成: 1.首先 ...
- json库的编译方法和vs2010中导入第三方库的方法
json库的编译方法和vs2010中导入第三方库的方法 一.去相应官网下载json.cpp文件 Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/ ...
- HDU 6121 Build a tree(完全K叉树)
http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:给你一颗完全K叉树,求出每棵子树的节点个数的异或和. 思路: 首先需要了解一些关于完全K叉树或满K叉 ...
- 【转载】非Lumia 950/XL机型 强行开启continuum教程
听说Windows 10 Mobile 的 Continuum 特性很长时间了,但是由于我自己的 Lumia 930 不在支持之列,一直没能体验到这个功能.今天在酷七看到了这篇文章,按文章所述的步骤进 ...
- poj 1986 Distance Queries 带权lca 模版题
Distance Queries Description Farmer John's cows refused to run in his marathon since he chose a pa ...
- Ubuntu14.04 libboost_program_options.so.1.54.0: cannot open shared object file: No such file or directory
macname@ubuntu:~/Desktop$ roslaunch blackrospack: error : cannot open shared object file: No such fi ...
- 一个很棒的Flutter学习资源列表
目录 文章 一开始 HOWTO文档 网站/博客 高级 视频 组件 演示 UI 材料设计 图片 地图 图表 导航 验证 文字和富文本 分析.流量统计 自动构建 风格样式 媒体 音频 视频 语音 存储 获 ...
- Vue项目骨架屏注入实践
相比于早些年前后端代码紧密耦合.后端工程师还得写前端代码的时代,如今已发展到前后端分离,这种开发方式大大提升了前后端项目的可维护性与开发效率,让前后端工程师关注于自己的主业.然而在带来便利的同时,也带 ...
- Java JDK5新特性-可变参数
2017-10-31 00:19:07 可变参数:定义方法的时候不知道该定义多少个参数 格式:修饰符 返回值类型 方法名(数据类型... 变量名){} 注意:这里的变量其实是一个数组 ...
- C#对实体进行JSON序列化时枚举的处理
实体类如下: public enum ESex { Boy, Girl } public class Person { public String Name { get; set; } public ...