![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
lotos |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 18.1.2004 Репутация: нет Всего: нет |
Подскажите пож-ста....!!!
Как вывести в DBGrid данные из БД вида: Поля || X1 |X2 |X3 |X4 | ---------------------------- Данные Y1 |Y2 |Y3 |Y4 | ....................... и т.п. и показать их в следующем виде: X1 |Y1 |Y1 | ..... X2 |Y2 |Y2 | ....... то есть перевернуть данные ... Бьюсь, бьюсь и ни чего не приходит в голову .... Помогите !!!!! ![]() ![]() ![]() |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
lotos, стандартно - никак. можно подробнее о задаче, зачем это надо (может, есть другой путь решения?) и какая субд.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
lotos |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 18.1.2004 Репутация: нет Всего: нет |
М-да ....!!!
Может я и не прав!!!!! но вот задача ..... Требуется по различным объектам каждый день заносить показания . Количество объектов фиксировано .... Вот я и соорудил (вернее пытаюсь соорудить) структуру тыблицы .. Описание : Х1 - это дата ввода ... , а от Х2 до Хн - это и есть объекты Так вот а внешне желательно просмотреть так: ---------- дата | | |----------------------- -------------------------------------------------------------------------- объект1 | ------------- | данные по датам (т.е. Y) объект2 | Вот такие вот дела ... что делать? База используется Paradox!!!! |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
lotos, стандартными средствами это не сделаешь. можно попробовать через DecisionCube, там есть возможность группировать данные по любым измерениям, но он жрёт много памяти и криво работает. проще всего, имхо, написать процедуру, которая будут обновлять данные в стандартном гриде
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
lotos |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 18.1.2004 Репутация: нет Всего: нет |
А может подскажите в плане нормализации структуры таблицы ...
Может она у меня совсем неверная? |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
если кол-во объектов действительно фиксировано - то всё верно. можно, конечно, нормализовать: выделить таблицу объектов, линковочную таблицу данных, но кроме тормозов это ничего не даст, и при отображении не поможет. да и вообще нормализация хороша только на страницах учебников, реально я нигде не видел ни одной рабочей базы, нормализованной до 5 формы.
Добавлено @ 11:34 lotos, единстенный момент: данные на объекты приходят одновременно на все? если нет, то нормализовать всё-таки стоит. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Maverick |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: 2 Всего: 10 |
Вот я сделал в свое время этот ужас для подобной задачи... Сделано наспех, но работает... Выбрасывал в Excel.... В начале переводил все названия объектов в массив string-овый....
BeginStolb := 1; //столбцы i BeginStrok := 1; //строки j StolbCount := DaysBetween(dtpBeg.Date, dtpEnd.Date)+1 +1; {начало и конец наблюдений, запрашиваем у пользователя} StrokCount := n+1; {n - кол-во объектов} ExcelApp := CreateOleObject('Excel.Application'); ExcelApp.Application.EnableEvents := false; Workbook := ExcelApp.WorkBooks.Add; WorkBook.WorkSheets[1].Columns.ColumnWidth := 40; WorkBook.WorkSheets[1].Columns.RowHeight := 14; WorkBook.WorkSheets[1].Columns.Autofit; ArrayData := VarArrayCreate([1, StrokCount, 1, StolbCount], varVariant); ====================================================== ОСНОВНОЕ РЕШЕНИЕ ДЛЯ СОСТАВЛЕНИЯ ИСКОМОГО ОТЧЕТА (выше и ниже форматизация для Excel) // Заполняем массив for i := 1 to StrokCount do for j := 1 to StolbCount do begin if (i = 1) and (j=1) then ArrayData[i,j] := 'ОБЪЕКТЫ/ДАТЫ' //левый верхний угол - комментарий else if (j = 1) and (i>1)then ArrayData[i,j] := ИМЯ ОБЪЕКТА[i-1 -1] //слева колонка объектов, нумерация странная из-за того что массив динамический с 0 и еще учитываем названия объектов в первой колонке.... else if (i = 1) and (j>1) then ArrayData[i,j] := DateToStr(dtpBeg.Date + j-1 -1) //сверху строка дат else //проверка выполняемости заказа на конкретную дату... if объект j работал в дату i (несложный SQL запрос) then ArrayData[i, j] := результат запроса; //иначе ячейка остается пустой ====================================================== Cell1 := WorkBook.WorkSheets[1].Cells[BeginStrok, BeginStolb]; Cell2 := WorkBook.WorkSheets[1].Cells[BeginStrok + StrokCount-1, BeginStolb + StolbCount - 1]; fontsect := WorkBook.WorkSheets[1].Cells[BeginStrok+1, BeginStolb+1]; // Область, в которую будем выводить данные Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2]; ranfont :=WorkBook.WorkSheets[1].Range[fontsect, Cell2]; Range.Value := ArrayData; WorkBook.WorkSheets[1].Cells.Font.Bold := True; ranfont.Font.Color := clGreen; ExcelApp.Visible := true; Decision Cube очень неповоротлив и глюкав.... Это сообщение отредактировал(а) Maverick - 4.5.2004, 12:22 |
|||
|
||||
Она |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 23.4.2004 Где: Москва Репутация: нет Всего: 2 |
Самый простой способ- представить эти данные не в DBGrid a StringGrid... Понятно, что на больших выборках лучше так не развлекаться, но с другой стороны вряд ли юзер оценит такое представление данных при больших объемах информации (более 100 таких столбцов). Как писать в SringGrid, надеюсь, понятно? ( для особо понятливых - ключевые слова: Cells, RowCount, ColCount)
-------------------- С уважением. Мария. |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
Она, ты себя чтением предыдущих постингов не утруждаешь?
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
lotos |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 18.1.2004 Репутация: нет Всего: нет |
Maverick Я так понял, что для заполнения БД не имеет смысла как она выглядит ..... А вот для выдачи отчетных данных ты предлагаешь формировать их в Exel ... Я правильно тебя понял? |
|||
|
||||
Она |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 23.4.2004 Где: Москва Репутация: нет Всего: 2 |
Для "заполнения" базы ВАЖНО как она нормализована и как построены индексы. Особенно если речь о реал-тайм системе. Здесь это не так? Вот как представить данные - вопрос удобства пользователя и скорости/надежности реализации необходимых для этого алгоритмов.
Как я видела, в этих постингах о StringGrid ничего не было, а это, пожалуй самый простой способ представления/редактирования данных в твоем случае (да и во многих других). А твои "Объекты" видимо числа, строки? Или речь идет действительно о сериализации? Если имеет место быть сохранение состояния объектов на уровне свойств, естественно лучше продумать структуру базы, а возможно, отказаться от Paradox (если это реально) И потом ексель -дорога в один конец - только вывод.... Ввод/редактирование делать - зачем тогда Делфа? Да и запаришься... -------------------- С уважением. Мария. |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Рекомендую использовать временную таблицу. По крайней мере я так решал этот вопрос.
-------------------- |
|||
|
||||
Maverick |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: 2 Всего: 10 |
lotos
Верно... Если пользователь такой чудак, что хочет видеть данные за 200 дней пусть видит - нечего делать скидки, пусть скрывает, если много.... Но я запрашивал у пользователя искомые начало и конец наблюдений... По опыту больше 10 дней редко, кто заказывает.... Создавать отчет динамически сложно, а Excel у пользователя всегда под рукой... Слева распологаешь все объекты, сверху весь запрошенные период.... и начинаешь заполнять ячейки на пересечении через запросы... А структура - это личное дело каждого... Но если изначально - где-то ненормализовано, через год, но всплывет... и нормализовать придеться, большей кровью.... Это сообщение отредактировал(а) Maverick - 5.5.2004, 08:59 |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
lotos, для заполнения бд как раз имеет смысл её структура. при твоей всё будет относительно нормально, если записи ложаться по всем объектам одновременно. если же по каким-то запись проходит, а по каким-то - может и н епроходить, а пройти позже, то надо создавать отдельную таблицу объектов и линковочную таблицу с данными.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |