![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема в составлении ХП [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]не понятно