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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2010, 13:17   #1
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию БД, добавление значений

Имеется задание:
Цитата:
Создать программу «Товары и реализация». На склад поступают товары, имеющие следующие характеристики: наименование, цена. Количество, единица измерения. Склад производит отпуск товаров на склад и отпуск товаров со склада. Если наименование поступающего товара уже имеется в базе данных, то количество суммируется. Сформировать отчет о наличии товаров на складе. Для хранения данных используется любая локальная реляционная СУБД.
Как реализовать добавление (суммирование)?
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics
grom333 вне форума Ответить с цитированием
Старый 17.03.2010, 13:26   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

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

еще вариант почитай "похожие" темы... ссылки внизу
maLoy*508 вне форума Ответить с цитированием
Старый 17.03.2010, 14:05   #3
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию

Код:
DOQuery1.Close;
ADOQuery1.SQL.Text:='Insert Into Tab1 (name,cena,koli4estvo,ed_izmer) Values ("'+Edit1.Text+'",'+Edit2.Text+','+Edit3.text+','+edit4.text+')';
ADOQuery1.ExecSQL;
Добавление нашел, но даже не представляю как происходит суммирование, если такой товар уже есть.
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics
grom333 вне форума Ответить с цитированием
Старый 17.03.2010, 15:35   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вообще изменение данных производится с помощью команды Update
например,
Код:
update Tabl1 
set koli4estvo = НовоеЗначениеКоличества
  where name = ВашеНаименование
но это неправильно с точки зрения теории реляционных БД - Любая таблица должна иметь ключевое поле!
Где у Вас в таблице tab1 ключевое поле?!
Если Вы сами проектируете данную БД - то обязательно добавьте это поле в таблицу.
тогда правильный запрос будет выглядеть так:
Код:
update Tab1
    set koli4estvo = НовоеЗначениеКоличества
  where ID = ID_найденной_записи
найти нужную запись можно через
select max(id) from tab1 where name = ВашеНаименование
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.03.2010, 16:00   #5
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию

Serge_Bliznykov, я конечно же знаком немного с БД. Уже несколько раз делал (телефонный справочник и т.д.) Но тут видите я именно стопорюсь на программном добавлении с суммированием.
Вот, код знаю который просто добавит значения
Код:
ADOQuery1.Insert;
ADOQuery1.FieldByName('name').AsString := Edit1.Text;
ADOQuery1.FieldByName('cena').AsString := Edit2.Text;
ADOQuery1.FieldByName('koli4estvo').AsString := Edit3.Text;
ADOQuery1.FieldByName('ed_izmer').AsString := Edit4.Text;
ADOQuery1.Post;
как для него условия добавить "если name есть, то koli4estvo+koli4estvo"
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics
grom333 вне форума Ответить с цитированием
Старый 17.03.2010, 16:14   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вообще изменение данных производится с помощью команды Update
А если такой записи нет?
Я бы сделал это двумя запросами
Первый - обновляет только те которые есть
Второй - вставляет только тех которых нет.
Второй типа
Insert into ... select * from ... JOIN... чтоб только тех которых нет брало.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.03.2010, 16:17   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

без проверок что находится в Edit1.Text и Edit3.Text (обязательно добавите проверки самостоятельно, они важны!), просто как направление, куда копать:
Код:
if ADOQuery1.Locate('name', Edit1.Text, [] ) then begin
  ADOQuery1.Edit;
  ADOQuery1.FieldByName('koli4estvo').AsInteger := ADOQuery1.FieldByName('koli4estvo').AsInteger + StrToInt(Edit3.Text);
  ADOQuery1.Post;
end
else begin
   // тут Ваш код по вставке нового значения
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.03.2010, 16:45   #8
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию

Serge_Bliznykov, спасибо большое быстро, точно и точку!
Кому нужен точный код для своих проектов
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
if ADOQuery1.Locate('name', Edit1.Text, [] ) then begin
  ADOQuery1.Edit;
  ADOQuery1.FieldByName('koli4estvo').AsInteger := ADOQuery1.FieldByName('koli4estvo').AsInteger + StrToInt(Edit3.Text);
  ADOQuery1.Post;
end
else begin
ADOQuery1.Insert;
  ADOQuery1.FieldByName('name').AsString := Edit1.Text;
  ADOQuery1.FieldByName('cena').AsString := Edit2.Text;
  ADOQuery1.FieldByName('koli4estvo').AsString := Edit3.Text;
  ADOQuery1.FieldByName('ed_izmer').AsString := Edit4.Text;
  ADOQuery1.Post;
  end;
end;
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics
grom333 вне форума Ответить с цитированием
Старый 17.03.2010, 16:45   #9
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию

Serge_Bliznykov, спасибо большое быстро, точно и в точку!
Кому нужен точный код для своих проектов
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
if ADOQuery1.Locate('name', Edit1.Text, [] ) then begin
  ADOQuery1.Edit;
  ADOQuery1.FieldByName('koli4estvo').AsInteger := ADOQuery1.FieldByName('koli4estvo').AsInteger + StrToInt(Edit3.Text);
  ADOQuery1.Post;
end
else begin
ADOQuery1.Insert;
  ADOQuery1.FieldByName('name').AsString := Edit1.Text;
  ADOQuery1.FieldByName('cena').AsString := Edit2.Text;
  ADOQuery1.FieldByName('koli4estvo').AsString := Edit3.Text;
  ADOQuery1.FieldByName('ed_izmer').AsString := Edit4.Text;
  ADOQuery1.Post;
  end;
end;
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics

Последний раз редактировалось grom333; 17.03.2010 в 16:47. Причина: Прошу прощения за 2 поста, такой у меня уж тормознутый интернет
grom333 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение и загрузка в файл текстовых значений и значений типа Boolean krikaved Общие вопросы Delphi 1 16.03.2010 07:53
Сортировка списка при добавление новых значений dzv Microsoft Office Excel 13 28.01.2010 12:46
Каскадное обновление взаимосвязанных полей со списком и добавление новых значений AlEx_IB Microsoft Office Access 12 11.09.2009 16:55
Добавление в БД vilini БД в Delphi 4 23.07.2009 13:16
Добавление в БД Dissonance БД в Delphi 3 05.06.2008 21:22