带有 SQLite 的 Delphi - 不显示 TEXT 字段

问题描述 投票:0回答:1

我在

SQLite
中创建了一个 VARCHAR(50) 字段 InvoiceRef,它映射到 TEXT 字段。

如果我在 Delphi 中使用简单的查询,例如 从发票中选择 InvoiceID、InvoiceRef

这显示得很好,但如果我使用 INNER JOIN,例如

SELECT * FROM Invoices LEFT JOIN Customers ON 
  (Customers.CustomerID=Invoices.CustomerID)

InvoiceRef 将显示空白。 但是,在 SQLite 数据库浏览器上使用相同的 JOIN 查询时,将正确显示 InvoiceRef 文本。

使用

TFDQuery
打开表格,TEXT 字段映射到 TWideMemoField。

我已经设置了这个

DisplayValue
DisplayWidth
TField

if oField is TWideMemoField then
begin
  TWideMemoField(oField).DisplayValue := dvFull;
  TWideMemoField(oField).DisplayWidth := 255;
end;

但是,使用 FDQuery1.FieldByName('SOMENAME').AsString 仍然返回空白(对于 JOIN 查询,但适用于直接非联接 SQL 查询)。

如何让上面的代码工作? 如果它甚至没有使用 .AsString 给我值,那么值自然不会出现在 TListview 中。

还是使用数据库映射来映射字段类型更好? 不熟悉映射,但我有类似的东西:

with FFDQuery.FormatOptions do
begin
  OwnMapRules := True;
  with MapRules.Add do
  begin
    SourceDataType := dtMemo;
    TargetDataType := dtAnsiString;
  end;
  with MapRules.Add do
  begin
    SourceDataType := dtWideMemo;
    TargetDataType := dtWideString;
  end;
end;

我应该尝试使用方法 1 还是方法 2 来解决问题?

sqlite delphi fieldtype
1个回答
0
投票

您最好使用数据库映射来解决该问题。

有几个原因: 由于映射规则位于一个位置,因此更容易维护,并且如果需要,更容易跨不同查询进行任何类型转换。 您还可以为各种数据类型定义映射规则,这有助于防止数据类型不匹配,从而导致更多问题。

祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.