Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 22.05.2012, 18:08   #1
wsv515
Новичок
 
Регистрация: 22.05.2012
Сообщений: 6
Репутация: 10
По умолчанию Поиск совпадающих значений полей в 2-х таблицах

Всем привет.

Есть три таблицы (БД Access):
1. TZakazJ (key(счетчик), ZakazN, Client)
2. TTovarJ (key(счетчик), Naimen, Art, Razmer, Kolvo, Price)
3. TTovarList (key(числовой, неиндексируемое), Id(числовой), Naimen, Art, Razmer, Kolvo, Price)

Цель, сделать чтобы при клике по строке в таблице TTovarJ выводилась форма с запросом сколько товара перенести и эта строка из TTovarJ добавлялась в TTovarList с введеным кол-вом товара, это я сделал.

Мне нужно, чтобы, после клика по строке в TTovarJ делался запрос на поиск УЖЕ существующего товара в TTovarList, если такой товар уже есть в TTovarList, то изменить содержимое столбца Kolvo на введенное в форме.

Прошу подсказать код как проверить таблицы на совпадающие записи и сделать то-то. Можно сделать проверку по столбам 'key' (TTovarJ) и 'Id' (TTovarList) ну или как лучше... я не знаю, опыта в прогр БД мало.

- использую ADOTable.
- key(TZakazJ) связан с key(TTocarList) чтобы при перемещении по заказам, менялся товар в заказе.
wsv515 вне форума   Ответить с цитированием
Старый 23.05.2012, 07:05   #2
AladdinZean
Новичок
 
Регистрация: 23.05.2012
Сообщений: 5
Репутация: 10
По умолчанию

Я так понял, что ты с SQL не знаком?

Банальный SELECT Kolvo from TTovarList where Id_Товара = <ID_товара из текущей строки> AND ID_Заказа = <ID_заказа из текущей строки>.

При необходимости изменить кол-во:
UPDATE TTovarList SET Kolvo = <Нужное_кол-во> where Id_Товара = <ID_товара из текущей строки> AND ID_Заказа = <ID_заказа из текущей строки>.
AladdinZean вне форума   Ответить с цитированием
Старый 23.05.2012, 08:01   #3
Прик
Участник клуба
 
Регистрация: 08.09.2010
Сообщений: 871
Репутация: 266
По умолчанию

Цитата:
Мне нужно, чтобы, после клика по строке в TTovarJ делался запрос на поиск УЖЕ существующего товара в TTovarList, если такой товар уже есть в TTovarList, то изменить содержимое столбца Kolvo на введенное в форме.
А можно поинтересоваться: ЗАЧЕМ?
Не проще ли добавить запись с этим же товаром и нужным новым количеством. Так поступают все нормальные разработчики БД.
Если, конечно, это не учебное задание, в котором безнаказанно можно творить различные безобразия
Прик вне форума   Ответить с цитированием
Старый 23.05.2012, 08:12   #4
AladdinZean
Новичок
 
Регистрация: 23.05.2012
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
А можно поинтересоваться: ЗАЧЕМ?
Не проще ли добавить запись с этим же товаром и нужным новым количеством. Так поступают все нормальные разработчики БД.
Если, конечно, это не учебное задание, в котором безнаказанно можно творить различные безобразия
Не знаю, кого вы понимаете под НОРМАЛЬНЫМИ разработчиками, но вот НОРМАЛизованная БД не даст внести в таблицу повторную запись.
Ибо нормальная форма таблицы TTovarList в данном случае будет:
(Id_Заказа, ID_Товара)-ключ, и кол-во.
AladdinZean вне форума   Ответить с цитированием
Старый 23.05.2012, 08:26   #5
Прик
Участник клуба
 
Регистрация: 08.09.2010
Сообщений: 871
Репутация: 266
По умолчанию

Странное, однако, утверждение.
Уникальный идентификатор записи (строки) в таблице не может относится к какому-то объекту БД. Он обязан быть абстрактным значением.

Не надо забывать, что заказ может формироваться во времени не сразу и в таблице обязательно должно быть поле фиксирующее дату или, хотя бы, время его оформления. И тогда все становиться на свои места:
- сделали заказ товара 1 с количеством 2 в 08:00
- добавили в заказ товар 1 с количеством 1 в 08:15
Эти операции в хронологии и должна фиксировать ваша таблица.

P.S.
Цитата:
Не знаю, кого вы понимаете под НОРМАЛЬНЫМИ разработчиками
Понятно, что тех кто имеет многолетний опыт в разработке БД.
Попробуйте ваш вопрос разместить на формуме SQL.ru. Скорее всего, прочтете много чего нелицеприятного.

Последний раз редактировалось Прик; 23.05.2012 в 08:41.
Прик вне форума   Ответить с цитированием
Старый 23.05.2012, 09:04   #6
=master=
Участник клуба
 
Регистрация: 26.03.2012
Сообщений: 665
Репутация: 54
По умолчанию

Цитата:
Уникальный идентификатор записи (строки) в таблице не может относится к какому-то объекту БД. Он обязан быть абстрактным значением.
Вот тут непонятно. Что значит "тносится к какому-то объекту БД", и почему абстрактным ?
=master= вне форума   Ответить с цитированием
Старый 23.05.2012, 09:22   #7
Прик
Участник клуба
 
Регистрация: 08.09.2010
Сообщений: 871
Репутация: 266
По умолчанию

У автора:
Цитата:
(Id_Заказа, ID_Товара)-ключ
Т.е. ключевое поле - это Id_Заказа. Заказ, понятно, объект базы данных. Теперь понятно что значит "относится к какому-то объекту"?
"Абстрактным", это значит не связанным ни с какими другими строками ни каких других таблиц БД.
Прик вне форума   Ответить с цитированием
Старый 23.05.2012, 10:41   #8
=master=
Участник клуба
 
Регистрация: 26.03.2012
Сообщений: 665
Репутация: 54
По умолчанию

Вот связь мэни-ту-мэни, тут как правило ид1 + ид2 = ПК, связаны не с одной а сразу с 2мя, а бывает и больше, и нет никакой "абстракции".
Ну а ключ (Id_Заказа, ID_Товара) действительно неправильный, тут еще надо добавить размер.
Да и вообще переделать структуру.
=master= вне форума   Ответить с цитированием
Старый 23.05.2012, 11:14   #9
Прик
Участник клуба
 
Регистрация: 08.09.2010
Сообщений: 871
Репутация: 266
По умолчанию

Оффтоп пошел.
Да вы ломитесь в открытые двери: я ж не буду спорить что ид1+ид2 - это не "абстракция". Разумеется.
Но речь то идет об идентификаторах строк каждой таблицы. Они должны быть уникальными (в чем, я уверен, вы не сомневаетесь) и, к тому же, не привязанными ни к чему либо в БД. Именно это люди (не я) и называют "абстракцией".
Прик вне форума   Ответить с цитированием
Старый 23.05.2012, 11:21   #10
=master=
Участник клуба
 
Регистрация: 26.03.2012
Сообщений: 665
Репутация: 54
По умолчанию

А я вам пример про что привел?
Именно про идентификаторы строк. Надор 2 и более полей уникально идентифицируют запись, а также это и связь с другими сущностями.
И чего? и ничего. нет никакой "абстракции"
=master= вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дублирование полей в нескольких таблицах и их заполнение MIKE11IPME БД в Delphi 7 24.04.2012 20:26
Поиск совпадающих ЦИФР в Memo! (не путать с поиском строк!) NiKiToZZ- Помощь студентам 14 31.01.2011 04:52
Поиск совпадающих или похожих значений jekich Microsoft Office Excel 4 14.08.2010 20:55
Сравнение и замена значений в двух таблицах Excel shalinoleg Microsoft Office Excel 2 10.06.2010 09:53
Поиск и удаление совпадающих строк в разных листах hybrid84 Microsoft Office Excel 11 24.07.2009 05:13


06:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru