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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2012, 22:21   #1
Black_Wolf
Пользователь
 
Регистрация: 16.04.2012
Сообщений: 19
Восклицание Как Сделать Организовать покупку

Есть 2 таблицы Товары и заказы. Допустим в магазине 100 единиц. Надо добавить в таблицу товары так чтобы от товаров в магазине отнялось же количество которое заказали и если это количество достигнет 0 писалось в спец. поле "нет в наличии''.

Связь Delphi + Access 2007 через ADOTable
В Бд 2 таблицы "Товары в Магазине" и "Корзина"

Отображено через DBGrid1 и DBGrid2 .

Поля "Товары в Магазине"
ID
название товара
цена
количеств

Поля "Корзина "
ID заказа
название товара
количество заказанного
Нужен код на кнопку так чтоб поля название товара переместилось в таблицу "Корзина " .
И самое главное от количество "Товары в Магазине" отняло то количество которое добавили в таблицу "Корзина"

Последний раз редактировалось Black_Wolf; 03.05.2012 в 00:13.
Black_Wolf вне форума Ответить с цитированием
Старый 02.05.2012, 23:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты принял товары от поставщика в определенном количестве - этот документ (накладная) записывается как очередная запись в базу склада. Суммарная цифра по принятым накладным от поставщика даст общий остаток товара на складе.
Далее ты продаешь - так же формируется накладная на передачу определенного колва товаров получателю. Получается новая запись со статусом продажи и количеством проданного товара.

И вот что у тебя записано в базе:
01 05 2012 Чупачупс 20шт розница 5 баксов
02 05 2012 Сникерс 80шт розница 15 баксов
02 05 2012 Чупачупс 8шт розница 5 баксов

Это принято на складе. Запрос типа
Код:
 select count(кол-во) from товары group by ассортимент товара
даст тебе таблицу
Чупачупс - 28
Сникерс - 80

Далее ты продаещь - делаешь запись в БД
02 05 2012 Покупатель 1 Чупачупс 1шт
02 05 2012 Покупатель 2 Чупачупс 3шт
02 05 2012 Покупатель 2 Сникерс 1шт

При этом получив кол-во товаров на складе прибавляешь к этому числу (запросом конечно же) проданное - Если оно меньше нуля проводка отменяется, покупателю предлагается купить товар в меньшем количестве.
Сам запрос зависит от того как ты построишь свою базу.
Т.е он может выглядеть типа:
Код:
select 
 count(кол-во)-(select count(Ассортимент) from товары т2 
   where т2.Ассортимент=т1.Ассортимент) 
from товары т1
group by ассортимент товара
И остается посмотреть в каких записях минуса.

Сразу скажу - не стоит корректировать кол-во товара на складе напрямую. Лучше формировать документы прихода-расхода, а уже после группируя их добиваться своей цели. Если станешь изменять (отнимать кол-во товара остатка на складе) при продаже, то после можешь просто концы с концами не свести а что же и как было продано. Каждая продажа должна отражаться в базе в виде документа, характеризующуего эту продажу
Все должно проводиться как совокупность документов на приход и расход.
И не волнуйся за запутанность - если правильно построишь реляции, ты ее просто не заметишь. И в товарном отчете твое сальдо будет выглядеть правдоподобнее
Теория ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2012, 00:19   #3
Black_Wolf
Пользователь
 
Регистрация: 16.04.2012
Сообщений: 19
По умолчанию

Есть ли варианты организовать через всё через Delphi ? без SQL
Black_Wolf вне форума Ответить с цитированием
Старый 03.05.2012, 07:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Есть. Чем SQL не угодил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2012, 18:20   #5
Black_Wolf
Пользователь
 
Регистрация: 16.04.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Есть. Чем SQL не угодил?
Так надо, нужен Delphi Код
Black_Wolf вне форума Ответить с цитированием
Старый 03.05.2012, 21:27   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так ведь SQL можно и в программе Делфи использовать. В компонентах типа Query.
Я просто никак не могу представить как этопроще сделать обычными методами компонентов... Дале lookUp возможности тут придется наворачивать до тонны кода (имхо)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2012, 23:42   #7
haker270
Пользователь
 
Регистрация: 24.04.2012
Сообщений: 24
По умолчанию

У меня немножко по другому, можете помочь)
есть 2 таблицы "Доступный товар"(Название,Модель, Цена, Количество) и "Окно заказа"(Название,Модель, Цена). Обе размещены на форме через DBGrid, а в проекте через ADOQuery. Я не могу сделать, чтобы при выборе товара с таблицы "Доступный товар", запись появлялась в в таблице "Окно заказа", при этом с уменьшалось кол-во с доступного товара. На кнопке выбрать я прописал код, но он только перемещает с таблицы в таблицу, но не отнимает кол-во(
вот код:
Код:
Form1.DBGrid2.DataSource.DataSet.Insert;
Form1.DBGrid2.DataSource.DataSet.FieldByName('t_nazvanie').AsString:=Form1.DBGrid1.DataSource.DataSet.FieldByName('t_nazvanie').AsString;
Form1.DBGrid2.DataSource.DataSet.FieldByName('t_id_firma').AsString:=Form1.DBGrid1.DataSource.DataSet.FieldByName('t_id_firma').AsString;
Form1.DBGrid2.DataSource.DataSet.FieldByName('t_model').AsString:=Form1.DBGrid1.DataSource.DataSet.FieldByName('t_model').AsString;
Form1.DBGrid2.DataSource.DataSet.FieldByName('t_cena').AsInteger:=Form1.DBGrid1.DataSource.DataSet.FieldByName('t_cena').AsInteger;
Form1.DBGrid2.DataSource.DataSet.Post;

Последний раз редактировалось Stilet; 04.05.2012 в 07:59.
haker270 вне форума Ответить с цитированием
Старый 04.05.2012, 08:02   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну если ты все же хочешь именно отнимать из базы склада цифру, то:
Код:
with Form1.DBGrid1.DataSource.DataSet do begin
 if (FieldByName('t_kolvo').AsInteger-1)>0 then begin Edit;
   FieldByName('t_kolvo').AsInteger:=FieldByName('t_kolvo').AsInteger-1;
   Post;
 end else ShowMessage('Сусеки пусты');
end;
Но это такой... скажем не самый лучший случай реализации.
Причем учти вместо -1 ты можешь поставить кол-во товара, который продал
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.05.2012, 06:40   #9
Geksod
Пользователь
 
Регистрация: 27.08.2011
Сообщений: 10
По умолчанию

http://basicsprog.ucoz.ru/publ/3-2-2
Урок 1.1 Пишем программу складского учета.
Geksod вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как организовать? (C++) Jеня Помощь студентам 2 20.11.2011 18:43
требуется разработчик онлайн-системы учета заявок на покупку авиа и ж/д билетов, Symfony + postgreSQL unicomm Фриланс 2 14.10.2011 11:29
Как организовать хеш? Utkin Общие вопросы по программированию, компьютерный форум 12 04.01.2011 09:31
как организовать цикл? Aqil_f Microsoft Office Excel 3 03.06.2009 10:13
Как лучше организовать базу данных типо как в ICQ Руслантус БД в Delphi 3 09.08.2008 23:57