Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

Проблема в составлении ХП   Найти похожие ветки 

 
Koala   (2004-07-13 11:26) [0]

Как собака, понимать понимаю, а сказать не могу.... (народная мудрость).
Такая проблема, есть таблица, в ней поля:(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 11:31) [1]

не понятно


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

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


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

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


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

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


 
Sandman25 ©   (2004-07-13 11:41) [5]

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


 
Sandman25 ©   (2004-07-13 11:49) [6]

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


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

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


 
Sandman25 ©   (2004-07-13 11:56) [8]

[7] Koala   (13.07.04 11:53)

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

Shofer_id, ostatok

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

Shofer_id, kolvo

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


 
Johnmen ©   (2004-07-13 11:57) [9]

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

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

>Koala

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


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

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

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

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


 
Sandman25 ©   (2004-07-13 12:24) [11]

[10] Koala   (13.07.04 12:01)

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


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

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

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


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


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

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


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

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.127 c
3-1089802900
Alt
2004-07-14 15:01
2004.08.08
Table is busy


3-1089552696
Zahar
2004-07-11 17:31
2004.08.08
Как вставить в DBGrid значение из другой таблицы


1-1090658608
ИМХО
2004-07-24 12:43
2004.08.08
OpenStream у IStorage


1-1090516990
AlexeyM
2004-07-22 21:23
2004.08.08
run-time


3-1089710854
Trofimov
2004-07-13 13:27
2004.08.08
FastReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский