![]() |
|
|
![]()
|
|
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
Народ, помогите плиз...
есть таблица с полем Climbers с ФИО людей. нужно вытянуть наиболее часто повторяющуюся строку этого поля в таблице. например: 1-ая запись - Иванов Петров Сидоров Филатов 2-ая: Зайцев Медведев Филатов Гришин 3-ия: Иванов Филатов Громов Степин функция, в данном случае, должна возвращать через ADOQuery значение 'Филатов' помогите плиз |
|||
|
||||
| Nimua |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.9.2007 Репутация: нет Всего: нет |
а можно подробнее структуру таблицы?
у тебя в поле просто список эл-тов? |
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Я так понял, что поле одно. Видимо структура таблицы не была продумана д ля решения подобного вида задачь. Из вариантов двойной цикл. Внешний по всем именам текущей колонки, внутренний по всем именам внутренних колонок. Записывать все в массив, скорее всего динамический. Что выудить различные имена из одной колонки нужно искать в строке символ #13 или (эм подскажите забыл
P.S> В понедельник на работе смогу посмотреть код второго символа, если нужно будет. |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Не понял, а Memo при чём? Да, действитетельно пример неудачный, но я бы сделал так: собрал все слова (разделённые пробелом) в один массив, а второму массиву, проходя циклом по первому, присваивал бы число повторений соответствующего слова... Как-то так, глубже сейчас думать не хочется.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| kobra |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
можно создать временную таблицу (или даже луще постаяную) и загнав туда данные выудить запросом нужную.
|
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Nimua, +1
ilyuha, покажи структуру БД, укажи тип и версию СУБД, опиши все подробно, в том числе и результат, и только потом будем думать. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
корочь, структура:
поля - ID LabelAscention Climbers MountName MountHeight RegionMount Country BeginingDate FinishingDate AllDayOfAscention types - INT TEXT MEMO TEXT INT TEXT TEXT DATE DATE INT типы приведенны соответственно полям. каждая запись - одно восхождение. Climbers - группа альпинистов с адресами. каждый в новой строке. надо найти альпиниста в бд совершившего наибольшее кол-во восхождений(естественно, группы могут быть разными). юзаю ADO+Access |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
ilyuha, структура БД не совсем правильная.
Вот это большая проблема. Нужно было отдельные таблицы делать, а не в одно поле MEMO пихать все. Классическая связь много ко многим Восхождение <-> Альпинист. Причем лучше начать прямо сейчас переделку БД, а то потом еще попросят всех альпинистов, которые живут рядом/в одном городе/на одной улице и т.д. Добавлено через 5 минут и 28 секунд Да, по обработке: 1. select * from ... 2. Создать дин. массив 3. пробежать по всем записям в запросе 4. для каждой записи 4.1. выдрать ФИО из MEMO 4.2. добавить 1 к ФИО в массиве или просто добавить в массив 5. сортировать массив по кол-ву по убыванию 6. вывести массив в нужный компонент -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
ilyuha действительно лучше менять структуру. Думаю самое простое завести для альпинистов отдельную таблицу в кт будут поля: ФИО Альпиниста, Инфа о нем, Уникальный код его восхождения(связь с исходной таблицей, тоесть куда он лазил и когда.), Номер альпиниста по порядку в восхождении(чтобы их различать, можно и без него обойтись конечно). Вообще Deniz описал уже процесс кодирования, но для облегчения нект задач можно вот как вывернуться. На форму поместить невидимый компонент TDBMemo который с базой будет связан и когда будешь бежать по всем записям таблицы из этого Memo построчно извлекать все фамилии альпинистов.
|
|||
|
||||
| ilyuha |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 10.7.2007 Репутация: нет Всего: нет |
Спасибо всем огромное!
да, так действительно будет намного проще и правильнее. просто, это моя первая прога работы с БД вообще - не учел я этого при продумке структуры таблицы.. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |