Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема в составлении ХП [D6, FireBird 1.5]


Koala ©   (2004-07-13 11:26:00) 

Как собака, понимать понимаю, а сказать не могу.... (народная мудрость).
Такая проблема, есть таблица, в ней поля:(ID(первичный, уникальный ключ), pole1(вторичный ключ), pole2, pole3, pole4, pole5).
По теории пользователь не должен изменять данные за прошлый период, но как и везде есть исключения...
Пользователь изменяет pole3 которое было допустим 95,7 на 89. разница в 6,7. Так вот задача следующая, необходимо значение pole3 изменить на 89, а затем по ключу pole1 выбрать строки и изменить значения в pole2 и pole3 на 6,7 отталкиваясть от записи которую пользователь изменил.
Пример:
Таблица OLD
pole1, pole2, pole3, pole4, pole5
1      1      85     92.3   150
2      1      92.3   98.3   130
3      2      16     22.5   150
4      1      98.3   108.7  100
5      2      22.5   28.3   150

Таблица New
pole1, pole2, pole3, pole4, pole5
1      1      85     92.3   150
2      1      92.3   93.3   130
3      2      16     22.5   150
4      1       93.3   103.7  100
5      2      22.5   28.3   150
надеюсь что понятно изложил...


Ильш   (2004-07-13 13:14:00) [1]

дело не локальности... дело в структуре :(


Koala   (2004-07-13 12:52:00) [2]


> Ильш ©   (13.07.04 12:31) [12]

проектировалась как локальная, для 1 чела, но работают теперь 5 чел. приходится переделывать, и база очень сильно выросла, тупит и сыпется


Ильш   (2004-07-13 12:31:00) [3]

ДОКИ forever !!!
КНИГИ  forever !!!
в конце концов F1  forever !!!
:))))

спроектировано опупительски.. :( надо переделывать.. но перед этим читать теорию.... ЧИТАТЬ !!!!


Sandman25   (2004-07-13 12:24:00) [4]

[10] Koala   (13.07.04 12:01)

Читать документацию. ibase.ru тоже поможет.
create trigger ...


Koala   (2004-07-13 12:01:00) [5]

база была на Dbase? перевожу на FireBird, так-что все только проектируется и любая помощь или совет приветствуется на УРА...

> Sandman25 ©   (13.07.04 11:56) [8]

я это и приблизительно понял, но как сделать ???????? не знаю с IB FB только начинаю работать


Johnmen   (2004-07-13 11:57:00) [6]

>Sandman25 ©   (13.07.04 11:38) [2]

Полностью согласен.

>Koala

Перепроектируй в соответствии с теорией.


Sandman25   (2004-07-13 11:56:00) [7]

[7] Koala   (13.07.04 11:53)

Есть таблица текущих остатков.

Shofer_id, ostatok

Есть таблица расходов-приходов.

Shofer_id, kolvo

При изменении 1 записи во второй таблице срабатывает триггер и изменяет 1 запись в первой таблице. И никаких накатов.


Koala   (2004-07-13 11:53:00) [8]

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


Sandman25   (2004-07-13 11:49:00) [9]

Все равно неправильно :)
Нужно 2 запроса - один для pole1=mypole1, другой для pole1>mypole1


Sandman25   (2004-07-13 11:41:00) [10]

update t set pole 3= pole 3+ mychange, pole 4= pole 4+ mychange where pole2 = mypole2 and pole1 >= mypole1


Sandman25   (2004-07-13 11:40:00) [11]

update t set pole1 = pole1 + mychange, pole2 = pole2 + mychange where pole2 = mypole2 and pole1 >= mypole1


Курдль   (2004-07-13 11:40:00) [12]

Это одна и та же таблица?
А что значит "вторичный ключ"?
Я всех авторов прошу приоткрыть хоть часть бизнес-процесса, а не ездить по мозгам своими "pole_1..." :(


Sandman25   (2004-07-13 11:38:00) [13]

А мне понятно, что неверно спроектирована БД. При приходах-расходах не нужно записывать старое значение остатка и новое значение. Нужно записывать только сам приход-расход, а остатки посчитаются при выборке select sum(prih_rash_kolvo)


Соловьев   (2004-07-13 11:31:00) [14]

не понятно


Наверх

Титульная страница Поиск, карта сайта Написать письмо