Работа с база данни за търсене и филтриране


Работа с бази данни е: търсене и филтриране.

Работа с бази данни е: търсене и филтриране.

1. Намерете Метод: Намерете Метод търси първият запис, който съответства на критериите за търсене, и ако се установи, такъв запис, го прави ток. В този случай, в резултат на Връща TRUE. Ако не бъде намерен на записа - False.

Списък KeyFields показва поле или няколко полета, в които се провеждат на търсенето. В случай на няколко полета за търсене, имената им са разделени с точка и запетая. Критерии за търсене са определени в масива варианта KeyValues ​​така че KeyValues ​​стойност-тото се свързва с областта-тото в KeyFields.
Опции ви позволява да посочите допълнителни режими стойности за търсене:
  • loCaseInsensitive - търсенето е нечувствително букви, т.е. KeyValues ​​биха взели думата "принтер" и "принтер" и "принтер" едни и същи.
  • loPartialKey - Влизане се счита отговаря на условието за търсене, ако той съдържа част от контекста на търсене, например, за да отговарят на контекста на "Ма" ще бъде признато от думите: "Мамо", "машина", и т.н.
Намерете търсения на всяка област; полк или полета на която да се търси не само не могат да бъдат включени в текущия индекс, но не се индексира изобщо.

Ако полетата във всеки индекс, по Намерете използва индексът на търсенето. Ако задължителните полета са включени в няколко показатели, че е трудно да се каже кои от тях ще бъдат използвани. В съответствие с това, че е трудно да се предскаже какво рекорда от многото записи, които отговарят на критериите за търсене ще направи тока - особено ако търсенето не е проведено в текущия индекс.

При търсене на полета, които не са част от всеки един индекс, който се използва BDE филтър. Ето един пример за използване на Откриване: В този пример, търсенето се извършва с помощта на един ред код:

Търсене метод е да откриете желаната опция, но не го правят ток, и връща стойността на някои области на този запис. тип Резултати - Вариант или вариант масив. Независимо от успеха на рекордно търсене, показалеца на текущия запис в таблицата не се променя. За разлика Намерете, търсене ще търси само за точни критерии за търсене мач и ценностите на рекордни области. В KeyFields конкретен списък на полета, на която искате да търсите. В присъствието на този списък на повече от едно поле съседни полета са разделени с запетая. KeyValues ​​показва стойностите на полетата за търсене, списъкът на които се съдържат в KeyFields.

Ако има няколко полета за търсене, всяка-тото поле в KeyFields е свързана със стойността на аз-ти в KeyValues. Ако има едно поле стойността търсене може да бъде определен като най-KeyValues ​​пряко; в случай на няколко области, те трябва да доведе тип вариант масив, използвайки VarArrayOf.

Както полето за търсене, можете да посочите поле като принадлежащи към всеки индекс и не са включени в него; Въведете текущия индекс не е от значение. Ако полето за търсене са включени в индекс, употребата му е автоматично; използва друго BDE филтри.

Ако не бъде намерен запис за търсене, методът връща търсене Null, който може да бъде проверен от оператора на иначе търсене върне от този запис стойности на полетата, списъкът на които включва ResultFields. Измерението на резултата зависи от това колко от получените областите, посочени в ResultFields:
  • едно поле - резултатът е подходящ тип или нула, ако полето намерено запис съдържа нулева стойност;
  • повече полета - резултатът е вариант масив, където броя на елементите, по-малък от или равен на броя на получените сфери (намерени полета някои записи могат да съдържат нула стойности).
Пример: Един пример на получения полето: Някои от получените областта Ако не е намерен запис, VarType (LookUpResults) връща varNull. Ако търсите по някаква причина не е направено, VarType (LookUpResults) връща VarEmpty. Ако някое от полетата, които се връщат в резултат от търсенето в масива вариант, който съдържа нулева стойност, съответстваща на елемент вариант масив също ще съдържа нулева стойност (нула). В този случай, позоваването на него ще доведе до изключителна ситуация, така че необходимостта от предварителна проверка.

F ПРИ L T R A T I О N

Имоти Филтър TTable компонент ви позволява да определите критерии за филтриране. В този случай, базата данни ще бъде филтриран, веднага след като Филтрирани Имотът е равен на TRUE. Синтаксисът е подобно на описанието на участъка за изпитване на синтаксиса на SQL-заявка КЪДЕ, с изключение, че не може да се уточни имената на програмата променливи, можете да посочите имената на полетата и литерали (изрично значението); Можете да използвате традиционните релационни оператори и логически оператори и, НЕ и ИЛИ, например:

Този пост ще напусне филтъра в таблицата за запис, в който поле Doljnost = 'доцент "и повече от 3000 TabNum низ филтър критерий може да влезе по време на програма се изпълни или на етапа на проектиране. Например, използването на такава манипулатор събитие OnChecked компонент критерий CheckBox1 филтриране чете от областта и се поставя в Edit1 имот Филтър Таблица 1 компоненти: Използване на допълнителни свойства могат да бъдат определени филтриращи свойства низ области:
  • foCaseInsensitive - филтриране не е чувствителна разлики
  • foNoPartialCompare - да се извършва търсене на точно съвпадение.

OnFilterRecord събитие се случва, когато е зададено True във филтрираната имота. манипулатор събитие има два параметъра: името на филтриран набор от данни и променлива Accept, в която програмата е да се постави Вярно е, ако текущия запис отговаря на състоянието на филтъра.

За разлика от критерий филтрираната линия, ограничава обхвата на условен израз синтаксис, критерият на прилагане в манипулатор събитие OnFilterRecord, дефинирани обект Pascal синтаксис и може да организира сложни филтриране алгоритми. Все пак трябва да се забравя, че в манипулатор OnFilterrecord се изпълнява за всички базата данни на записи, а SetRange на методи, ApplyRange и свързаните с тях методи на TTable използването индексирани метод за последователно, т.е. Те работят с част от записите във физическата база данни. Това прави използването на OnFilterRecord предпочитан манипулатор за филтриране на малки обеми документи, както и силно ограничава използването му за големи обеми от данни.

Всеки път, когато заявлението се справя събитие OnFilterRecord на набор от данни се прехвърлят от държавата към държавата dsBrowse dsFilter. Това предотвратява данни модификация, определени по време на филтрация. След приключване на текущата манипулатор събитие повикване ObFilterRecord данни, определени в състояние dsBrowse.

Пример: За да се създаде набор от данни от записите в базата данни, в която "Заглавие" на поле съдържа стойността "учител", можете да използвате този манипулатор: Друг пример: за да филтрирате база, "Работници" при условие, "Избор на всички, които табличен номер (област "#") е по-голяма от стойността, въведена от потребителя в Edit1, а в полето "Име" е подниз от символи, въведени от потребителя в Edit2 ":

Ако линията Филтър и събитие манипулатор OnFilterRecord задавате различни критерии за филтриране, като и двете.

Методи за засилено филтруване

1. Методи за филтрация

В допълнение към методите, описани по-долу, са уникални за TTable, набори от данни имат общи свойства, методи и събития за филтруване - Филтър, филтрува OnFilteredRecord, FindFirst, FindLast, FindNext, FindPrior.

За филтриране на записи TTable има следните методи:
  • SetRangeStart - задава долната граница на филтъра;
  • EditRangeEnd - utanavlivaet горната граница филтър;
  • ApplyRange - филтри вписванията в TTable;
  • SetRange - има същия ефект като последователни методи за изпълнение SetRangeStart, EditRangeEnd и ApplyRange.
Като параметри се използват константи масиви, всеки от които се състои от стойности на ключовите области.

методи за филтриране ApplyRange, SetRange трябва да се извършва по ключова polyam.Po подразбиране е текущата индекса, дефинирани TTable.IndexName имота или TTable.IndexFieldNames. Ако стойностите на тези имоти не са настроени, основният индекс се използва по подразбиране. Затова, ако искате да използвате индекс с изключение на капитана, трябва изрично да нулирате стойността на TTable.IndexName на собственост (текущото име на индекса) или TTable.IndexFieldNames (списък с области на текущия индекс).

2. Използване на SetRange

Методът показва не само записи индекс области, които лежат в интервала [StartValues..EndValues].

Пример: Да предположим, че всички записи са показани в набора от данни Таблица 1. Включени в комплекта на записването на данни структура на две области: "Номерът група" и "Име на артикул". Нека текущия индекс построен върху полето "Група номер".
Нека да напише това събитие манипулатор: CheckBox1.Click: В филтрираните данни, определени само тези записи, полето индекс на индекса, в който токът (в този случай, "броят група") има стойност, която е в рамките на предварително определен диапазон. В този случай, променливата границите, определени GrNumTmp. Следователно GrNumTmp = 3 ще бъдат показани записи, принадлежащи към групи 3.

Ако искахме да в набор от данни филтрира записването на няколко групи, ние ще трябва да се добавят под формата на втория компонент Edit2, в който последната група ще въведете цифра, докато сте в Edit1 да въведете номера на първоначалната група: процедура TForm1.CheckBox1Click (Sender: TObject);