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

•  DeLiKaTeS Tetris (Тетрис)  136

•  TDictionary Custom Sort  3 318

•  Fast Watermark Sources  3 065

•  3D Designer  4 825

•  Sik Screen Capture  3 321

•  Patch Maker  3 536

•  Айболит (remote control)  3 637

•  ListBox Drag & Drop  2 996

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

•  Графические эффекты  3 927

•  Рисование по маске  3 232

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

•  Canvas Drawing  2 735

•  Рисование Луны  2 561

•  Поворот изображения  2 166

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

•  Paint on Shape  1 564

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

•  Головоломка Paletto  1 764

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

•  Пазл Numbrix  1 682

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

•  Игра HIP  1 279

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

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

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

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

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

•  HEX View  1 490

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

 
скрыть


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

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



Delphi Sources

Использование AutoInc полей в приложениях Midas



Автор: Бушин Сергей

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Использование AutoInc полей в приложениях Midas

При использовании полей AutoInc в клиентских приложениях наблюдается
следующая ситуация: при вставке новых записей в таблицу происходит
исключение EkeyViolation. Данное исключение указывает на тот факт,
что поле с типом данных AutoInc автоматически в ClientDataSet не
инкрементируется. По этой причине необходимо постоянно применять
и обновлять данные, после каждой вставки. Т.е. использовать пару
CDS.ApplyUpdates()/CDS.Refresh. Этот прием вполне приемлем при
локальном использовании и клиента и сервера, но в сети сводит на
нет все преимущества использования DataSnap. И в таком случае клиент
не сможет вставлять данные, если у него нет соединения с сервером
или ему (клиенту) необходимо иметь постоянный доступ к серверу.

Единственный выход из данной ситуации это самому генерировать значения
для полей с типом AutoInc в клиентском приложении. А когда сервер
будет обновлять данные, полеченные от клиента, то он не будет учитывать
значения поля AutoInc при вставке.

Да еще один важный момент касается уже существующих записей. Когда
CDS обновит данные, чтобы нам не конфликтовать с уже существующими
значениями, нужно генерировать отрицательные значения. Теперь при
вставке нам нужно сгенерировать нужное значение.

Второй код - еще одна возможность: это использование агрегатов

Зависимости: DB, DBClient, MConnect, SysUtils, Classes
Автор:       Бушин Сергей, sanbotech@yandex.ru, Братск
Copyright:   1)Бушин Сергей, 2)Borland Corparation
Дата:        14 января 2003 г.
***************************************************** }

MyAutoIncValue: longint;
…

procedure TmyModaule.ClientDSAfterInsert(DataSet: TDataSet);
begin
  ClientDS.MyAutoIncField.AsInteger := MyAutoIncValue;
  //генерируем новое значение
  Dec(MyAutoIncValue);
end;

procedure TMyModule.ClientDSAfterRefresh(DataSet: TDataSet);
begin
  //Сбрасываем значение счетчика
  MyAutoIncValue := -1;
end;
...

//вторая возможность - использование агрегатов
var
  NewID: Integer;
begin
  with ClientDataSet do
  begin
    //вначале отключаем и очищаем агрегаты
    AggregatesActive := False;
    Aggregates.Clear;
    //Теперь добавляем
    with Aggregates.Add do
    begin
      //здаем ему выражение
      Expression := 'Max(AField)';
      //имя
      AggregateName := 'Runtime';
      //активизируем его
      Active := True;
    end;
    //подключаем агрегаты
    AggregatesActive := True;

    try
      //Теперь генерируем наше новое значение
      NewID := Aggregates[0].Value;
      // ...или еще одна альтернатива
      // NewID := Aggregates.Find('Runtime').Value;
      Inc(NewID);
    except
      on E: Exception do
        SomeHandle;
    end;
    //вставляем и присваиваем
    Insert;
    FieldByName('AField').AsInteger := NewID;
  end;
end;







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

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