Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать таблицу временно? [D7, XP]


Страницы:   1 2

deras ©   (2008-05-23 00:05:00) 

БД FB2.0
Необходимо создать таблицу в процессе работы программы, а потом (скажем, после закрытия программы), удалить эту таблицу?


MsGuns   (2008-05-23 12:46:00) [1]

>Игорь Шевченко ©   (23.05.08 12:30) [32]
>Я тебя про запросы-то просветить не могу, а про системы резервирования малость подольше будет.

Ничего, послушать умных людей терпения хватит


Игорь Шевченко   (2008-05-23 12:30:00) [2]

MsGuns ©   (23.05.08 12:16) [30]

Я тебя про запросы-то просветить не могу, а про системы резервирования малость подольше будет.


Sergey13   (2008-05-23 12:19:00) [3]

> [29] Игорь Шевченко ©   (23.05.08 12:02)
> Принтер всегда работает.

2. Если принтер не работает, смотри пункт 1.


MsGuns   (2008-05-23 12:16:00) [4]

>Игорь Шевченко ©   (23.05.08 12:02) [29]
>Это в случае билетов на трамвай

"Но тут малец с поправкой влез.." (с)
Как обычно, брякнул и в кусты. Или снизойдем и просветим невежественных ?


Игорь Шевченко   (2008-05-23 12:02:00) [5]

Sergey13 ©   (23.05.08 11:51) [27]

Принтер всегда работает.

MsGuns ©   (23.05.08 11:35) [26]


> По похожей системе, кстати, работают многие "билетные" системы.
>  Оператор за раз вводит паспортные данные НЕСКОЛЬКИХ человек,
>  после чего ЗА ОДНУ ТРАНЗАКЦИЮ резервирует несколько билетов.
>
>
> По завершению транзакции информация временной таблички уже
> никому не нужна.


Это в случае билетов на трамвай


MsGuns   (2008-05-23 12:01:00) [6]

>Sergey13 ©   (23.05.08 11:51) [27]

Просто скучно и захотелось пофлудить ?

Ну а если у про принтер.. Настоящие пачаны НИКОГДА не выводят непосредственно на принтер. Кто в хатмель, кто в эксел, кто в текстовик.


Sergey13   (2008-05-23 11:51:00) [7]

> [26] MsGuns ©   (23.05.08 11:35)
> По завершению транзакции информация временной таблички уже
> никому не нужна.

> и сделать все ЗА ОДИН раз.

Потом пойти в другой кабинет, где стоит принтер и убедиться, что принтер не работает и надо печатать на другой. Вернуться, ввести все фамилии заново и повторить процедуру.


MsGuns   (2008-05-23 11:35:00) [8]

>Sergey13 ©   (23.05.08 08:52) [25]
>ИМХО странная логика.

Отнюдь. Как пример, надо распечатать лицевые для нескольких человек (список из бухгалтерии прилагается). Можно, конечно, по одному, каждый раз дергая сервер и заполняя форму-запрос. А можно указать список во временнойтабличке, из которой затем и сделать все ЗА ОДИН раз.

По похожей системе, кстати, работают многие "билетные" системы. Оператор за раз вводит паспортные данные НЕСКОЛЬКИХ человек, после чего ЗА ОДНУ ТРАНЗАКЦИЮ резервирует несколько билетов.

По завершению транзакции информация временной таблички уже никому не нужна.


Sergey13   (2008-05-23 08:52:00) [9]

> [2] deras   (23.05.08 00:38)
> это типа подготовочная таблица для отчета В нее (таблицу)
> пользователь вносить данные(в т.ч. из справочников) перед
> формированием отчета. После создания отчета, эта таблица не нужна.

ИМХО странная логика. Пользователь что-то внес распечатал и все удалилось. Через полчаса потребовалось снова распечатать - опять что-то вноси.
Я бы организовал простую НЕ временную таблицу с идентификатором пользователя и очищал бы ее по запросу перед формированием отчета.


deras   (2008-05-23 02:23:00) [10]

понял.
Еще раз спасибо! Буду пробовать реплизовать


MsGuns   (2008-05-23 02:20:00) [11]

>стандартный сервис поиска, сортировки, фильтрации и т.д.


deras   (2008-05-23 02:18:00) [12]


> и реализуйте все сервисы


что имеется ввиду?


MsGuns   (2008-05-23 02:13:00) [13]

>но я все равно так реализую ибо и красиво и удобно. Спасибо!

В качестве бонуса за [19] ;)

Может быть, Вам придется иметь дело не с одним "нормальным" справочником, а несколькими. Тогда для того, чтобы не писать в каждой формочке одно и то же, создайте одну, базовуюформу, не привязанную конкретно ни к какому датасету, и в ней разместите все элементы управления (сам грид, менюшки, кнопки, статусбары и т.д.) и реализуйте все сервисы. Затем для каждого конкретного спр-ка создайте форму-наследника от базового класса, настройте в дизайне запрос, "оформите" красивую решетку и все ! За полчаса Вы таким образом спроектируете десяток вполне роботоспособных форм просмотра справочников ! И удивитесь как мало в них кода.


deras   (2008-05-23 02:04:00) [14]


>  Для этого случая я бы вместо комбобокса использовал "нормальную"
> форму с DB-гридом, которую бы модально показывал под/над
> и слева/справа от целевой ячейки. На формочку повесил бы
> еще стандартный сервис поиска, сортировки, фильтрации и
> т.д.


А вот это - супер! Хотя у меня пока один справочник-словарь (думаю, будут еще), но я все равно так реализую ибо и красиво и удобно. Спасибо!


deras   (2008-05-23 02:01:00) [15]


> MsGuns ©   (23.05.08 01:33) [16]
</I

> MsGuns ©   (23.05.08 01:39) [17]

>

Спасибо большое за уроки. Много интересного узнал. Вы четко дали направление, куда "рыть".
Очень приятно с Вами общаться.


MsGuns   (2008-05-23 01:49:00) [16]

> http://codesources.net/delphi-combobox-v-yacheyke-stringgrid/

Если отбросить в сторону чудовищный стиль кода, то реализовано в целом верно за исключением того, что даже если я ничего не выбрал в боксе (т.е. просто открыл его, просмотрел, протащив ползунок, а потом щелкнул рядом с ним на сетке, убрав с него т.о. фокус), то содержимое целевой ячейки все равно изменится


MsGuns   (2008-05-23 01:39:00) [17]

>deras   (23.05.08 01:18) [15]
>а в этом есть проблема? Я спрашиваю, потому, что не понимаю еще как реализовывать.

"Нет ничего сложного, если знаешь" ;)))

Подсказывать не хочу, а вот наводку дам. Посмотрите события предков класса TStringGrid и, если найдете что-то похожее, внимательно изучите.
Событие есть, но оно "укрыто" от наследников. Чтобы доступиться к нему из стрингрида, создайте "дружественный" класс (это Зотовская характеристика, не моя ;)), посредством которого можно перекрыть это событие, дописав в нем свое FantomeBox.Hide ;)


MsGuns   (2008-05-23 01:33:00) [18]

И последнее (раз уже начал лекцию, то надо и закончить ;))
Касательно собственно справочников, а точнее 2-х аспектов

1. Характристика объекта, хранящегося в справочнике.
Если это справочник-словарь (т.е. запись справочника состоит по сути из двух полей - код (идентификатор) записи и текст (наименование)), то описанный выше "комбобоксовый" способ вполне подойдет
Если же справочник содержит объекты с множеством характеристик, например, справочник сотрудников, в котором помимо таб.номера (или что там вместо него) есть еще поля "Фамилия", "Имя", "Отчество", "Год рождения" и т.д., но из который в сетку надо выбрать только один реквизит, то бокс явно не подходит, т.к. пользователь будет видеть только номера, фактически работая "вслепую". Для этого случая я бы вместо комбобокса использовал "нормальную" форму с DB-гридом, которую бы модально показывал под/над и слева/справа от целевой ячейки. На формочку повесил бы еще стандартный сервис поиска, сортировки, фильтрации и т.д. Пользователю, несомненно, это понравилось бы куда больше "зашированного" списка в комбобоксе

2. Специфика работы со справочником
Надо ли дать возможность пользователю "на лету" вносить изменения в сам справочник (например, добавить нового человека, если его там нет). Если надо, то без формочки никак. Если словарь, то можно в принципе обойтись комбобоксом, но во-первых, нельзя ни удалить, ни отредактировать, а при добавлении нового (юзер просто набрал в боксе текст) надо посылать запрос на вставку. Все бы ничего, если бы не эффект "неявной правки справочника", т.е. весьма вероятной ошибочной (а, следовательно, лишней) записи в справочник и, как следствие, появление в нем массы мусора.

Короче, это достаточно обширная тема и выходит за рамки сабжа, просто я хотел бы предостеречь Вас от возможных граблей при "простой" реализации "очевидных" вещей ;))


deras   (2008-05-23 01:18:00) [19]


> Не очень заключается в том, что Вам необходимо отловить
> само событие начала скроллинга и спрятать комбобокс.


а в этом есть проблема? Я спрашиваю, потому, что не понимаю еще как реализовывать.
Вы знаете, благодаря Вашим ответам, нашел вот это:
http://codesources.net/delphi-combobox-v-yacheyke-stringgrid/
Но, по-моему там не учтена проблема скроллинга


> 1) Для каждого справочника свой бокс,

Я так и думал. Но пока  есть только один справочник, что упрощает проблему


MsGuns   (2008-05-23 01:13:00) [20]

>deras   (23.05.08 01:03) [12]
>Т.е., комбобокс один, заполненый данными из справочника, просто он ?>вписывается в ячейку, которая в фокусе? Я правильно понял?

Правильно. Причем этот комбобокс Вы создаете в дизайне со свойством Visible := false. Чтобы правильно его "вписывать", Вам нужно привязаться либо к самому гриду (т.е. св-во TComoBox.Parent := TStringGrid) и тогда для его ректангеля просто использовать ректангель сетки,
либо к форме, но тогда над пересчитывать координаты.

Если справочников несколько, то у Вас опять-таки два пути
1) Для каждого справочника свой бокс, но тогда особое внимание разборкам "визибельности", чтобы у вас не сетке не получилась имитация игры "Морской бой". Зато один раз записали в них все справочники и забыли
2) Бокс один, но перед показом его нужно заполнить содержимым соотв. справочника. При этом чтобы не лазить кажый раз на сервер и не получать тормоза, заведите несколько TStrings для каждого справочника и в Items бокса зааписывайте содержимое соотв. списка


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо