Create site free
Получение уникального номера, под которым можно вставить запись в таблицу - Записи - Базы данных в Delphi - Каталог статей - Mvi - развлечения
Среда, 08.02.2012, 14:40
Музыка, видео, игры - MVI
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
ADO [15]
ASCII и CSV [12]
Access [19]
Alias [24]
BDE [37]
BLOB поля [19]
Clipper [2]
DB2 [2]
DBASE и DBF [26]
Fox Pro [1]
Interbase [21]
MSSQL [13]
ODBC [10]
Oracle [19]
Paradox [28]
SQL [30]
Sybase [1]
База данных [31]
Закладки [2]
Записи [19]
Индексы [10]
Компоненты и Базы данных [11]
Модуль данных [3]
Отчеты [3]
Ошибки БД [17]
Поиск [17]
Поля [36]
Сортировка и Фильтр [6]
Таблицы [39]
Мини-чат
Наш опрос
Нужна ли на этом сайте информация по Delphi?
Всего ответов: 25
Главная » Статьи » Базы данных в Delphi » Записи

Получение уникального номера, под которым можно вставить запись в таблицу

Автор: Андрей Марин
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение уникального номера, под которым можно вставить запись в таблицу

Эта функция может быть использована только для тех таблиц,
у которых первое поле - уникальное и ключевое, и при этом
больше ключевых полей нет. Первое поле может иметь как целый тип,
так и вещественный, но содержать только целые значения.
Вместо этой функции можно было бы использовать значение
Table.RecordCount если бы не было необходимости удалять
записи из таблицы. При удалении записи из таблицы возрастание
номеров идёт с разрывами. В принципе, эта проблема может быть
решена и возвращением номера, на единицу боьше последнего,
однако такой вариант плох для таблиц с количеством записей,
сопоставимым с максимальным значением переменной типа Cardinal
и/или для таблиц, с которыми часто совершаются операции
добавления и удаления записей. Предполагается, что первое
значение - 0, второе - 1 и т.д.

Зависимости: DBTables
Автор: Андрей Марин, andrei_marin@mail.ru, Москва
Copyright: Собственное написание Андрея Марина
Дата: 27 сентября 2002 г.
***************************************************** }


function GetId(Tab: TTable): Cardinal;
var
i: Integer; // предполагается, что первое поле - целое, ключевое и при этом
s: string; // больше ключевых полей в этой таблице нет
begin
if Tab.RecordCount = 0 then
begin
Result := 0;
Exit
end;
s := Tab.IndexFieldNames; // сохранение индекса
Tab.IndexFieldNames := Tab.Fields[0].DisplayName;
// установка первого поля в качестве индексного
Tab.Last;
if Tab.Fields[0].AsInteger = Tab.RecordCount - 1 then
begin // если числовой ряд полон
Result := Tab.RecordCount;
Tab.IndexFieldNames := s;
Exit
end;
Tab.First; // в противном случае поиск "дырки"
i := Tab.Fields[0].AsInteger;
if i > 0 then
Result := 0 // если ряд начинается не с нуля, то результат - ноль
else
repeat // собственно поиск
i := Tab.Fields[0].AsInteger;
Tab.Next;
Result := i + 1;
if Tab.Fields[0].AsInteger > i + 1 then
Break
until Tab.Eof;
Tab.IndexFieldNames := s
end;

Пример использования:

Table2.AppendRecord([GetId(Table2), i + 1, BaloonAreas.Pages[i].Tag, p.fi, p.l,
q.fi, q.l, Radius1.Value, R2, R3, BalBeginAngle.Value, BalEndAngle.Value,
BalSectorGroup.ItemIndex, p1.fi, p1.l, q1.fi, q1.l]);
Категория: Записи | Добавил: mvi (28.10.2008)
Просмотров: 150 | Рейтинг: 0.0/0 |
Всего комментариев: 0

При копировании материалов данного сайта, ссылка на него обязательна!

Имя *:
Email:
Код *:
Форма входа
E-mail:
Пароль:
Поиск
Друзья сайта
Анекдоты
Реклама
Статистика


Рейтинг@Mail.ru

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright MyCorp © 2012 Хостинг от uCoz