[英]SQLite - TFDQuery with Delphi
我根本不是数据库专家。 我需要你的帮助。
首先是一些上下文:
我需要将工作订单发布到 REST 服务器。 当我获得 WO 时,我知道客户名称、必须执行作业的站点名称以及完整的站点地址。 我收到的网站名称可能是这样的:
如果我将 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;
这给了我:
首先,我想改进该查询以获取所有可能包含“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.