Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2010, 14:44   #11
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от vuzhakov Посмотреть сообщение
За компонент спасибо — поковыряю его.
Кстати, генератор-то использовать можно созданный ранее для триггера?
Пожалуйста... в компоненте можно выбирать из списка созданных генераторов в БД.

p.s. это пиндец какой-то писал писал, плять, и браузер отвалился... цука
Чё я хотел сказать, у меня в DataModule есть такая функция:
Код:
  
public
    { Public declarations }
    Function GENERATE_ID(TableName:String):Integer;
Функция возвращает новый Номер

И вот как она реализована:
Код:
Function TDM.GENERATE_ID(TableName:String):Integer;
var
  SQL_FindMaxID, {Запрос на поиск максимального ID}
  SQL_CheckIsEmpty, {Запрос на проверку, есть ли данные в таблице}
  FieldName : String; {Имя поля, по которому идёт генерирование нового ID}
  IsEmpty : Boolean;
begin
//ГЕНЕРАЦИЯ УНИКАЛЬНОГО НОМЕРА;
  SQL_FindMaxID := '';
  SQL_CheckIsEmpty := '';
  FieldName := '';
  IsEmpty := False;

  //Определение имени таблицы;
  IF TableName = '' then begin
    Result := -1;
    Exit;
  end;

  IF TableName = 'Catalog' then FieldName := 'CAT_ID';
  IF TableName = 'Content' then FieldName := 'CON_ID';

  //Генерация запроса к БД;
  SQL_FindMaxID := 'SELECT Max('+FieldName+') as ID_Last FROM '+TableName;
  SQL_CheckIsEmpty := 'SELECT Count('+FieldName+') as ID_Last FROM '+TableName;

  //Подготовка к расчёту уникального номера (ID);
  TRY
    qryExec.SQL.Clear;
    qryExec.SQL.Text := SQL_CheckIsEmpty;
    qryExec.Open;

    //Если в БД данных нет, значит ID генерируется первый раз!
    IF qryExec.FieldByName('ID_Last').asInteger = 0 then IsEmpty := True;

    //Определение Уник.Номера;
    IF not IsEmpty then
    begin
      qryExec.SQL.Clear;
      qryExec.SQL.Text := SQL_FindMaxID;
      qryExec.Open;

      Result := qryExec.FieldByName('ID_Last').asInteger;
      Inc(Result); //Полученный МАКСимальный номер, увеличиваем на +1
    end
      else Result := 1; {Если таблица пуста, получает номер 1}


  EXCEPT
    Result := -1;

    Application.MessageBox
      ('Ошибка генерации Уникального номера!'+#13+
       'Дальнейшее продолжение работы невозможно.',
       'Error generation of unique id',
       MB_OK+MB_ICONERROR);

    IF DBMain.InTransaction then DBMain.Rollback;
  END;

end;
Когда мне нужно получить НовыйУникНомер:
Код:
qryINSERT.ParamByName('ID').asInteger := GENERATE_ID('Catalog');

Последний раз редактировалось bezOn; 27.04.2010 в 15:08.
bezOn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
делфи ругается при добавлении записи Cannibal БД в Delphi 8 23.04.2010 15:49
Событие при добавлении записи в BDGrid Alexeyss БД в Delphi 2 19.08.2009 23:37
Проверка при добавлении записи Tanya2008 БД в Delphi 3 22.04.2009 10:07
Проблема при добавлении в БД Oleg Romanchuk БД в Delphi 2 12.01.2009 12:21
при добавлении новой записи через форму подставлолось значение из другой таблицы Baxxter Microsoft Office Access 1 07.01.2009 22:23