通过记录字段和显示记录上cxgrid搜索数据库表

问题描述 投票:0回答:2

什么是允许用户通过键入文本TEDIT箱点击一个按钮,然后将结果再显示到tcxgrid搜索记录保存在数据库表中的最佳途径。

我有一个tadquery /数据源是在看,它含有各种字段的表。如果用户能够在表格中搜索多个字段这将是很好。

谢谢。

delphi delphi-xe2 sybase-asa tcxgrid
2个回答
0
投票

您可以使用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的(如XE2你使用,只需添加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;

0
投票

我会用一个查询的数据源,并在按钮的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;

我用这个技术很多次。

© www.soinside.com 2019 - 2024. All rights reserved.