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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2015, 15:45   #1
Evil_Net
Пользователь
 
Регистрация: 04.08.2015
Сообщений: 48
Печаль Чтение из базы с фильтром

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

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

Например:

массив:
Код:
arr: array[1..4] of string = ('Стол', 'Стул', 'Диван', 'Кресло');
данные в базе:
Код:
id, Name
1   Стол
В комбобокс должны загрузиться из массива только Стул, Диван, Кресло (array[2],array[3],array[4])

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

Кому не сложно приведите пример кода.
Evil_Net вне форума Ответить с цитированием
Старый 30.08.2015, 15:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Уточняющий вопрос: Почему из массива? Почему не сделать в самой БД справочник?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2015, 16:22   #3
Evil_Net
Пользователь
 
Регистрация: 04.08.2015
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Уточняющий вопрос: Почему из массива? Почему не сделать в самой БД справочник?
Пробовал и так, но показалось долго, так как в справочнике около 30 наименований и после добавления в базу определенных данных, нужно повторно заполнить комбобокс оставшимся значениями.

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

Или лучше просто удалять из комбобокса указанные значения?

Последний раз редактировалось Evil_Net; 30.08.2015 в 16:28.
Evil_Net вне форума Ответить с цитированием
Старый 30.08.2015, 16:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
после добавления в базу определенных данных, нужно повторно заполнить комбобокс оставшимся значениями.
А что при добавлении комбик заполнять запрещено?
Цитата:
Каждый раз проверять есть ли за сегодняшний день определенное наименование и вносить в комбобокс оставшиеся выходит запросов много или я делаю что то не так.
Программа расчитывается на сколько пользователей?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2015, 17:04   #5
Evil_Net
Пользователь
 
Регистрация: 04.08.2015
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что при добавлении комбик заполнять запрещено?

Программа расчитывается на сколько пользователей?
Комбобокс заполнять разрешено. На одного пользователя.

Поясню. Пользователю незачем за определенный день вносить повторно одни и те же наименования (для редактирования внесенных данных или удаления ошибочного наименования есть специальные разделы, которые уже работают) поэтому уже внесенные в базу наименования на сегодняшний день я хочу убирать из комбобокс после каждого добавления в базу и при открытии программы снова.
Evil_Net вне форума Ответить с цитированием
Старый 30.08.2015, 17:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Комбобокс заполнять разрешено. На одного пользователя.
Тогда не морочь голову:
1) Сделай справочник
2) Из него заполняй комбик
3) Удаляй из комбика при добавлении записи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2015, 18:04   #7
Evil_Net
Пользователь
 
Регистрация: 04.08.2015
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Тогда не морочь голову:
1) Сделай справочник
2) Из него заполняй комбик
3) Удаляй из комбика при добавлении записи.
Было бы все так просто! С считыванием и удалением из комбо проблем нету, пока он работает в программе.

А проблема вот в чем: пользователь запустил программу все замечательно считалось в комбо, он вносит необходимые данные и внесенные наименования из комбо прекрасно удаляются, но только пользователь закрыл программу и при следующем запуске ее по новой в комбо считались ВСЕ значения, а мне нужно чтобы только те, которые он сегодня не вносил в базу!
Evil_Net вне форума Ответить с цитированием
Старый 30.08.2015, 18:20   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот поэтому делай справочник.
А потом запрос:
Код:
select * from Таблица
where not название in (select Название from Справочник)
Ну или так
Код:
select * from Таблица t
join Справочник s on (t.Название<>s.Название)
А вообще грамотнее було бы по числовым кодам, но не важно.
Получишь те элементы, которые не были вписаны.
О чем я тебе и толкую.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2015, 08:45   #9
Evil_Net
Пользователь
 
Регистрация: 04.08.2015
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вот поэтому делай справочник.
А потом запрос:
Код:
select * from Таблица
where not название in (select Название from Справочник)
Ну или так
Код:
select * from Таблица t
join Справочник s on (t.Название<>s.Название)
А вообще грамотнее було бы по числовым кодам, но не важно.
Получишь те элементы, которые не были вписаны.
О чем я тебе и толкую.
Спасибо! Мысль понял, не знал что можно такой запрос делать. Все работает, скорость великолепна, только я поменял местами Справочник и Таблицу.
Evil_Net вне форума Ответить с цитированием
Старый 31.08.2015, 09:46   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и отлично )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить чтение из базы ZBEP БД в Delphi 11 27.03.2014 23:02
Чтение данных из базы Access из ресурса Аватар БД в Delphi 9 27.06.2013 16:42
Запись и чтение WAV-файлов в/из базы Sanprof БД в Delphi 1 15.11.2010 13:27
Чтение из базы Антон Шестаков БД в Delphi 8 18.05.2007 19:24