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;
2条答案
按热度按时间xytpbqjk1#
为此,您可以使用
TDataSet.Locate
,传递以分号分隔的字段名列表和要匹配的常量字段值的数组。通常,这很简单:但是,由于您事先不知道有多少列,因此需要以不同的方式处理数组,使用
VarArrayCreate
并分别设置每个数组值。本例采用
Edit1
中的字段列表(用分号分隔),Edit2
中要匹配的值列表(同样,用分号分隔,字符串值由'
字符括起来,以便它们正确地包含在数组中)。它将Edit1
的内容拆分成一个数组,以确定有多少元素,分配一个大小合适的变量数组,填充它,然后将字段列表和值数组传递给TDataSet.Locate
。用Edit1.Text := 'Customer_No;Name';
和Edit2.Text := '1;''Smith''';
进行检测。对于包含
TStringHelper
之前的Delphi版本(如您正在使用的XE2,只需在USES子句中添加Types
和StrUtils
,并使用SplitString
和TStringDynArray
:z4iuyo4d2#
我将对数据源使用查询,并在按钮的onClick事件中,使用WHERE子句重新加载查询,如下所示
并添加参数
使用‘%’允许搜索字符串中的任何位置作为选项。
这个技巧我已经用过很多次了。