增强Delphi.RemObject.DataAbstract的脚本功能:多数据库同时操作
我们知道,通过Schema,一个DataAbstracService对应一个数据库;一个服务器可以包含多个DataAbstracService,从而实现对多个数据库的操作。通过事件处理我们可以在一个DataAbstracService中去调用另一个DataAbstracService,从而实现同时操作多个数据库。目前在版本7.0.65中通过在Schema中写脚本还不能做到这一点。本人少量的改写了DataAbstract后,做到了这一点。下面是要修改的两个类定义:
1、修改uDAEcmaScriptWrappers单元文件中的TDAEcmaLDAWrapper类,添加两个方法:
function newLDA(serviceName: string): TDAEcmaLDAWrapper;
function executeCommand(commandName: string; parameters: variant): Integer;
改写下面的方法:
function ExecuteMethod(aMethodName: string; aParams: Variant): Variant; override;
procedure IntCreate;
具体实现:
function TDAEcmaLDAWrapper.newLDA(serviceName: string): TDAEcmaLDAWrapper;
var
Adapter: TDALocalDataAdapter;
begin
Adapter := TDALocalDataAdapter.Create(serviceName);
Adapter.SessionID := fLDA.SessionID;
Result := TDAEcmaLDAWrapperClass(ClassType).Create(Adapter);
end;
function TDAEcmaLDAWrapper.executeCommand(commandName: string; parameters: variant): Integer;
var
lParams, lOutParams: DataParameterArray;
begin
lParams := VariantToDataParameterArray(parameters);
Result := fLDA.ServiceInstance.ExecuteCommandEx(commandName, lParams, lOutParams);
lOutParams.Free;
end;
function TDAEcmaLDAWrapper.ExecuteMethod(aMethodName: string; aParams: Variant): Variant;
begin
......
// ============================================添加的代码
else
if aMethodName =
'newLDA' then begin
CheckParams(aMethodName,aParams,
);
Result := newLDA(aParams[
]).AsVariant;
end
else
if aMethodName =
'executeCommand' then begin
CheckParams(aMethodName,aParams,
);
Result := executeCommand(aParams[
], aParams[
]);
end
//==============================================
else begin
Result := inherited ExecuteMethod(aMethodName,aParams);
end;
end;
procedure TDAEcmaLDAWrapper.IntCreate;
begin
RegisterMethod(
'insert');
RegisterMethod(
'update');
RegisterMethod(
'remove');
RegisterMethod(
'discardChanges');
RegisterMethod(
'applyChanges');
RegisterMethod(
'selectSQL');
RegisterMethod(
'selectWhere');
//====================================添加的代码
RegisterMethod(
'newLDA');
RegisterMethod(
'executeCommand');
//====================================
fDeltas:= TList.Create;
fDeltaList := TDAEcmaSchemaNamedListWrapper.Create(fDeltas, IntWrap, IntFind);
fSelectResultList:= TObjectList.Create(True);
end;
、修改uDAScriptContext单元文件中的TDAScriptContext类
function TDAScriptContext.CreateLDA: TDALocalDataAdapter;
begin
Result := TDALocalDataAdapter.Create(nil);
Result.ServiceInstance := fOwner;
Result.DynamicSelect := True;
//====================================添加的代码
Result.SessionID := fOwner.ClientID;
//====================================
end;
OK,修改完成。
下面来看一个实例:
, }) == )
fail("级联删除失败");
log(" 级联删除产品信息成功");
}
}
使用上面的方法,有点像写触发器,但可以同时操作多个数据库,而且可以是不同类型的数据库。此方法可以用来做数据集成平台。
上面的代码已通过测试,欢迎大家指正!
增强Delphi.RemObject.DataAbstract的脚本功能:多数据库同时操作的更多相关文章
- Delphi中使用python脚本读取Excel数据
Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- Delphi 各版本新特性功能网址收集
Delphi XE2 三个新功能介绍举例_西西软件资讯 http://www.cr173.com/html/13179_1.html delphi 2007新功能简介-davidxueer-Chin ...
- O365 "打开或关闭脚本"功能
博客地址:http://blog.csdn.net/FoxDave 自定义功能是 SharePoint Online 最具吸引力的功能之一,因为它使管理员和用户可以调整网站和页面的外观以满足组织目 ...
- Delphi XE2有什么新功能
具体内容见PDF Delphi XE2有什么新功能Delphi XE2提供(offers)了令人兴奋(exciting)的新功能,让您能够建立高度可视化的,在Windows,Mac和iOS上的业务应用 ...
- (3.5)mysql基础深入——mysqld_safe脚本功能及流程
(3.5)mysql基础深入——mysqld_safe脚本功能及流程 目录 1.mysqld_safe过程总结 2.mysql_safe启动的好处 3.mysqld_safe 参数 4.mysqld_ ...
- 使用PaxScript为Delphi应用增加对脚本的支持
通过使用PaxScript可以为Delphi应用增加对脚本的支持. PaxScript支持paxC,paxBasic,paxPascle,paxJavaScript(对ECMA-262做了扩展) 四种 ...
- SpaceClaim脚本功能(Beta功能)
本操作仅适用ANSYS SpaceClaim 2016 打开SpaceClaim脚本编辑器的方法有两种 方法一(看截图操作): 方法二(请见后面的实例操作). 创建球体源代码: #定义 ...
- 除了binlog2sql工具外,使用python脚本闪回数据(数据库误操作)
利用binlog日志恢复数据库误操作数据 在人工手动进行一些数据库写操作的时候(比方说数据修改),尤其是一些不可控的批量更新或删除,通常都建议备份后操作.不过不怕万一,就怕一万,有备无患总是好的.在线 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
随机推荐
- wcf综合运用之:大文件异步断点续传
在WCF下作大文件的上传,首先想到使用的就是Stream,这也是微软推荐的使用方式.处理流程是:首先把文件加载到内存中,加载完毕后传递数据.这种处理方式对小文件,值得推荐,比如几K,几十k的图片文件, ...
- VS2013无法链接到TFS (转)
VS2013无法链接到TFS(Visual studio online),错误TF31001,TF31002 TF31002: Unable to connect to VisualStudio ...
- google base之LockImpl
为了兼容不同的平台,这个类采用了impl模式,win平台通过CRITICAL_SECTION, 这样的话还是相对比较简单,具体就不详解了,不过不得不说boost的实现方式就要复杂到哪里去了,当然,好处 ...
- PHP学习遇到的问题
使用php ob_start()模板生成html 内容无法撑开 生成后主要的内容 <body><warp><main> 生成后这个几个节点总是固定大小,不能被内容撑 ...
- HDU 5573 Binary Tree(找规律)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5573 题意:给你一个完全二叉树,节点为自然数的排列(第一行1,第二行2 3,第三行4 5 6 7... ...
- poj 1321 棋盘问题 递归运算
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19935 Accepted: 9933 Description ...
- MarkDown使用 (三)表格
MarkDown表格的用法 MarkDown表格的用法 例如: $$ \begin{array}{c|lcr} n & \text{Left} & \text{Center} & ...
- jquery不限图片焦点图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- hdu 4628 Pieces 状压dp
题目链接 枚举所有状态, 1表示这个字符还在原来的串中, 0表示已经取出来了. 代码中j = (j+1)|i的用处是枚举所有包含i状态的状态. #include <iostream> #i ...
- 浅谈qt 布局器
在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是 ...