Последователна навигация в публикации

Сайт на Delphi: ежедневни Delphi-новини, документация, статии, преглед, интервю, компютърен хумор.

За да извършите операции по последователно изброяване на записи, започвайки от някакъв начален запис и до края на набора от данни, използвайте цикъла while. направи или повтори. до:

с Таблица започнете

докато не започва EOF

с Таблица започнете

По същия начин можете да преминете от края на ND към началото му:

с Таблица започнете

докато не започва BOF

с Таблица започнете

Ако ND ви позволява да извикате запис по неговия номер (свойството му IsSequenced в този случай трябва да съдържа стойността True), можете да използвате for цикъл. Например следният манипулатор на събития TForm. On Act vate ще постави всички стойности на низовото поле BName ND Books в многоредово текстово поле на Memol:

процедура TForml.FormActivate(Подател: TObject); вар

RecNo: Цяло число; започвам

ако Books.IsSequenced тогава

за RecNo := 1 към Books.RecordCount do

Books.RecNo := RecNo; Memol.Lines.Add(Tablel['BName1]) end; край;

Отбелязвам, че за компонентите TTable и TQuery, свързани с таблиците на базата данни на файловия сървър, свойството IsSequenced винаги съдържа стойността True. В архитектура клиент-сървър това зависи от използвания сървър на база данни. Свойството RecNo на набора от данни определя поредния номер на обработения запис (номерирането започва от 1), а свойството RecordCount определя броя на записите.

Във всички случаи трябва да се помни, че ако ключовото поле на записа се промени по време на изпълнение на цикъла на последователно изброяване на записи или в ND се вмъкне нов (стар) запис, ND курсорът може да промени позицията си и правилната работа на цикъла ще бъде нарушена. Ако, например, искаме да премахнем всички записи от таблица, следният фрагментпрограмата ще бъде неправилна:

с Table do докато не EOF do start

Изтрий; следващия; край;

След изтриване на следващия запис, ND курсорът ще се премести към следващия, но извикването на Next ще го накара да се премести отново и следващият запис ще бъде пропуснат. Правилен вариант: