从包含许多子句的表中选择数据,其中1

时间:2018-05-14 10:24:27

标签: delphi

我不知道如何在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) ;`

2 个答案:

答案 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;