- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是 Delphi 10 Seattle,下面是示例代码。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Datasnap.DBClient,
FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,
FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,
FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,
FireDAC.Stan.ExprFuncs, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, FireDAC.VCLUI.Wait, FireDAC.Comp.UI, FireDAC.Comp.Client,
FireDAC.Phys.SQLiteVDataSet, FireDAC.Comp.DataSet, Vcl.StdCtrls;
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
ClientDataSet2: TClientDataSet;
FDConnection1: TFDConnection;
FDQuery1: TFDQuery;
FDLocalSQL1: TFDLocalSQL;
FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;
FDGUIxWaitCursor1: TFDGUIxWaitCursor;
Button1: TButton;
procedure Button1Click(Sender: TObject);
public
procedure AfterConstruction; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AfterConstruction;
var o: TFDLocalSQLDataSet;
begin
inherited;
ClientDataSet1.FieldDefs.Add('Code', ftString, 20);
ClientDataSet1.FieldDefs.Add('Amount', ftFMTBcd, 2);
ClientDataSet1.FieldDefs.Find('Amount').Precision := 18;
ClientDataSet1.CreateDataSet;
ClientDataSet1.AppendRecord(['A', 10]);
ClientDataSet1.AppendRecord(['B', 20]);
ClientDataSet1.AppendRecord(['C', 30]);
ClientDataSet2.FieldDefs.Add('Code', ftString, 20);
ClientDataSet2.FieldDefs.Add('Amount', ftFMTBcd, 2);
ClientDataSet2.FieldDefs.Find('Amount').Precision := 18;
ClientDataSet2.CreateDataSet;
ClientDataSet2.AppendRecord(['X', 10]);
ClientDataSet2.AppendRecord(['B', 20]);
ClientDataSet2.AppendRecord(['Y', 30]);
o := FDLocalSQL1.DataSets.Add;
o.DataSet := ClientDataSet1;
o := FDLocalSQL1.DataSets.Add;
o.DataSet := ClientDataSet2;
FDLocalSQL1.Active := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if FDQuery1.Active then
FDQuery1.Close;
FDQuery1.Open(
'SELECT * FROM ClientDataSet1 ' +
'UNION ' +
'SELECT * FROM ClientDataSet2'
);
ShowMessage(FDQuery1.FindField('Amount').ClassName);
end;
end.
TClientDataSet 的两个实例具有相同的字段结构(代码是字符串字段,金额是 FMTBcd 字段)。
为什么 FDQuery1.FindField('Amount') 返回 TWideStringField?
最佳答案
你的 q 预设你的 Amount 字段首先是数字,但我不认为这就是 Sqlite 的实际工作方式。
Sqlite 列不是严格类型化的,FireDAC 会告诉您所有 Sqlite 列的真正含义,即 WideString,即使您将列声明为其他类型也是如此。在 Sqlite 中,将列定义为特定类型(即自动递增整数)更多的是该列中的数据如何表现的问题,而不是如何存储的问题。
Fwiw,总的来说,FireDAC 在理解 Sqlite 列及其元数据方面似乎比 DBExpress 做得更好,但您仍然会得到像您所询问的那样的“有趣的东西”。
显然(请参阅下面权威来源的评论)如果 SqlLite 向 FireDAC 提供列类型名称,那么 FireDAC 将尝试使用列中出现的第一个值的实际数据类型。如果为 Null,FireDAC 将使用 ftWideString 作为列类型。
关于sqlite - 为什么在 SQLite 中使用 TFDQuery 合并两个数据集后数字字段变成 TWideStringField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36279979/
我想使用组件编辑器设计我的 TFDQuery,即在设计时设置 SQL 字符串、选项等,然后在线程中使用查询。 我的问题是线程的每个运行实例都需要自己的查询实例 - 否则它将不是线程安全的。 我是否应该
问题 我想知道是否有任何方法可以通过只知道表的主键来移动到数据集中的特定记录(FDQuery)。 我所知道的 我知道我可以使用 FDQuery.Next; FDQuery.Prior; 移至下一条/上
简而言之,我如何知道哪些(主要和唯一)键唯一标识 FireDAC 查询记录? 我正在使用 Delphi 10.1 & FireDAC & Firebird。 我正在使用代码生成来生成一个包含我的应用程
我想从 TFDQuery.Delta 中删除一个特定的 usModified 记录,但不恢复它。与 TFDQuery.CommitUpdates 相同,但不是针对所有数据集,仅针对一个选择的记录。有人
我正在尝试异步执行 SQL 查询。我已经检查了 http://docwiki.embarcadero.com/RADStudio/XE5/en/Asynchronous_Execution_(Fire
任何人都可以帮助我在运行时克隆 TFDQuery 吗?我在 Delphi Tokyo 中编码,我有一个带有 TFDQuery 的数据模块,其中我在设计时使用字段编辑器定义了所有字段属性,这样我的 DB
我在 Delphi XE5 中使用 TFDQuery 组件从 PostgreSQL 数据库的表中插入和更新记录。我在添加字段(在 DFM 中持续存在)时遇到的一个缺点是它没有检测到某些表字段为 NOT
我使用的是 Delphi 10 Seattle,下面是示例代码。 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, Syste
我正在寻找 TFDQuery 中的跳过并选择。我找到的属性是 .FetchOptions.RecsSkip 和 .FetchOptions.RecsMax。我使用 Tokyo 10.2.3 和数据库
使用 Delphi 10.2、SQLite 和 Teecharts。我的 SQLite 数据库有两个字段,创建方式为: CREATE TABLE HistoryRuntime ('DayTime' D
使用 Delphi 10.2、SQLite 和 Teecharts。我的 SQLite 数据库有两个字段,创建方式为: CREATE TABLE HistoryRuntime ('DayTime' D
我是一名优秀的程序员,十分优秀!