Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.12.2008, 14:07
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию выполнить действие если оно = тому или другому условию

Подскажите пожалуйста, как сделать следующее: (база акес) при добавлении записи, в одно поле ручками забивается дата к примеру (01.01.2008) то во второе поле автоматом должен забивается номер приказа (№ 1), добавляется еще одна запись дата таже (01.01.2008) то номер приказа будет такой (№ 1/1) и если добавить еще запись с тойже датой (01.01.2008) то приказ (№ 1/2). Добавляется еще одна запись дата уже большая (05.01.2008) то приказ (№ 2). И еще одно условие при наступлении нового года нумерация приказов должна начинатся с начала (№ 1)
Ответить с цитированием
  #2  
Старый 22.12.2008, 17:52
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

ну самое простое - вести табличку в которой для каждой даты будет храниться номер последнего приказа.

1.ручками забиваем дату
2. тут можно по разному (кнопкой, на потерю фокуса, на изменение) анализируем что было введено, если дата верная, то смотрим в табличку есть ли запись с такой датой, если есть то номер приказа берем оттуда и увлеичиваем в табличке на 1, если нет создаем запись и ставим в нее номер 2, а в эдит пишем 1

PS каков вопрос - таков ответ
__________________
правильный вопрос содержит в себе 90% ответа
Ответить с цитированием
  #3  
Старый 23.12.2008, 12:40
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Цитата:
PS каков вопрос - таков ответ
Расширяю вопрос. База акес(baza) с табличкой (glavnay) в которой 3 столбца: первый (id), второй (dataP), третий (nomerP).
xchrom (лучше на кнопку), а как это в коде реализовать???
Ответить с цитированием
  #4  
Старый 23.12.2008, 14:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В BeforePost можно сделать запрос в БД, получить последний номер, прибавть к нему единичку и "положит" в соответсвующее поле. Кроме того, надо будет сделать индекс по дате.

Второй вариант - написать процку, которая по переданной дате вернет следующий номер. Это оптимальный вариант. Фактически, в этом случае твой код не будет зависить от того, как ты реально получаешь номер следующего договора. Это может быть какой-либо счетчик (отдельная таблица типа "Год-счетчик"), это может быть запрос а-ля первый вариант, ну или любой другой вариант, который ты придумаешь.
Ответить с цитированием
  #5  
Старый 23.12.2008, 14:56
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

хм... ну например получение номера следующего документа на определенную дату можно оформить такой функцией
Код:
// функция получения следующего номера документа за определенную дату
function TForm1.GetNewNum(dt: integer): string;
begin
  //seq - табличка в БД с двумя полями, описание полей ниже
  if not seq.Locate('dat',dt,[]) then //ищем дату такую в табличке
  begin //если не нашли, добавляем запись и номер ставим 2, возвращаем 1
    seq.Insert;
    seq.FieldByName('dat').AsInteger := dt;//тип целое. ключевое. дата приказа в виде целого числа
    seq.FieldByName('nxt').AsInteger  := 2;//тип целое. номер следующего приказа за дату
    seq.Post;
    Result := '1';
    Exit;
  end
  else
  begin //если нашли дату, т.е. были документы на эту дату
    Result := seq.fieldbyname('nxt').AsString;//берем номер
    seq.Edit;
    // и увеличиваем в табличке на 1
    seq.FieldByName('nxt').AsInteger := seq.FieldByName('nxt').AsInteger +1;
    seq.Post;
  end;
end;

PS это не решение твоей задачи, а так наводка на мысли, делать все за тебя мне скучно
__________________
правильный вопрос содержит в себе 90% ответа
Ответить с цитированием
  #6  
Старый 23.12.2008, 14:56
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

глюк, надо удалить
__________________
правильный вопрос содержит в себе 90% ответа
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter