Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DelphiSQL搜索,包含两个列_Delphi_Filtering_Dbgrid - Fatal编程技术网

DelphiSQL搜索,包含两个列

DelphiSQL搜索,包含两个列,delphi,filtering,dbgrid,Delphi,Filtering,Dbgrid,当我尝试搜索这两列时,没有过滤器。我想在dbgrid中列出2016年5月5日和30日 adoquery1.Close; adoquery1.SQL.CLEAR; adoquery1.SQL.Add('select * FROM Sheet11 '); adoquery1.SQL.Add('where field9 like :blm and field12 like :blm1'); adoquery1.Parameters.ParamByName('blm').Value:='5'; adoq

当我尝试搜索这两列时,没有过滤器。我想在dbgrid中列出2016年5月5日和30日

adoquery1.Close;
adoquery1.SQL.CLEAR;
adoquery1.SQL.Add('select * FROM Sheet11 ');
adoquery1.SQL.Add('where field9 like :blm and field12 like :blm1');
adoquery1.Parameters.ParamByName('blm').Value:='5';
adoquery1.Parameters.ParamByName('blm1').Value:='30.05.2016';
adoquery1.Open;

那么问题到底是什么呢? 使用参数是正确的,由于各种脆弱性和意外的副作用,最好不要使用字符串拼接-

并使用正确的数据类型

adoquery1.SQL.Text := 'select * FROM Sheet11 ' +
                      'where ( field9 = :_p_field9 ) ' + 
                      '  and ( field12 = :_p_field12 )';
with adoquery1.Parameters do begin
   ParamByName('_p_field9').AsInteger := 5;
   ParamByName('_p_field12').AsDateTime := EncodeDate( 2016, 05, 30 );
end;
adoquery1.Open;

那么问题到底是什么呢? 使用参数是正确的,由于各种脆弱性和意外的副作用,最好不要使用字符串拼接-

并使用正确的数据类型

adoquery1.SQL.Text := 'select * FROM Sheet11 ' +
                      'where ( field9 = :_p_field9 ) ' + 
                      '  and ( field12 = :_p_field12 )';
with adoquery1.Parameters do begin
   ParamByName('_p_field9').AsInteger := 5;
   ParamByName('_p_field12').AsDateTime := EncodeDate( 2016, 05, 30 );
end;
adoquery1.Open;

您有一个非常严重的SQL错误
LIKE
不适用于字符串以外的任何类型(CHAR、VARCHAR等)。它不适用于数字或日期。您要查找的是
=
的精确匹配,或者
之间的值,如果您想要两个值之间的值

这应该适合您:

  adoquery1.Close;
  adoquery1.SQL.CLEAR;
  adoquery1.SQL.Add('select * FROM Sheet11 ');
  adoquery1.SQL.Add('where field9 = :blm and field12 = :blm1');
  adoquery1.Parameters.ParamByName('blm').Value:= 5; // Notice no quotes
  adoquery1.Parameters.ParamByName('blm1').Value:= '2016-05-30'; // Note no extra quotes
  adoquery1.Open;

您有一个非常严重的SQL错误
LIKE
不适用于字符串以外的任何类型(CHAR、VARCHAR等)。它不适用于数字或日期。您要查找的是
=
的精确匹配,或者
之间的值,如果您想要两个值之间的值

这应该适合您:

  adoquery1.Close;
  adoquery1.SQL.CLEAR;
  adoquery1.SQL.Add('select * FROM Sheet11 ');
  adoquery1.SQL.Add('where field9 = :blm and field12 = :blm1');
  adoquery1.Parameters.ParamByName('blm').Value:= 5; // Notice no quotes
  adoquery1.Parameters.ParamByName('blm1').Value:= '2016-05-30'; // Note no extra quotes
  adoquery1.Open;

field9
的类型是什么?
field9
的类型是什么?这是一个比我的(现已删除)更好的解决方案。@Dsm好吧,也许是,也许不是。我还是不明白这里有什么问题?你的解决方案肯定比我的好。至于问题是什么-我-我不是SQL方面的专家,但是日期字段不需要用引号括起来吗?我希望原始查询生成“从sheet11中选择*,其中字段9类似于5,字段10类似于2016年5月30日”。但也许我错了…@Dsm,好吧,话题发起者没有说出他的具体问题,所以我们只能在我的盲目猜测中徘徊。有很多潜在的问题,哪一个是他的低处——我们只能猜测,除非他走到我们面前,把它说出来:-(然而,对于日期-是的,它应该以字符串文字表示,引用,现在我们开始-不同的数据库引擎需要不同的引号,不同的特殊字符串表示模式,其中一些没有隐式自动类型转换,需要显式转换字符串到日期。这一切都可能是他的问题,或者C不是这样。我们只能猜测:-(这是一个比我的更好的解决方案(现已删除)@Dsm好吧,也许是,也许不是。我仍然不明白这里的问题是什么?好吧,你的解决方案肯定比我的好。至于问题是什么-我-我不是SQL专家,但日期字段不需要用引号括起来吗?我希望原始查询生成“从表11中选择*,其中字段9如5,字段10如30.05.2016”。但也许我错了…@Dsm,好吧,话题发起人没有说出他具体的问题,所以我们只能在myst盲目猜测中徘徊。有许多潜在问题,哪一个是他的低处-我们只能猜测,除非他走到我们面前,把问题说出来:-(然而,对于日期-是的,它应该以字符串文字表示,引用,现在我们开始-不同的数据库引擎需要不同的引号,不同的特殊字符串表示模式,其中一些没有隐式自动类型转换,需要显式转换字符串到日期。这一切都可能是他的问题,或者C可能不是。我们只能猜测:-(