FilreDAC DLL共享数据连接
D:\Users\Public\Documents\Embarcadero\Studio\16.0\Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDConnection\DLL_Sharing
FDConnection1.CliHandle
FDConnection1.SharedCliHandle := ACliHandle;
CLI handle for connection sharing.
The CliHandle property returns a DBMS Call Level Interface connection handle. This value can be assigned to another TFDCustomConnection object's SharedCliHandle property. This is useful to transfer a connection from an application into a DLL. See DLL Development.
After setting Connected to True for the DLL connection, both connections will share the same physical DBMS connection. This connection must be closed after all other connections that share the same CLI handle.
CLI handle shared with other connections.
Use SharedCliHandle to set a shared DBMS Call Level Interface connection handle returned by another connection's CliHandle property. This is useful to transfer the connection from an application into a DLL (see DLL Development).
Note: A connection cannot be shared with another process, as the sharing works only inside the same address space.
After setting Connected to True for this connection, it will use the same physical DBMS connection or session as the other connection, and it will share the same transaction state.
After setting Connected to False, this DLL connection will not release the connection resources to the DBMC client. The application connection is responsible for resources releasing. Because of that, the application connection must be closed after closing all the sharing connections.
DLL Development (FireDAC)
Go Up to Working with Connections (FireDAC)
This topic describes how to use FireDAC in the dynamic loading libraries.
Contents |
General
FireDAC may be used in a DLL as in a normal application. However, developers
must be aware of two techniques, specific to DLL development.
Connection Sharing Between an Application and a
DLL
When a connection must be transferred from an application to the DLL, the
application should not transfer the TFDCustomConnection
object, because this may lead to AV errors and other issues. This is not an
issue of FireDAC. It is due to the Delphi RTL / RTTI limitations. Note that a
connection cannot be shared with another process, because the sharing works only
inside the same address space.
To transfer a connection between an application and a DLL, the application
should transfer the TFDCustomConnection.CliHandle
property value to the DLL. Here the handle must be assigned to the TFDCustomConnection.SharedCliHandle
property.
After the TFDCustomConnection.SharedCliHandle
is assigned, the DLL connection can be activated by setting Connected to
True. Note that there is no need to set up a connection definition,
including DriverID. Then, the connection can be used as a normal database
connection. Finally, it can be closed by setting Connected to False. That
does not close the physical connection, therefore the application connection
remains active.
The application connection does not track state changes performed by the DLL.
Therefore, the DLL should preserve the same transaction state as it had before
the DLL call. It is indicated not to handle transactions in a DLL, change the
transaction isolation level and other settings in a DLL.
Also, setting SharedCliHandle does not transfer any of the option values from
an application to a DLL connection object. The DLL connection options can be set
similar to the application connection options.
For example, the DLL code:
FilreDAC DLL共享数据连接的更多相关文章
- 【C++】DLL内共享数据区在进程间共享数据(重要)
因项目需要,需要在DLL中共享数据,即DLL中某一变量只执行一次,在运行DLL中其他函数时该变量值不改变:刚开始想法理解错误,搜到了DLL进程间共享数据段,后面发现直接在DLL中定义全局变量就行,当时 ...
- DLL入门浅析(5)——使用DLL在进程间共享数据
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/21/90734.html 在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的 ...
- #pragma data_seg() 共享数据// MyData段 // 进程 // DLL
https://www.cnblogs.com/dongsheng/p/4476157.html http://www.cnblogs.com/CBDoctor/archive/2013/01/26/ ...
- 【转】VC 利用DLL共享区间在进程间共享数据及进程间广播消息
1.http://blog.csdn.net/morewindows/article/details/6702342 在进程间共享数据有很多种方法,剪贴板,映射文件等都可以实现,这里介绍用DLL的共享 ...
- 使用DLL在进程间共享数据
0x01 DLL在进程间共享数据理论 1.可以在Dll中使用#pragma data_seg建立共享类型的数据段将需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享,从而实现不 ...
- #pragma data_seg 共享数据区(转)
原文地址:http://www.cnblogs.com/CBDoctor/archive/2013/01/26/2878201.html 1)#pragma data_seg()一般用于DLL中.也就 ...
- 详解 Qt 线程间共享数据(用信号槽方式)
使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...
- VC++共享数据段实现进程之间共享数据
当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...
- Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)
Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据 ...
随机推荐
- Windows中cmd操作mysql
打开CMD 将工作目录切换到MySQL的bin下 mysql -u root -p 输入密码即可登陆MySQL 问号可以查看帮助 首先需要选择操作的数据库use database_name 然后可以进 ...
- HDU - 6513 Reverse It (SYSU校赛C题)(组合数学+容斥)
题目链接 题意:给定一个n*m的矩阵,可以选择至多两个子矩阵将其反转,求能形成多少种不同的矩阵. 任选一个矩阵有$C_{n+1}^{2}C_{m+1}^{2}$种方法,任选两个不同的矩阵有$C_{C_ ...
- .NET Core/Framework 创建委托以大幅度提高反射调用的性能
都知道反射伤性能,但不得不反射的时候又怎么办呢?当真的被问题逼迫的时候还是能找到解决办法的. 为反射得到的方法创建一个委托,此后调用此委托将能够提高近乎直接调用方法本身的性能.(当然 Emit 也能够 ...
- Java 自定义FTP连接池
转自:https://blog.csdn.net/eakom/article/details/79038590 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...
- 船长带你看书——《selenium2 python 自动化测试实战》(1)
有很多selenium的教程,你没有从头看,当你看的时候已经很难跟上作者的节奏了.现在,你有机会再从头学一次了.从今天开始,船长会从最基本的知识开始,和大家一起学selenium.能不能跟着一起就看大 ...
- apache phoenix 安装试用
备注: 本次安装是在hbase docker 镜像的基础上配置的,主要是为了方便学习,而hbase搭建有觉得 有点费事,用镜像简单. 1. hbase 镜像 docker pull har ...
- Discuz! X2.5RC 全新安装图文教程
http://www.discuz.net/thread-2660015-1-1.html 一步步教你利用Discuz X2.5建设论坛视频教程(174集) http://down.51cto.com ...
- 如何在CentOS系统中安装配置SNMP服务
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,现在有一大部分服务器在使用此操作系统:SNMP(简单网络 ...
- 完美版js金钱正则表达式校验
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8& ...
- ngnix+uwsgi+django 部署mezzanine
以下是我用ngnix+uwsgi+django 部署mezzanine全过程,其中ngnix+uwsgi这块是看了虫师大神的博客(http://www.cnblogs.com/fnng/p/52686 ...