Вывод результатов запроса

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Grimm
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 24.10.2005 (Пн) 0:17

Вывод результатов запроса

Сообщение Grimm » 09.01.2007 (Вт) 6:24

Дано:

Существует БД с некоторыми таблицами

1. Firm - таблица фирм
FIndex - ключ
FName - название
........ другие поля, для ответа на вопрос не важны

2. Cat2 - таблица подкатегорий
C2Index - ключ
C2Name - наименование

3. Link - таблица связей
LIndex - ключ
FIndex - ссылка на Firm
C2Index - ссылка на Cat2

Связей в таблице Link для каждой записи из Firm может быть много. Причем для всех это число неодинаково.

Требуется вывести список фирм в таблице, к примеру с двумя столбцами один Firm.Fname другой Cat2.C2Name. То есть в первом стобце выводим название фирмы, а во втором через запятую или в столбик все соответствующие подкатегории.

Простым перебором Firm и постоянными запросами к Link с INNER JOIN C2Name все выводится.
Но 450 фирм с 1-5 связанными подкатегориями в MSFlexGrid выводятся в течение 3-4 секунд.
Однако подкатегории во втором столбике Grid могу только через запятую вывести.

Вопрос 1. Время нормальное или нет?
Вопрос 2. FlexGrid не понимает перехода на след строку в ячейке?
Вопрос 3. Как тогда можно реализовать в некоей таблице вывод в столбик.
Вопрос 4. Можно реализовать все одним запросом, без перебора?

Вот наглядно то имею для 450 записей за 3-4 секунды в MSFlexGrid и то что хочу получить, желательно одним запросом в прикрепленном файле
У вас нет доступа для просмотра вложений в этом сообщении.
Я слишком рано стал ребенком

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 7:10

1. Depends. От многих факторов, не указанных в вопросе.
2. Понимает, если Wordwrap включить.
3. Включить Wordwrap.
4. Написав и внедрив в базу собственную агрегатную функцию. Или поместив перебор в хранимую процедуру. Иначе нет. Я надеюсь, ты перебор делаешь в один проход, по отсортированному рекордсету?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Grimm
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 24.10.2005 (Пн) 0:17

Сообщение Grimm » 10.01.2007 (Ср) 18:52

1. сенкс, включил, но это нехорошая штука не понимает символы перехода на след строку, приходится пробелы ставить в соотвествии с длиной строки:(
2. перебор делаю по отсортированному
Я слишком рано стал ребенком

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.01.2007 (Ср) 19:11

1. Значит, ты используешь НЕ символы перехода на следующую строку, а нечто, что ты считаешь символами перехода на следующую строку.
2. Тогда он не может занимать столько времени.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Grimm
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 24.10.2005 (Пн) 0:17

Сообщение Grimm » 10.01.2007 (Ср) 23:02

1. разобрался с символами
2. как это сделано сейчас:
а) выполняется запрос на выборку всех фирм
б) выполняет запрос на выборку всех связей для данной фирмы с присоединением имени подкатегории
в) заполняем строку (row) grid'а, переходя по от первой до последней ячейки (col) в строке
г) при заполениии последней ячейки выполняется цикл перебора результатов запроса б)
Я слишком рано стал ребенком

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2007 (Чт) 4:14

Код: Выделить всё
SELECT FIndex, FName, ... C2Index, C2Name ... FROM ... ... ORDER BY FIndex, C2Index


Код: Выделить всё
dim prevf as long, cr as long
do until rs.eof
  if rs!FIndex.value<>prevf then
    f.additem
    cr=f.rows-1
    f.textmatrix(cr, 0) = ...
    f.textmatrix(cr, 1) = rs!FName.value
    f.textmatrix(cr, 2) = rs!C2Name.value
  else
    f.textmatrix(cr, 2) = f.textmatrix(cr, 2) & vbnewline & rs!C2Name.value
  end if
 
  rs.movenext
loop
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList