Стремное задание для Access

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Стремное задание для Access

Сообщение Faust » 13.11.2005 (Вс) 15:59

Скорее всего, это ещё и оффтоп, но уж очень приперло... Есть задание: хранить в таблицах прямоугольные матрицы ивыполнять всяческие операции над ними. С хранением я вроде как разобрался просто добавлением ключевого поля-счетчика, и если создание запроса на сложение двух матриц или умножение матрицы на число я ещё в состоянии себе представить, то вот транспонирование матрицы - никак. Может, кто-нибудь подскажет, как его осуществить?
ЗЫ. Если кто шарит БД, но не шарит аналит, то транспонирование - это операции замены строк на столбцы и наоборот, к примеру матрица до
Код: Выделить всё
1 2
3 4
5 6

и после транспонирования:
Код: Выделить всё
1 3 5
2 4 6
Листинги не горят!

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 13.11.2005 (Вс) 17:21

используй запрос акцесса TRANSFORM

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 13.11.2005 (Вс) 19:01

Если хранить матрицы в таблице так:

MatrixID | Row | Column | Value

То транспонирование можно выполнить очень просто - выбрать во временную таблицу все данные, относящиеся к матрице и заменить Row на Column и наоборот, ведь Aji = ^Aji.

Тогда запрос будет вылядеть вот так:

Код: Выделить всё
UPDATE Matrices SET [Column] = Row, Row = Column WHERE MatrixID = @MatrixID;
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 13.11.2005 (Вс) 19:02

На всякий случай сделал примерную базу.
У вас нет доступа для просмотра вложений в этом сообщении.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 13.11.2005 (Вс) 22:11

Я вот тоже думал о такой манере хранения матрицы, но тогда возникает вопрос: как вывести такую матрицу в привычном прямоугольном виде.
Листинги не горят!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 13.11.2005 (Вс) 23:42

А что, у тебя иначе как прямого отображения результатов SELECT *, других способов решения задачи не допускается? Разумеется, данные необходимо отформатировать и причесать в достойный вид, прежде чем пользователь их увидит.
Код: Выделить всё
select [Row], [Column], [Value]
from Matrices
where MatrixId = @MatrixID
order by [Row], [Column]

Получив результат этого запроса, клиентское приложение заполняет, скажем, грид, используя 2 вложенных цикла:
Код: Выделить всё
Rec.Open
For Y = 1 to RCount
  For X = 1 to CCount
    Me.hflexGrid.TextMatrix(X, Y) = CStr(Rec.Fields("Value").Value)
    Rec.MoveNext
  Next X
Next Y
Rec.Close

Да, размерность матрицы можно получить так:
Код: Выделить всё
select max(Row) as [RCount], max(Column) as [CCount]
from Matrices
where MatrixId = @MatrixID

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 15.11.2005 (Вт) 17:37

А что, у тебя иначе как прямого отображения результатов SELECT *, других способов решения задачи не допускается?

Все ещё хуже - эти пункты задания нужно было выполнить в QBE. Но я уже справился, всем спасибо.
Листинги не горят!


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

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

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

    TopList  
cron