如何在有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'
我不确定上述陈述是否有意义或是否有效(我应该以不同方式构建陈述)吗?
答案 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教程或书。