问题标签 [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 投票
1 回答
96 浏览

delphi - Anydac TADTable component collation issue

I'm having an issue with sorting strings that have special characters like ^ and ! in a Firebird database.

When using the TADTable component with the following settings and a table that uses collation unicode_ci_ai

The server will put strings that start with ^ before strings that start with !, but TADTable does the opposite. This results in duplicates when bringing down the records.

I'm looking for best practice when sorting strings with special characters. I have to use TADTable (legacy system) and Live Data Window mode for speed.

Thank you.

0 投票
1 回答
174 浏览

delphi - AnyDAC - 编辑前刷新记录

目前我们正在将Delphi7应用程序的数据库组件从BDE组件迁移到AnyDAC 版本 8.0.5组件。

在从另一个应用程序实例(会话)编辑记录之前,TTable (BDE) 具有以下行为:

  1. 记录被刷新,并且从其他实例中可以看到更改。记录将在方法 TBDEDataSet.InternalEdit 中刷新。
  2. 数据集设置为编辑模式 (DataSet.State = dsEdit)

使用适当的 AnyDAC 组件 (TADTable),记录不会反映其他实例所做的更改。没有对 TADConnection 和 TADTable 进行特殊更改。

任何帮助表示赞赏。

0 投票
1 回答
168 浏览

delphi - AnyDAC (FireDAC) - 在 TBlobField.GetAsString 之后打开事务

目前我们正在将Delphi7应用程序的数据库组件从BDE组件迁移到AnyDAC (FireDAC) 版本 8.0.5组件。

给出了以下先决条件:

  • 在我们的表单上,我们有一个 TADConnection、一个 TADQuery 和一个 TADTable。TADQuery 是 TADTable 的 MasterSource。没有对 AnyDAC 组件的设置进行特殊更改,因此AutoCommit模式处于活动状态。
  • 此外,我们的表单上有一个 TDBMemo,它链接到 TADTable 的 ftMemo 字段(Firebird FieldType = Blob / Size = 240 / Subtype = Text)

在加载 blob 文本字段内容 (TBlobField.GetAsString) 期间,TADTable 会自动启动一个不会提交的事务。

这种行为正常吗?我们是否有可能避免这种公开交易?请注意,目前无法停用 AutoCommit。

任何帮助表示赞赏。

0 投票
2 回答
819 浏览

delphi - FireDAC (FDQuery) - 名称中带有点的数据库

当 FireDAC -> FDQuery 组件尝试使用“。”从数据库中选择数据时,我遇到了这个问题。(点)在它的名字中。

数据库名称是 TEST_2.0 并且打开数据集的错误说:

在 sys.servers [...] 中找不到服务器“TEST_2”

我试过{TEST_2.0}(大括号)和[TEST_2.0](方括号)。将 QuotedIdentifiers (Format Opetions) 属性设置为 True 似乎也不能解决问题。在 SQL 查询中,我可以添加 'SET QUOTED_IDENTIFIER ON;' 但这会中断对数据集的插入。

FDConnection 组件可以使用 MSSQL 驱动程序毫无问题地连接到该服务器和该数据库。似乎是数据集没有处理它。UniDAC 似乎可以毫无问题地处理所有事情。

我正在使用 RadStudio 10.2。

有没有人找到任何解决方案?提前感谢您的任何回复

0 投票
0 回答
164 浏览

delphi - AnyDAC - TADConnection 属性 FCommands 包含已发布的对象

目前,我们正在将Delphi7应用程序的数据库组件从BDE组件迁移到AnyDAC 版本 8.0.5组件(同时称为 FireDAC)。

我们在 MDI 子窗体中使用以下控件:

  • TADTable
  • TDataSource
  • TDBNavigator
  • TDBEdit(aTStringField分配给DataField属性)
  • TDBMemo(aTMemoField分配给 DataField 属性 [ DB Field Type = Blob])

所有数据库控件都相互连接

当我们更改两个或三个记录时,我们将EAccessViolation在断开连接期间收到一个TADCustomConnection. 出现EAccessViolationTCustomConnection(内部单元DB)的以下方法中:

原因EAccessViolation是该TADCustomConnection.FCommands属性包含已发布TADCommands。通常一切都像一个魅力,但如果我们排除fiBlobsTADTable.FetchOption.Items或如果我们只是RefreshRecordTADTable.BeforeEdit我们收到EAccessViolation.

任何帮助是极大的赞赏。

0 投票
2 回答
1969 浏览

delphi - 如何在 Firebird 3.0 上启用线压缩

我与 Firebird 和 Delphi 合作,我想通过有线压缩实现通过 Internet 的访问;但我无法激活它。

我已按照本文档中的步骤获取新参数(我能找到的少数参数之一) 如何使用 FireDAC 在 Firebird 3.0 上启用 WireCompression

在测试中,我使用 Windows server 2012 R2 Firebird:Firebird-3.0.4.33054_0_Win32(32 bits) 也复制到可执行文件夹。fbclient.dll zlib1.dll(同上服务器和客户端)使用wirecompression = true 创建了firebird.conf。我在应用程序的 Firedac 中给出了 wirecompression=true 。

为什么我无法激活 P15:CZ 压缩?

0 投票
2 回答
2038 浏览

delphi - 如何在blob中写入txt文件

Firebird 表有 2 个 blob 字段 - blob_binary 字段(子类型=0)和 blob_Text 字段(子类型=1,utf-8)。DB 有 utf 编码。连接具有 utf 编码。Delphi 的版本是 10.2.3。我使用 FireDac 组件进行数据访问。服务器是火鸟 3。

在此处输入图像描述

应用程序必须将数据从文本文件(utf-8)写入“内容”表的两个 blob 字段。文本文件,我必须写在 blob 中,包含英语、俄语和格鲁吉亚语的文本(见图)。

项目和数据库文件,具有编辑权限

下面的代码在二进制 blob字段中写入文本,但字符很奇怪(不是 ??? simbols。也许是 Ansi 字符?)。

在 Blob_Binary字段中保存文本文件的代码:

当我将文本文件保存在二进制 blob字段中时:

1)如果我以编码 utf-BOM 保存文本文件,我会得到二进制 blob 普通文本和

2) 如果我选择文本文件编码为 utf,则会出现奇怪的字符。

但是当我使用相同的代码在文本 blob字段中写入数据时,数据看起来像汉字一样奇怪(见图)。

在此处输入图像描述

我错了什么?如何更正此代码以在两个字段中写入 utf 字符?

我尝试了另一种解决方案,但结果是一样的。例如:

Update1:​​正如我所意识到的,如果我将 txt 文件保存为 noteped 中的“unicode”(或 noteped++ 中的 ucs-2 LE BOM),它将在文本 blob 中保存得很好,中文字符消失了。同样,二进制 blob 中的 txt 文件如果采用 utf-BOM 编码,则可以很好地保存。虽然无法将文件保存在utf-8中非常不舒服。

在此处输入图像描述

0 投票
0 回答
105 浏览

performance - AnyDAC 组件执行 SQL 查询比 FIBPlus 组件慢

以下 SQL 命令返回大约 4.500 条记录,并包含整数、字符串和 blob(文本)值。所有索引都设置正确。此外,我们知道in子句不是最好的,但现在不应该打扰我们。SQL 命令在 firebird 3.0 服务器上执行:

我们在外部应用程序(我们知道该应用程序使用FIBPlus组件)和我们非常基本的示例Delphi7 应用程序(使用原始AnyDAC数据库组件版本 8.0.5)中执行 SQL 命令。如果我们将所有记录提取到一个网格中,我们有以下性能:

  • 使用 FIBPlus 的外部应用程序 ~ 200 – 400 毫秒
  • 带 AnyDAC 的 Delphi7 ~ 3.500 – 4.500 毫秒

在我们的 Delphi7 程序中,我们将TADQuery连接到它自己的TADTransaction。两个组件都使用默认设置,除了 TADTransaction 的 ReadOnly 属性,我们将其更改为 True

现在我们想知道为什么外部应用程序比我们的 Delphi7 程序快大约 10 倍?有没有我们可以修改的属性来加速我们的 Delphi 7 程序?

任何帮助表示赞赏...

0 投票
0 回答
98 浏览

delphi - 游标 firebird 将一些行 tableA 移动到 tableB

我想通过从tableA.

我使用带有FireDAC和 Firebird RDMBS 的Delphi版本 Rio 。

  1. 我使用一个过程来移动和删除一行
  2. 我无法使用此光标移动多行

我使用程序 1 来移动和删除一行。问题是,当我使用过程 2 ( EXECUTE PROCEDURE "PRST_RetransFert";) 时,我收到一条错误消息:

引擎错误(代码 = 335544336):死锁。
更新与并发更新冲突。
并发事务数为 41556。
在过程“PRST_INSERTMEMODELETTRANSF”行:36,列:3
在过程“PRST_RetransFert”行:13,列:
15。SQL 错误(代码 = -913):死锁。

仅此过程就可以正常工作。

我不能用这个 SP 来移动多行

0 投票
1 回答
167 浏览

mysql - Delphi FireDac 后续参数化 MySQL StoredProcedure 执行失败,并出现“Lost connection to MySQL server during query”异常

为了重现这个问题,让我们有以下两个超级简单的 SP,第一个没有任何参数,第二个只有一个输出参数:

如果我们调用第一个 SP 两次,一个接一个,那么它可以正常工作:

但是如果我们调用第二个 SP 两次,一个接一个,然后我们得到一个异常:

在现实生活场景中,我们不得不在我们的项目中频繁调用同一个SP,不同的参数值,所以每次都free-then-recreate SP对象并不是一个好的解决方案。

这在使用 AnyDac 的旧 Delphi 版本中运行良好,但使用 FireDac 时我们遇到了这个问题。

非常感谢您的帮助!:)