Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  1 745

•  TDictionary Custom Sort  4 301

•  Fast Watermark Sources  3 984

•  3D Designer  6 155

•  Sik Screen Capture  4 234

•  Patch Maker  4 782

•  Айболит (remote control)  4 709

•  ListBox Drag & Drop  3 825

•  Доска для игры Реверси  90 923

•  Графические эффекты  5 026

•  Рисование по маске  4 068

•  Перетаскивание изображений  3 391

•  Canvas Drawing  3 722

•  Рисование Луны  3 496

•  Поворот изображения  3 035

•  Рисование стержней  2 646

•  Paint on Shape  2 036

•  Генератор кроссвордов  2 818

•  Головоломка Paletto  2 223

•  Теорема Монжа об окружностях  2 936

•  Пазл Numbrix  1 981

•  Заборы и коммивояжеры  2 582

•  Игра HIP  1 598

•  Игра Go (Го)  1 526

•  Симулятор лифта  1 812

•  Программа укладки плитки  1 552

•  Генератор лабиринта  1 928

•  Проверка числового ввода  1 688

•  HEX View  1 867

•  Физический маятник  1 694

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



Автор: Андрей Марин

{ **** 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]);




Похожие по теме исходники

Драйвер клавиатуры под DOS




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте