我使用了一个var,它根据按下的字母按钮动态添加值。我需要它做的是只获取姓氏以该字母开头的记录。
Var
GetChar : String;
Begin
GetChar := GlobalVarUnit.AlphaValue;
RCMCListBox.Items.Clear;
RootsDB.Connected := True;
UpdateQuery.close;
UpdateQuery.SQL.Clear;
UpdateQuery.sql.text := 'SELECT * FROM Contacts WHERE [PrimaryLastName] LIKE :CFind';
UpdateQuery.ParamCheck := True;
UpdateQuery.ParamByName('CFind').Value := GetChar;
UpdateQuery.open;
UpdateQuery.first;
RCMCListBox.Items.BeginUpdate;
//if GetChar <> '' then
while (not UpdateQuery.eof) and (UpdateQuery.ParamByName('CFind').Value = GetChar) do
begin
RCMCListBox.Items.Add(RCTable.fieldbyname('ContactID').asstring + ';' + RCTable.fieldbyname('CompanyName').asstring + ';'
+ RCTable.fieldbyname('PrimaryFirstName').asstring + ' ' + RCTable.fieldbyname('PrimaryLastName').asstring);
UpdateQuery.next;
RCMCListBox.Items.EndUpdate;
End;
UpdateQuery.Close;
RootsDB.Connected := False;
我花了几个小时寻找一个解决方案,我一直在阅读卡里 Json 关于FireDac的书,我发现的大部分是使用DB组件来实现这一点。我真的希望能够只用SQL语句来实现这一点,我觉得这可以让程序在连接到数据库时获得更多的控制权,以便收集所需的信息,然后在完成后关闭它。
我也看到了一些做以下事情的相互矛盾的方法,我不确定什么是正确的方法。例如:
UpdateQuery.sql.text := 'SELECT * FROM Contacts WHERE [PrimaryLastName] LIKE :CFind';
UpdateQuery.sql.text := 'SELECT * FROM Contacts WHERE (PrimaryLastName) LIKE :CFind';
UpdateQuery.sql.text := 'SELECT * FROM Contacts WHERE PrimaryLastName LIKE :CFind';
我使用的是绝对数据库。
谢谢你的帮助
1条答案
按热度按时间qlzsbp2j1#
正如@KenWhite在这篇评论中提到的,您的
LIKE
clause需要使用通配符模式。此外,您正在使用名为
UpdateQuery
的组件执行查询,但是从名为RCTable
的组件阅读字段值。另外,
while
循环不需要检查CFind
参数。而且,您误用了BeginUpdate
/EndUpdate
方法。试试这个: