问题标签 [anydac]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
8508 浏览

sql - 如何使用 FireDac 组件在 ms sql server 上获取最后插入的 id?

使用 FireDac,如何在 ms sql 服务器上获取最后插入的 id?谢谢

0 投票
2 回答
252 浏览

database - 改进对数据的多个同步访问

一开始我要为过度使用粗体字表示歉意。我想简化对我长问题的理解方式。

我在多次访问数据时遇到问题。

我必须实现以下问题:我有一个服务器应用程序SERVER_A(基于 TIdServer),有许多(大约 100 个)TCP 连接。这些连接中的每一个的目标是:

  • 从CLIENT获取状态消息(每 2-5 秒)。状态包含 3 个存储为文本的双数字。
  • 从SERVER_ACLIENT发送答案- 获得状态后

这些状态(大约 100 个)必须保存在 Firebird 数据库表 - TABLE中(我曾经这样做过 AnyDAC)。每个CLIENT都有其编号和TABLE中的记录。

另外三个本地网络客户端应用程序 - LOCAL_APPLICATIONS也必须有权访问TABLE。他们必须可视化来自TABLE的统计数据。

LOCAL_APPLICATIONS有时必须更改TABLE的记录之一。结果,必须通过SERVER_A的TCP 连接将这些更改传递给正确的CLIENT作为响应。

问题在于这种解决方案的效率是否达到。

到目前为止,每个 TCP 调用都将数据单独写入TABLE导致 Firebird 大量过载,并且LOCAL_APPLICATIONS执行的任何操作 都非常缓慢。

因此我可以问:正确的方法是在SERVER_A中构建一个LOCAL_ARRAY并从所有 TCP 连接中收集数据,并以固定的时间间隔(例如每 2 秒)将所有这些数据定期保存在TABLE中吗?如果是这样,如何进行有效的数据同步:时间更改LOCAL_ARRAY上的锁并在从中读取数据时锁定它以将数据保存在TABLE中?

也许更好的是对每个连接状态都使用单一变量,然后使用LOCAL_ARRAY以避免在 从一个CLIENT插入数据期间锁定LOCAL_ARRAY中的每个字段?但这不是灵活的解决方案。

我的想法对提高效率有好处吗?或者更确切地说不是?有什么更好的解决方案?

问候阿蒂克

0 投票
2 回答
1942 浏览

sqlite - 使用 AnyDAC (FireDAC) 从 SQLite 表中读取切片数据 (MBTiles) 的最有效方法是什么?

背景:

我正在研究一个 SQLite 切片缓存数据库(类似于MBTiles规范),现在仅由一个Tiles包含以下列的表组成:

X [INTEGER]- 水平瓦片索引(不是地图坐标)
Y [INTEGER]- 垂直瓦片索引(不是地图坐标)
Z [INTEGER]- 瓦片的缩放级别
Data [BLOB]- 带有瓦片图像数据的流(当前为 PNG 图像)

平铺计算的所有坐标都在应用程序中完成,因此SQLite R*Tree Module对应的TADSQLiteRTree类对我来说没有意义。我所需要的只是尽可能快地加载Data由给定值找到的记录的字段 blob 流。X, Y, Z

除此数据库外,应用程序还将具有由此TTileCache类哈希表实现的内存缓存:

在计算值的同时请求某个图块时的工作流程X, Y, Z将很简单。我会在内存缓存中请求一个磁贴(在应用程序启动时从上表中部分填充),如果在那里找不到磁贴,请询问数据库(即使找不到磁贴,下载它来自磁贴服务器)。

问题:

您将使用哪个 AnyDAC (FireDAC) 组件来频繁查询 SQLite 表中的 3 个整数列值(假设有 10 万条记录),并可选择加载找到的 blob 流?

你会使用:

  • 查询类型组件(我想说执行相同的准备好的查询可能很有效,不是吗?)
  • 内存表(我担心它的大小,因为瓷砖表中可能存储了几 GB,或者它是否以某种方式流式传输?)
  • 有些不同 ?
0 投票
1 回答
2408 浏览

sql-server - FireDAC SQL Server 连接:不受信任的证书

我通过在我的 SQL Server 上选择自签名证书来启用安全连接。

我可以使用 SQL Server Management Studio 连接到它并添加TrustServerCertificate=TrueAdditional Connection Parameters.

我需要 FireDAC 连接的相同配置,因为它给出了类似的错误

SSL 提供者:证书链由不受信任的机构颁发

当我尝试连接时。

如何告诉 FireDAC?(德尔福 XE4,FireDAC:8)

PS:我已经将我的自签名证书添加到 Windows“受信任的根证书颁发机构”中,但 FireDAC 似乎忽略了它。

谢谢

0 投票
1 回答
950 浏览

delphi - FireDAC:阵列 DML 进展

我正在使用 FireDAC 的 Array DML 功能将大量数据插入到我的远程 MS SQL 数据库中。

它工作正常,但需要时间来完成执行方法。在执行方法运行时,我想知道 FireDAC 的内部进度,以便我可以将其展示给用户耐心等待。

如何获取执行方法的实际状态?

PS:德尔福 XE4 和 FireDAC v8

谢谢。

0 投票
1 回答
955 浏览

delphi - AnyDac - 如何断开与内存中的 sqlite db 的连接?

我在 Delphi XE2 上使用带有 AnyDac 的内存 SQLite 数据库。我注意到即使我在重新启动程序后忘记先连接数据库,我的查询也会返回结果,这可能是由 AnyDac 的自动连接功能引起的。问题是我猜这也一定意味着即使在程序本身终止后内存数据库仍保留在内存中,这是一种内存泄漏。

我查看了 AnyDac 文档并在线搜索,但我找不到任何方法来正确使用 AnyDac断开与数据库的连接。我注意到,当我调用 TADConnection 的“关闭”方法时,sqlite 文件似乎保持打开状态。我想我的内存数据库也会发生同样的情况。

谁能告诉我如何以正确和安全的方式完全关闭、断开和删除内存中的 SQLite 数据库?

0 投票
0 回答
1729 浏览

delphi - 在 Delphi 中具有 blob 类型的计算字段的 TADQuery

我正在使用 Anydac 组件来访问数据库。TADOQuery 用于从 SQL 数据库中选择数据。

其中一个字段是文本,但我需要显示一些 RTF 而不是此文本(相同的文本但带有突出显示的单词等)。我尝试在 TADQuery 的 OnCalcFields 事件中创建 BLOB 类型的计算字段并用正确的值(来自 DB 的原始文本 + 一些处理)填充它。但它不起作用。我在应用程序启动时获得 AV:

“字段‘xxx’不能是计算字段或查找字段。”。

如果我将 FieldKind 属性更改为 fkI​​nternalCalc(默认值为 fkCalculated),则应用程序将启动,但是当尝试设置值时,我会在 OnCalcFields 处获得 AV:

“数据集未处于编辑或插入模式。”

如果我定义了计算字符串字段(而不是 BLOB 字段),那么一切正常,但字符串类型还有另一个问题。对于字符串类型,我必须提供 Size 属性来限制文本的最大大小。如果我使用高于 64k 的值,例如 67000,当尝试在 OnCalcFields 事件处理程序中分配值(甚至是短值!)时,我会得到 AV:

项目 xxx.exe 引发异常类 $C0000005,并带有消息“0x004094fc 处的访问冲突:读取地址 0xfffffffc”。

因此,我既不能创建计算的 BLOB 字段,也不能创建计算的字符串字段。(它的最大尺寸是有限的,并且没有信息什么最大尺寸是真正安全的。我发现尺寸> 64k的问题,但不确定它在使用较小的块时是否稳定。)

任何想法我做错了什么?

更新:目前我以不同的方式实现了它。我替换了表示层上的数据,但这只是一种解决方法,问题仍然存在。是否可以在 Delphi 中使用 BLOB 类型的计算字段(最好使用 Anydac TADQuery)?是否有任何关于字符串类型计算字段限制的信息(或者也许有人有经验如何避免它们)?

所以,TADQuery 有一些 SQL 查询,一些定义的字段 + 1 个 BLOB 类型的计算字段 + OnCalcFields 事件处理程序(代码在上面)。当我启动应用程序(并尝试打开查询)时,它会生成 AV。我尝试过的其他事情前面已经描述过了。

0 投票
1 回答
1852 浏览

database - Delphi XE4 E2010 不兼容的类型:“Cardinal”和“Pointer”

你好我试图在delphi xe4下编译firedac dll开发示例,它出现了以下错误

我已经在代码中标记了错误的位置。

单元 1 是可执行文件。

Unit2是dll

0 投票
1 回答
630 浏览

sqlite - 执行包含 BLOB 数据的 Array DML 命令是否可行且有意义?

是否可以执行 Array DMLINSERTUPDATE在参数数组中传递 BLOB 字段数据的语句?我的问题中更重要的部分是,如果可能的话,包含 BLOB 数据的 Array DML 命令是否仍然比一个接一个地执行命令更有效?

我注意到它TADParam有一个AsBlobs索引属性,所以我认为它可能是可能的,但我还没有尝试过,因为没有提到性能,也没有显示这一点的示例,而且索引属性的类型RawByteString不太适合我的需要.

我正在使用 FireDAC 并使用 SQLite 数据库(Params.BindMode = pbByNumber,所以我使用INSERT带有多个的原生 SQLite VALUES)。我的目标是尽可能快地存储大约 100k 条记录,其中包含非常小的 BLOB 数据(每条记录大约 1kB)(以 FireDAC 的抽象为代价)。

0 投票
0 回答
536 浏览

delphi - FireDac installation in XE4 fails

I have installed Delphi XE 4 Enterprice Update1 on my computer. I tried to install Fire DAC 8.0.5.3365, but during installation got many errors like:

What might be wrong? I have Delphi 2007 installed on my PC also, maybe it conflicts with XE someway