Содержание
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;