Содержание
Dataset.Find(Column, Value [,Column2, Value2] : Variant [; Start : Integer]) : Integer
Dataset.Find(ColumnsAndValues : Array [; Start : Integer]) : Integer
Поиск в датасете
Метод Dataset.Find ищет строку и возвращает её номер. Ищет строку в которой колонка Column равна значению аргумента Value и колонка Column2 равна значению аргумента Value2.
Аргументы Column, Column2 содержат либо номер колонки (значение типа Integer, нумерация начинается с 0), либо имя колонки (значение типа String).
Аргументы Column2 и Value2 могут быть не указаны, в этом случае проверяется только равенство колонки Column.
Второй вариант метода принимает вместо аргументов Column и Value массив ColumnsAndValues, который должен содержать пары значений Column, Value. Количество значений не ограничено.
Аргумент Start содержит номер строки с которой начинается поиск. Если аргумент не указан, поиск начинается с начала датасета.
Для поиск данных в датасетах вместо Dataset.Find можно использовать SQL-запросы.
Пример:
Procedure OnCreate;
Var
D : Dataset Of Record Name : String; Age, Weight : Integer; End;
i : Integer;
Begin
D.Count := 4;
D[0].Name := 'Алексей'; D[0].Age := 20; D[0].Weight := 70;
D[1].Name := 'Андрей'; D[1].Age := 25; D[1].Weight := 95;
D[2].Name := 'Петр'; D[2].Age := 30; D[2].Weight := 55;
D[3].Name := 'Андрей'; D[3].Age := 25; D[3].Weight := 90;
// Поиск по одному полю
i := D.Find('Name', 'Петр');
Warning('1) ' + ToStr(i));
// 1) 2
// Поиск по двум полям
i := D.Find('Name', 'Андрей', 'Age', 25);
Warning('2) ' + ToStr(i));
// 2) 1
// Поиск по двум полям, начиная со строки 2
i := D.Find('Name', 'Андрей', 'Age', 25, 2);
Warning('3) ' + ToStr(i));
// 3) 3
// Поиск по множеству полей
i := D.Find(['Name', 'Петр', 'Age', 30, 'Weight', 55]);
Warning('4) ' + ToStr(i));
// 4) 2
End;
Для поиск данных в датасетах вместо Dataset.Find можно использовать SQL-запросы.
Пример:
Procedure OnCreate;
Var
D : Dataset Of Record Name : String; Age, Weight : Integer; End;
D1 : Dataset;
MinAge : Integer;
S : String;
Begin
D.Count := 4;
D[0].Name := 'Алексей'; D[0].Age := 20; D[0].Weight := 70;
D[1].Name := 'Андрей'; D[1].Age := 25; D[1].Weight := 95;
D[2].Name := 'Петр'; D[2].Age := 30; D[2].Weight := 55;
D[3].Name := 'Андрей'; D[3].Age := 25; D[3].Weight := 90;
// SQL запрос
MinAge := 25;
D1 := (Select Name, Age From :D Where Age>=:MinAge Order By Age Desc);
Warning('1) '+StrReplace([Chr(10), Chr(13)], ' ', ToStr(D1)));
// 1) Петр;30 Андрей;25 Андрей;25
// SQL запрос возвращающий единственное значение
S := (Single Name+' '+:ToStr(Age) From :D Where Name<>'Андрей');
Warning('2) '+S);
// 2) Алексей 20
End;
справка