问题标签 [fdmemtable]

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 投票
0 回答
197 浏览

delphi - Delphi中有AutoInc字段时FDMemTable会丢失FieldDefs信息

我正在为 delphi 表单创建一个内存表 TFDMemTable,并在 FieldDefs 下定义字段。手动完成字段定义后,我会转到字段编辑器添加刚刚定义的字段。

一切正常,直到我的 FDMemTable 中有一个 AutoInc 类型字段。我正在使用 Delphi 10.3.2 版本,我想知道我是否遗漏了什么或者这是一个 IDE 错误。

PS:我做了几个测试,我认为如果 AutoInc 字段没有定义为最后一个字段,一切都会消失。我不确定这种情况,但几乎每次我尝试都会松开 FieldDefs 下的字段。

以下是步骤:

  • 放置一个 FDMemTable 图标
  • 打开 FieldDefs 窗口
  • 创建一堆字段(字符串,整数...)
  • 定义名称、类型(和字符串的大小)
  • 打开字段编辑器
  • 添加字段

直到这里一切正常。

  • 返回 fieldDefs 窗口
  • 创建并命名一个具有 autoinc 类型的新字段
  • 打开字段编辑器屏幕并添加最后添加的字段。

只要结构没有更多变化,一切都很好。

如果您执行以下操作,就会发生奇怪的事情。

  • 打开 FieldDefs 窗口
  • 创建任何字段(假设是整数类型)
  • 转到字段编辑器窗口以添加最后创建的字段。
  • 你会看到你没有看到这个要添加的新字段。
  • 当您返回 fieldDefs 窗口查看它为什么不显示时,
  • 您将看到所有先前和最后添加的字段的定义都消失了..

为了解决这个问题,我以文本形式打开表单,并在最后一个字段 autoinc 之前插入新字段,

在文本表单中手动添加字段编辑器条目,

当一切正常时,我切换到表单视图。

0 投票
0 回答
351 浏览

delphi - Delphi TFDMemTable、CloneCursor 和源表不同步,除非调用了 Refresh

我正在处理的代码大量使用 TFDMemTables,并使用 CloneCursor 克隆这些表。

有时,在我无法识别的特定条件下,源表及其克隆变得不同步:它们之间的数据可能不同,记录数也可能不同。在克隆的表上调用 Refresh 会使事情恢复原状。

据我了解,CloneCursor 用于寻址存储数据的同一底层内存,这意味着从两个指针中的任何一个对底层数据的更改应该反映在另一个表上,但允许用户根据“看法”。那么它怎么可能不同步呢?

我构建了一个小型模拟器,我可以在其中插入/删除/过滤表或其克隆中的记录,并观察对另一个的影响。更改已正确反映。

Refresh 的另一个缺点是,如果过度使用,它会极大地减慢执行速度。

有没有人遇到过类似的问题或找到关于此事的解释/文档?

编辑:

澄清我所说的“不同步”是什么意思,这意味着使用 FieldByName 从表中读取一个值将在刷新之前返回 X,在刷新后返回 Y。我无法在上述模拟器上重现此行为。

0 投票
1 回答
62 浏览

delphi - TFDMemTable 过滤器没有响应我的 TEdit OnChangeTracking

我有来自 API 的 TFDMemTable 数据。TFDMemTable 与 TListView 实时绑定。这里棘手的部分是,我想在 TListView 中仅使用 TEdit 控件的 OnChangeTracking 事件显示过滤后的数据。

这是我正在使用以实现预期结果的代码,但不幸的是,它没有返回任何内容。

这里的任何人都可以尝试检查我的代码是否正确?或者我可能需要做其他事情?

0 投票
0 回答
96 浏览

delphi - 是否可以在 Python 上读取 FireDAC MemTable?

我有一些在 FireDAC 项目中创建的二进制文件 (.adb),但我想在 python 中读取数据,是否有关于如何读取这种格式的文档?我知道这是一种专有格式,但我使用数据的唯一方法是使用 Delphi?

0 投票
1 回答
113 浏览

rest - TTeeGrid 不在运行时使用来自 REST 的数据显示数据

我为 TTeeGrid 创建了一个简单的 RME,它可能是 Firemonkey 中 TGrid 的后代。如下所示,数据在设计时显示,但在运行时不显示,但标题除外。

在此处输入图像描述

我已经为此烦恼了好几个星期,但不是运气。

如果您需要更多详细信息,请告诉我,但您在图像中看到的就是您所得到的。

我只需要帮助才能在运行时显示数据,如设计时所示。

更新 1

TPrototypeBindSource 不存在此问题。设计时显示的数据在运行时显示。某处出了点问题。

0 投票
3 回答
232 浏览

api - 每次通过动态(增加数据)TFDMemTable 定义提供的 REST API 数据在运行时创建 TGrid 时性能缓慢

我正在为 iOS 和 Android 开发 Firemonkey 应用程序。我注意到,每次使用 TFDMemTable REST API 数据和结构在运行时创建 TGrid 时,应用程序在 iOS 和 Android 调试中的性能都会变慢。

FreeAndNil(TGrid1);在它一遍又一遍地创建之前,我已经应用了清理 TGrid。

一个值得注意的事件是,每次创建 TGrid 时,行都会随着固定的 7 列而增加,性能会变慢。通常,当我达到 10 行或记录时会发生这种情况。

我的一个大而真实的快速问题:

您认为导致性能下降的开销来自哪里?

  1. TGrid——我FreeAndNil(TGrid1);在创建它之前就已经应用了它。

  2. TFMemTable — 我没有检查过这个,我不知道怎么做

  3. TButton — 触发创建数据并将数据加载到 TGrid 的按钮。大部分代码都在这里

让我们假设在这种情况之前所有其他组件都工作正常。如果您愿意,我可以与您分享一些代码,但请指导我您想查看哪个代码。

更新 1:最小可重复示例

FMX 文件

FMX 程序

0 投票
1 回答
454 浏览

delphi - 如何刷新 TListView 和 TFDMemTable 的 Livebinding?

我有一个与 TFDMemTable 绑定的 TListView。我还有一个 TButton,它在 TFDMemTable 上添加项目,添加项目后显然显示在 TListView 中。TListView 位于 TTabControl 的 TTabItem 之一。

我的问题是,当我在运行时更改选项卡并返回 TListView 选项卡添加更多项目时,之前显示的数据在添加更多项目后将变为空。

我可以确认 TFDMemTable 中的数据仍然完好无损,包括新添加的数据。

我怀疑需要刷新实时绑定才能将所有数据返回到 TListView。

有谁知道如何在运行时刷新实时绑定?

PS我希望上面清楚地解释了我的问题。否则,如果您需要更多详细信息,请告诉我。

更新 1:最小可重复示例

这是我能为 MRE 做的最少的事情,不是我的情况的确切情况,但应该是同一个问题。在 TabItem2 上添加列表后您会注意到,然后返回 TabItem1 以在列表中添加更多项目,列表中现有的详细信息将消失。

FMX 程序

FMX 文件

0 投票
1 回答
233 浏览

delphi - 如何在设计时更改 Delphi FireDAC tFDMemTable 字段名称

我尝试将 FDMemTable1field1 的字段名称“field1”更改为“field3”。没有代码,一切都在设计时完成。

当通过设计窗口中的 FDMemTable1 弹出菜单加载文件时,DBGrid1 可以很好地显示数据。在对象检查器中将 'field1' 更改为 'field3' 会使 FDMemTable1.Active 'false' 和 DBGrid1 的所有单元格清晰。

切换 FDMemTable1.Active 'true' 仅显示 DBGrid1 标题 'field3' 和 'field2' 而不是数据单元格。

最后加载相同的文件会引发错误Field 'field3' not found.即使我在停用 FDMemTable1 后更改名称,结果也是相同的。

是否可以在设计时更改字段名称?我应该将整个“field1”复制到“field3”并在运行时删除前者吗?

0 投票
1 回答
293 浏览

delphi - Delphi 10.4 - 通过单击 Stringgrid Header 对 Memtable 进行排序

我觉得自己像个白痴,因为我的问题看起来很简单,但我没有完成:D

我的设置是:

一个数据集(Memtable),一个字符串网格。Grid 通过 live Bindungs 绑定。

我想通过单击 GridHeader 对我的列进行排序。在 OnHeaderClick 事件中,我得到一个 tColumn 对象。我只能读取 Column.Header 字符串,但我将文本从标题更改为更易朗读的文本。当我将 Column.header 放入 Memtable.Indexfieldsname Memtable 时说该字段不存在,这是对的,但我不知道如何从列中获取正确的 Fieldname。

0 投票
0 回答
23 浏览

delphi - 如何根据需要设置带实时绑定的字段

我的构造如下所示:我有一个 RAD 服务器(Rest Server)和一个客户端(BackendEndpoint)。每个数据都通过 RESTResponseDatasetAdapter 加载到 Memtable 中。为了显示信息,我使用 Livebinding。现在我的问题。在我的表格上有一些必须用值填充的 tedit。如果不是这种情况,编辑字段周围应该有一个读取边框。什么是最好/最简单的存档方法。就“简单”而言,我的意思是简单易懂的方式,适用于其他领域,无需“大量代码”。

我的想法是在 Hubtable 中使用所需的标志,但这不起作用。此外,如果设置了需要,我也无法通过 LiveBinding 从我的 tEdit 获取链接到我的数据集以进行查找。