delphi如何使用WHERE子句进行搜索

时间:2018-03-08 11:43:31

标签: sql delphi ms-access

如何在有WHERE子句的情况下一次搜索表(和多个表)。我知道如何在单个表中搜索所有(*)或表中的字段。该代码如下,我想知道如何在多个表或WHERE子句中进行搜索。

我搜索一张桌子的代码:

procedure searchonefield(sqlcommand, fieldwanted:string, list:TStringlist)
var i:integer;
templist:TStringlist;
begin
  ADOQ.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0;Data  Source='+name+';';
  ADOQ.Close;
  ADOQ.SQL.Clear;
  ADOQ.SQL.Add(sqlcommand);
  ADOQ.Open;
  ADOQ.First;
  templist:=TStringlist.create;
  if ADOQ.RecordCount>1 then
    begin
      for I := i to ADOQ.RecordCount do
        begin
          templist.add(ADOQ.FieldByName(field).AsString);
          ADOQ.Next;
        end;
    end
  else
    templist.add(ADOQ.FieldByName(field).AsString);
  list:=templist;
  templist.free;
end;

我的sqlcommand类似于:

  

'选择用户名FROM Usertable'

我想做的是如下命令:

  

'选择用户名FROM Usertable WHERE ID =' + id number +'

  

' SELECT Usertable.Username,Test.Testscore FROM Usertable,Test WHERE Usertable.ID = Test.ID AND Test.Testscore> 10'

我不确定上述陈述是否有意义或是否有效(我应该以不同方式构建陈述)吗?

1 个答案:

答案 0 :(得分:1)

  

我想做的是如下命令:

 'SELECT Username FROM Usertable WHERE ID='+id number+'

这是错误的解决方案,因为它让您容易受到SQL注入攻击。改为使用参数:

var
  QueryStr: string;
begin
  QueryStr := 'SELECT UserName FROM UserTable WHERE ID = :ID';
  ADOQ.SQL.Text := QueryStr;
  ADOQ.Parameters.ParamByName('ID').Value := ID;
  ADOQ.Open;      
  

   'SELECT Usertable.Username, Test.Testscore FROM Usertable, Test 
    WHERE Usertable.ID=Test.ID AND Test.Testscore>10'

使用JOIN可以更好地编写,并在必要时再次使用参数。

SELECT 
  U.UserName, T.TestScore 
FROM 
  UserTable u INNER JOIN TestTable T on U.ID = T.ID
WHERE 
  T.TestScore > 10

看来你的下一步应该是找一本好的SQL教程或书。