按记录字段搜索数据库表,并在cxgrid上显示记录

xriantvc  于 2022-10-16  发布在  其他
关注(0)|答案(2)|浏览(227)

让用户在数据库表中搜索记录的最佳方式是在文本框中输入文本,然后单击按钮,然后结果将显示在tcx网格上。
我有一个tadQuery/数据源,它正在查看一个包含各种字段的表。如果用户能够搜索表中的多个字段,那就更好了。
谢谢。

xytpbqjk

xytpbqjk1#

为此,您可以使用TDataSet.Locate,传递以分号分隔的字段名列表和要匹配的常量字段值的数组。通常,这很简单:

DataSet.Locate('Field1;Field2', ['Value1', 'Value2'], [loPartialKey]);

但是,由于您事先不知道有多少列,因此需要以不同的方式处理数组,使用VarArrayCreate并分别设置每个数组值。
本例采用Edit1中的字段列表(用分号分隔),Edit2中要匹配的值列表(同样,用分号分隔,字符串值由'字符括起来,以便它们正确地包含在数组中)。它将Edit1的内容拆分成一个数组,以确定有多少元素,分配一个大小合适的变量数组,填充它,然后将字段列表和值数组传递给TDataSet.Locate。用Edit1.Text := 'Customer_No;Name';Edit2.Text := '1;''Smith''';进行检测。

procedure TForm5.Button1Click(Sender: TObject);
var
  Temp: string;
  Fields: TArray<string>;
  Vals: TArray<string>;
  FieldValues: Variant;
  i: Integer;
begin
  // Grab a copy so we can split it into separate values
  Temp := Edit1.Text;
  Fields := Temp.Split([';']);

  // Create the array of variants to hold the field values    
  FieldValues := VarArrayCreate([0, High(Fields)], VarVariant);

  // Temporary copy to allow splitting into individual values      
  Temp := Edit2.Text;
  Vals := Temp.Split([';']);
  for i := 0 to High(Fields) do
    FieldValues[i] := Vals[i];

  // Use original field list from Edit1 for the Locate operation
  DataSet1.Locate(Edit1.Text, FieldValues, [loCaseInsensitive]);
end;

对于包含TStringHelper之前的Delphi版本(如您正在使用的XE2,只需在USES子句中添加TypesStrUtils,并使用SplitStringTStringDynArray

procedure TForm5.Button1Click(Sender: TObject);
var
  Temp: string;
  Fields: TStringDynArray;
  Vals: TStringDynArray;
  FieldValues: Variant;
  i: Integer;

begin
  Temp := Edit1.Text;
  Fields := SplitString(Temp, ';');

  FieldValues := VarArrayCreate([0, Length(Fields)], VarVariant);
  Temp := Edit2.Text;
  Vals := SplitString(Temp, ';');
  for i := 0 to High(Fields) do
    FieldValues[i] := Vals[i];

  DataSet1.Locate(Temp, FieldValues, [loCaseInsensitive]);
end;
z4iuyo4d

z4iuyo4d2#

我将对数据源使用查询,并在按钮的onClick事件中,使用WHERE子句重新加载查询,如下所示

Query1.SQL.Add('WHERE Name LIKE :P1 OR Postcode LIKE :P2 OR Town LIKE :P3');

并添加参数

Query1.SQL.Parameters.ParamByName('P1').Value := '%' + Edit1.Text + '%';
Query1.SQL.Parameters.ParamByName('P2').Value := '%' + Edit1.Text + '%';
Query1.SQL.Parameters.ParamByName('P3').Value := '%' + Edit1.Text + '%';

使用‘%’允许搜索字符串中的任何位置作为选项。

Query1.Open;

这个技巧我已经用过很多次了。

相关问题