Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.03.2013, 16:57
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию Отображение "архивных" записей из БД (акцесс)

Добрый день. В БД есть 2 таблицы (2 только для примера, их там значительно больше). Таблица zakaz содержит все информация о заказе , таблица kat_tovara является справочником (в табл zakaz записываются ключи с категорией товара из табл kat_tovara). Есть 2 формы, 1ф содержит грид со всей информацией из табл zakaz, 2ф является формой для записи информации в БД или ее просмотра. На 2ф есть DBLookupCombo, его LookupSource является запрос
Код:
SELECT ID, Name_SP, Gruppa FROM kat_tovara WHERE Arhiv = 0
. т.е. в выпадающем списке всегда только актуальная категория товара. Но в БД в табл zakaz есть и такие записи в которых категория товара уже является архивной, т.е. когда я открою вторую форму для просмотра информации, то в DBLookupCombo будет пусто. Как мне это обойти? Мне нужно чтобы выпадающий список содержал только актуальную информацию, но и чтобы при просмотре информации поле отвечающее за категорию товара было не пусто. Помогите пожалуйста.
Ответить с цитированием
  #2  
Старый 25.03.2013, 07:49
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от DOR
...в выпадающем списке всегда только актуальная категория товара. Но в БД в табл zakaz есть и такие записи в которых категория товара уже является архивной, т.е. когда я открою вторую форму для просмотра информации, то в DBLookupCombo будет пусто. Как мне это обойти? Мне нужно чтобы выпадающий список содержал только актуальную информацию, но и чтобы при просмотре информации поле отвечающее за категорию товара было не пусто...
Отлично. Вижу противоречие - утверждение что актуальная инфа есть всегда и затем, что её нет, велколепно :-) Да и потом, если товара уже нет и он в глубокой бозе, как поле будет не пустым? Загадка. Как вариант, заполнять его честным признанием "Извнт, был такой пунктик, но только что сплыл...", в смысле записывать в поле КТ слово "нет".
Ответить с цитированием
  #3  
Старый 25.03.2013, 10:58
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Спасибо за издевочную помощь. Как вариант решил сделать так, на форму вместо комбобокса кинуть текстбокс с кнопкой, по нажапию на кнопку под ТБ будет появляться форма с гридом, которая будет иметировать выпадающий список, таким образом в ТБ будет та информация которая есть в БД (и все равно как давно она была записана), а форма под ТБ будет отображать только актульную информацию. Вопрос в том как это сделать? Сделать так, чтобы форма появлямать под кнопкой знаю как, а вот чтобы по нажатию на кнопку форма появлялась под ТБ не знаю. Подскажите пожалуйста как это можно сделать.
Ответить с цитированием
  #4  
Старый 25.03.2013, 11:49
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от DOR
Спасибо за издевочную помощь...
Да ни боже ни, какая там издёвка, нормальная реакция на "сделайте мне приятно, сами думайте, как и чего я хотел" .
Цитата:
...форма с гридом, которая будет иметировать выпадающий список...
А так не вариант?
Ответить с цитированием
  #5  
Старый 25.03.2013, 11:55
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

нет, мне не нужно чтобы в гриде был выпадающий список (взял на воружение, думаю что обязательно пригодиться), нужно именно визибл формы по ТБ по нажатию кнопки.
Ответить с цитированием
  #6  
Старый 25.03.2013, 19:58
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Может кому пригодиться
Код:
procedure Tf_Inform.bt_Select_OtdelClick(Sender: TObject);
var
  pt: TPoint;
  bt: TBitBtn;
begin
  bt := Sender as TBitBtn;
  pt := bt.Parent.ClientToScreen(Classes.Point(bt.Left, bt.Top + bt.Height));
  f_Otdel.Top := pt.Y + 2;
  f_Otdel.Left := pt.X - 300;
  f_Otdel.ShowModal;
end;
Ответить с цитированием
  #7  
Старый 25.03.2013, 20:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да легко все решается правкой запроса.
Когда ты открываешь форму, тебе надо знать номер (ID) заказа. Тогда тебе надо:
1. Выбрать все активные товары из каталога.
2. Выбрать архивные товары, которые используются в данном конкретном заказе (что бы можно было их показать).
3. Объединиить результаты этих запросов.
4. Сделать невозможным выбор архивного товара для новых записей. Тут код на Delphi и этот пункт надо рассматривать отдельно, по приведенной информации невозможно что-то посоветовать.

Первые три пункта делаются так:
Код:
SELECT id, name, is_archive from kat_tovara WHERE Arhiv = 0
UNION ALL
SELECT id, name, is_archive from kat_tovara WHERE Arhiv = 1 and id in 
  (
    SELECT kod_tovara_id from OrderItem where Order_id = :itemID
  )

С первой частью запроса все понятно - выбираем все активные товары.
Далее идет UNION ALL, который просто объединяет 2 выборки в одну (список полей должен быть одинаковый по кол-ву и типу).
Третья часть, второй запрос, отбирает архивные товары, которые уже испольщуются в заказе (сорри, названия таблиц написал нормальные, т.к. с твоим транслитом это нечитабельно).

Короче, идея вот такая.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
DOR (25.03.2013)
  #8  
Старый 25.03.2013, 20:47
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

в моем случае можно так
Код:
SELECT id, name, is_archive from kat_tovara WHERE Arhiv = 0
UNION ALL
SELECT id, name, is_archive from kat_tovara WHERE Arhiv = 1 and id = :itemID 
большое Вам спасибо за подсказку об объединении запросов.

Последний раз редактировалось DOR, 25.03.2013 в 21:02.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:20.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025