![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Появился вопрос.
Как модифицировать ниже представленную программу так, чтобы в компоненте TabSet1 были не все закладки, а только те, первые буквы фамилий которых находятся в таблице anketa3? На форме компоненты TQuery, TDataSource, TDBGrid и TTabSet. Код:
select * from anketa3 where LastName like :LastNameStr Запрос выбирает записи из таблицы anketa3, в которых поле LastName похоже (like) на значение параметра :LastNameStr. Параметр будет передаваться в момент переключения закладок: Код:
И еще маленький вопросик. Как будут выглядеть на DuilderC++ следующие строки? i : Byte; TabSet1.Tabs.Add(Chr(Byte('A')+i)); Params[0].AsString:= '"'+TabSet1.Tabs.Strings[NewTab]+'%"'; Последний раз редактировалось Admin, 12.07.2008 в 20:24. |
#2
|
|||
|
|||
![]() Довольно забавная логика проекта: если кликнуть на любую закладку, то TabSet должен перестроиться.
Неожиданный финт для пользователя, который ожидает что-то совсем другое. Хм, не проще ли при инициализации сделать столько закладок сколько надо (т.е. столько сколько разных букв в фамилиях в базе), а при добавлении фамилий с первой буквой которой нет в базе добавлять и закладку. А я бы сделал закладки на все буквы, а доступными только те, на которые в базе есть фамилии. При добавлении фамилий с новыми буквами разлочивать закладку с этой буквой. Менее стрессовая ситуация для пользователя. Пользователя надо любить (даже если это ты сам). Не забывайте делать резервные копии Последний раз редактировалось san-46, 13.07.2008 в 02:31. |
#3
|
||||
|
||||
![]() Не, ты не прав.
Закладки перестраиваться не будут. Они создаются при создании формы, а при клике на закладку просто выбираются записи с фамилией на букву, которая приписана закладке. По существу. Надо сделать запрос в БД, который вернет тебе все множество первых букв фамилий. Что-то типа Код:
Последнее условие типа уберет пустую закладку, ежели встретится запись с незаполненой фамилией. По поводу кода на с++, точно не помню, но будет что-то типа Код:
|
#4
|
|||
|
|||
![]() Да, признаю, перестраиваться не будет (в коде TabSet1Change - ничего похожего для этого нет).
Испытал такой код: Код:
Определяется есть ли имена на каждую букву алфавита. Если есть, то закладка добавляется. Т.к. букв не много, то выполняется быстро, несмотря на многочисленные операции открытия и закрытия DataSet. Не забывайте делать резервные копии Последний раз редактировалось san-46, 14.07.2008 в 09:09. |
#5
|
|||
|
|||
![]() Да не, список букв получается одним запросом.
Я же написао пример, только надо посмотреть как в диалекте нужной БД выглядит команда получения первого символа строки. Ну и distinct пишется вот так (сорри, писал ночью, ошибся ![]() |