繁体   English   中英

SQLite - 带 Delphi 的 TFDQuery

[英]SQLite - TFDQuery with Delphi

我根本不是数据库专家。 我需要你的帮助。

首先是一些上下文:

我需要将工作订单发布到 REST 服务器。 当我获得 WO 时,我知道客户名称、必须执行作业的站点名称以及完整的站点地址。 我收到的网站名称可能是这样的:

  • 乔治 1 (正确的名字)
  • 乔治1
  • 乔治 1

如果我将 WO 发布到服务器,请求有时会被拒绝,因为站点名称与存储在服务器上的站点名称并非 100% 完全相同。

为了提供更好的用户体验,我创建了一个可以与 REST 服务器同步的本地 SQLite 表。 在发布 WO 之前,如果未找到直接匹配项,我想通过提出最佳匹配项的下拉列表,让用户有机会更正站点名称。

此时,我的代码是:(这可能不是最好的方法)

Query := TFDQuery.Create(nil);
try
  Query.Connection := DBConnection;
  SQL:= 'Select Sitename from SitesTable where (CUSTOMERNAME = :CustomerName) AND (Sitename LIKE :SiteName)';
  Query.SQL.Text := SQL;
  Query.ParamByName('CustomerName').AsString := aCustomerName;
  Query.ParamByName('SiteName').AsString := aSiteNam;
  Query.Open;

  while not Query.Eof do
    begin
      List.Add(Query.FieldByname('Sitename').AsString);
      Query.Next;
  end;
finally
  Query.Free;
end;

这给了我:

  • 如果 SiteName 字段存在 100% 匹配,则为一个结果
  • 如果不是,则结果为零

首先,我想改进该查询以获取所有可能包含“George 1”(包括 George 15)的站点。这就是我使用 LIKE 而不是 = 的原因,但它只给我一个结果。

我还尝试通过删除数字来获取所有可能的“乔治”记录,但我总是得到零结果

最后,如果没有找到匹配项,我想查询地址字段以建议位于该街道的所有站点。

我试图使用 Query.RecordCount 来知道我是否必须搜索更多,但它总是给我 0

实现这一目标的最佳 Delphi 代码是什么?

预先感谢您的帮助

你必须使用这样的请求:

Select Sitename 
from SitesTable
where (Sitename = "George 1") 
   or (Sitename like "%George%");

使用Like%与在操作系统中搜索文件时的*非常相似。 当然,您可以使用“或”添加尽可能多的变体。

转换为 Delphi 代码段,它给出:

procedure TForm1.Button1Click(Sender: TObject);
begin
    FDConnection1.DriverName                := 'SQLITE';
    FDConnection1.Params.Values['Database'] := 'E:\Temp\StackOverflow64067394.sqlite3';
    FDConnection1.Open;

    FDQuery1.SQL.Text := 'Select Sitename ' +
                         'from SitesTable ' +
                         'where (Sitename = :Param1) ' +
                            'or (Sitename like :Param2)';
    FDQuery1.ParamByName('Param1').AsString := 'George 1';
    FDQuery1.ParamByName('Param2').AsString := '%George%';
    FDQuery1.Open;
    while not FDQuery1.Eof do begin
        Memo1.Lines.Add(FDQuery1.FieldByName('Sitename').AsString);
        FDQuery1.Next;
    end;
    FDQuery1.Close;
end;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM