我不知道如何在delphi中从具有许多条件的表中选择它是我的代码
qr_catdegree.Close;
qr_catdegree.SQL.Clear;
qr_catdegree.SQL.Add('select * from cat_degreee where id_categ =+inttostr(id_categ) and id_degree=+`inttostr(id_degree)' );
//qr_catdegree.SQL.Add(');
qr_catdegree.Open;
Indice_degree := qr_catdegree.FieldByName('Indice_degree').Asinteger;
edit15.text := inttostr(Indice_degree) ;`
答案 0 :(得分:1)
我认为你很困惑,因为你试图在SQL.Add的调用中构建你的Sql。这会掩盖您尝试中的语法错误。
试试这个
var
S : String;
[...]
qr_catdegree.Close;
qr_catdegree.SQL.Clear;
S := 'select * from cat_degreee where id_categ = ' + inttostr(id_categ);
// do you REALLY mean 'degreee' and not 'degree'???
S := S + ' and id_degree = ` + inttostr(id_degree);
qr_catdegree.SQL.Add(S);
顺便说一句,你会注意到Ken White的评论建议使用参数而不是你现在正在做的事情。我同意他的建议有两个原因:
首先,在预先准备的SQL查询中使用参数会减少服务器的开销,因为它只需要解析和编译一次查询,而不是每次执行查询。使用参数,您可以使用不同的参数值重复执行查询。
其次,在SQL中包含+ IntToStr(SomeInteger)
这样的表达式只包含+ Edit1.Text
之类的内容只需要一小步,你真的应该避免永远这样做。原因是它使您的代码暴露于" SQL-Injection" (参见https://en.wikipedia.org/wiki/SQL_injection),因为它为恶意用户提供了在他们输入TEdit的内容中添加附加SQL命令的机会。
答案 1 :(得分:0)
正如@KenWhite和@GerryCall所说,使用参数;
qr_catdegree.Close;
qr_catdegree.SQL.Text := 'select * from cat_degreee where id_categ = :id_categ';
qr_catdegree.SQL.Add('and id_degree = :id_degree');
qr_catdegree.Parameters.ParamByName('id_categ').Value := id_categ;
qr_catdegree.Parameters.ParamByName('id_degree').Value := id_degree;
qr_catdegree.Open;