先看kbmMW 5.07.00试用笔记,再继续下面的内容。

1.kbmMWConfiguration自动备份配置文件的问题还没有修正。

下面是以前写过的内容,再一次在新闻组中提出这个问题:

kbmMW提供一个强大的配置信息管理对象,前期译过这个对象的介绍,在使用过程中,发现一个问题, 就是TkbmMWCustomConfigurationStorage.BackupMaxCount属性,当设置为0时,也会生成配置信息的备份文件,在最新的kbmMW 5.05.11版本中,每运行一次就生成一个配置文件,对此,修正了代码。

打开单元文件 kbmMWGlobal,找到下面这个方法:

function kbmMWBackupFile,
....
if not FileExists(AFile) then
begin
Result:=AFile;
exit;
end;
if AMaxBackups<= then//判断AMaxbackups来决定是否生成备份文件:
begin
Result:=AFile;
exit;
end;
...
 
2018-7-28:作者终于度完假,回复说下一版本修正,小时0,不备份,等于0,无限备份。
 
2.TkbmMWConfigurableObject不支持跨平台。(5.08中解决了)
在新闻组中提了Issue of TkbmMWConfigurableObject,今天测试发现:
  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。

为配置对象重载AfterConstructionBeforeDestruction方法,实现自动保存与读取配置对象!

  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!

 
3.在客户端利用事务提交数据时产生stream read error异常:
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试用笔记的更多相关文章

  1. kbmMW 5.07.00试用笔记

    在kbmMW 5.06.20试用笔记中遇到的问题,在这个版本中,基本都解决了.但还是发现修正后存在的小问题及新问题: 1.Resolve返回值错误 当提交的ClientQuery是执行一条sql语句, ...

  2. kbmmw 5.06.20 发布

    经过1个多月的测试,终于发布正式版. 5.06.20 July 11 2018           Important notes (changes that may break existing c ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. CentOS 7 mini 试用笔记

    CentOS 7 mini 试用笔记 安装过程中,网卡是默认关闭的,要手动打开. 安装好以后,查看IP地址:# ip addr----------------------1: lo: 本地回环2: e ...

  5. 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 ...

  6. kbmMW 5.10.01试用报告

    1.FileClient.SameFile 调用这个方法,当本地文件不存在时,会一直等待.跟踪代码,发现: function TkbmMWCustomFileClient.SameFileEx(Loc ...

  7. kbmmw 5.06.00 beta 发布

    原生.高效.可扩展.跨平台通信库来了. we are happy to announce v5.06.00 BETA of our popular middleware for Delphi and  ...

  8. iOS阶段学习第20天笔记(MRC内存管理)

    iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效      OC中采用 ...

  9. uniGUI试用笔记(十三)调用WebService

    今天尝试用uniGUI做Web服务器,调用应用服务器的WebService,遇到些问题记录下来备忘. 1.对WebService的调用同一般App程序,只是注意如果WebService的执行时间较长, ...

随机推荐

  1. Ubuntu上 配置Eclipse:安装CDT

    在最新的 Ubuntu Kylin 16.04 中安装了eclipse,在纠结了很久的网络问题之后,开始了eclipse的配置以便在上面运行ns3. 在官方网站上安装完 eclipse LUNA 之后 ...

  2. MVC ---- 如何扩展方法

    先定义一个扩展类: public static class StringExtend { //扩展一个string的方法 public static bool IsNullOrEmpty(this s ...

  3. ubuntu 14.04 安装 gflags

    1.下载 git clone https://github.com/gflags/gflags 2.编译 进入源码目录(即gflags文件夹) cmake . make -j 24 sudo make ...

  4. ubuntu 14.04 server(amd64) 安装ros indigo

    1.添加软件源(添加了正确的软件源,操作系统就知道去哪里下载程序,并根据命令自动安装软件) sudo sh -c 'echo "deb http://packages.ros.org/ros ...

  5. Qt与FFmpeg联合开发指南(一)——解码(1):功能实现

    前言:对于从未接触过音视频编解码的同学来说,使用FFmpeg的学习曲线恐怕略显陡峭.本人由于工作需要,正好需要在项目中使用.因此特地将开发过程总结下来.只当提供给有兴趣的同学参考和学习. 由于FFmp ...

  6. 如何查看DNS?

    查看dns服务ip:    命令: ipconfig/all  查看dns缓存:    命令:ipconfig/displaydns     强制更新缓存:    命令:ipconfig /flush ...

  7. Freemarker 简介

    1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效果就不会再发生变化(除非你修改 ...

  8. Java 主要特性

    Java 有下面的一些主要特性. 面向对象 在 Java 中,所有的都是对象.正式因为 Java 基于对象模型,所以 Java 更加容易进行扩展. Java语言提供类.接口和继承等面向对象的特性,为了 ...

  9. H5表单基础知识(二)

    表单新增属性 <!--<input type="text" class="name" />--> <!-- placeholder ...

  10. FastDFS install

    Version: os: centos7 x64 FastDFS: 5.05 libfastcommon: latest 1. dwonload libfastcommon https://githu ...