- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 Delphi 如何处理作业。我有一个名为 GlobalConn
的全局连接(TADoConnection
)...
我有一个使用传入的变量进行数据库调用的函数:
function MakeDBCall( AConnection : TAdoConnection )
var LocalConn : TAdoConn;
begin
LocalConn := TAdoConnection.Create(nil);
try
LocalConn := AConnection
///create the table and perform action using the LocalConn
finally
LocalConn.free;
end;
end;
MakeDbCall
调用电话(
GlobalConn
);
LocalConn := AConnection
时实际发生了什么(在函数内部)?是引用计数增加还是分配给局部变量的新副本? LocalConn
影响GlobalConn
? 最佳答案
您的代码没有按照您的想法执行。我已经发表了一些评论,试图准确解释正在发生的事情。
function MakeDBCall( AConnection : TAdoConnection )
var
LocalConn : TAdoConn;
begin
// This creates a brand new ADO connection.
LocalConn := TAdoConnection.Create(nil);
try
// This line discards the connection you've just created,
// orphaning it (leaking the memory), and sets LocalConn
// to point to the object passed in as AConnection.
LocalConn := AConnection
///create the table and perform action using the LocalConn
finally
// This line frees AConnection, making your global variable invalid
LocalConn.free;
end;
end;
- What actually happens when LocalConn := AConnection (inside the function)? Is the reference count increased or a new copy assigned to the local variable?
LocalConn
成为指向
AConnection
的新变量,而不是副本。
TADOConnection
不是接口(interface),因此不受引用计数的影响。未分配新副本 -
LocalConn
只是另一个变量,它指向您传递给函数的连接实例。
- Does freeing the LocalConn impact the GlobalConn?
AConnection
,使对它的任何引用无效,大概是您的全局连接实例。 (它对您使用
TADOConnection.Create(nil)
创建的本地连接没有任何作用;该内存已泄漏,因为您丢弃了对它的唯一可用于释放它的引用。
- Ideally i presume that making a copy is better (faster) than taking the connection string and assigning to the local variable and opening... is this a correct presumption?
- Is this handled differently from Delphi 7 and XE7-Xe10?
TADOConnection
实际上实现了
Assign
方法,你可以使用它。但是,从文档中不清楚它是否已实现;文档链接到
TPersistent.Assign
.您可以检查您实际使用的 Delphi 版本的源代码(我在这台笔记本电脑上没有 D2007),看看它是否已实现。如果是,您可以使用以下内容:
LocalConn := TADOConnection.Create(nil);
try
LocalConn.Assign(AConnection);
// Use LocalConn
finally
LocalConn.Free; // Frees the local copy
end;
关于Delphi:TADoConnection 变量赋值的引用与副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39665932/
我试图了解 Delphi 如何处理作业。我有一个名为 GlobalConn 的全局连接(TADoConnection)... 我有一个使用传入的变量进行数据库调用的函数: function MakeD
使用 D5 中的 TAdoConnection 使用密码 sa 帐户连接到 Windows 7 64 位计算机上的本地 Sql Server,我收到错误“用户 sa 登录失败”,尽管我已经构建了TAd
我已经创建了一个 TCPip 服务器应用程序。该应用程序有一个全局 TADOConnection。此全局 ado 连接既可用于主线程查询,也可用于线程进程内。 这样可以吗? ADOConnection
我正在使用以下连接字符串: ADOConnection1.ConnectionString := 'Driver={MySQL ODBC 3.51 Driver};' +
我需要检测 TAdoConnection 何时出现组件已失去与服务器的连接。我尝试过使用 OnDisconnect事件,但仅当调用 Close 方法或 Connected 属性设置为 false 时才
我有一个带有全局 TADOConnection 的数据模块(默认 KeepConnection 设置为 true)。我现有的应用程序中有大量数据集和查询使用此全局 TADOConnection。 我想
好吧,我的应用程序运行得很好,直到我决定通过创建 DataModule 表单并将所有数据库组件移至其中来稍微清理一下设计时表单。我正在使用 Delphi XE2 Update 1 和这些组件:TADO
我收到了存储在 Variant 中的 native COM ADOConnection。我想将此连接的接口(interface)传递给 VCL 包装器 TADOConnection。问题是我收到无效的
最终答案: 这不是 Delphi 问题,只是配置问题。 我使用Xampp来提供MySql服务器。 C:\xampp\mysql\bin>mysql.exe --version mysql.exe
我正在尝试在 Delphi 7 中编写一个 ADO 数据库分析器。 它是德尔福项目的一部分。 我正在使用 OnExecuteComplete事件,但在某些 PC 上,我收到“MSADO15.DLL”访
使用带有 ADO 对象的 Delphi 7,是否可以从 TADOConnection 对象确定 ODBC 数据库驱动程序?因此检测是否是MS-Access或SQL Server或Oracle等。 程序
TADOConnection.Execute 函数返回一个 _Recordset。 为了简单起见,我目前使用此代码(1): V := ADOConnection1.Execute(SQL).Field
当我在 32 位 delphi 应用程序中运行此代码时,与 MySql 的连接已成功建立。 {$APPTYPE CONSOLE} {$R *.res} uses AdoDb, ActiveX,
我正在尝试使用 TADOConnection 组件与 Oracle 建立数据库连接。我在表单中添加了一个 ADOConnection1。然后我将 Provider 属性设置为“SQLOLEDB”。假设
我是一名优秀的程序员,十分优秀!