![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
2000 Работа с курсором [MSSQL]
KAA © (2002-03-28 15:43:00)Ни по одному примеру не смог сделать работающий кусор. Можете объяснить чайника, как правильно сделать курсор и по нему перемещаться?
И как перемещаться по обычной таблице, переберая ячейки в цикле?
SergSuper (2002-04-01 13:56:00) [1]2 KAA
Да я не знаю, как это объяснить
Допустим у Вас есть таблица с остатками денег на счете по дате. В какой-то момент пришли деньги.
Вы можете найти запись с текущей датой и к каждой последющей записи прибавлять изменение суммы. Сделаете курсор и всё будет работать.
Можно рассуждать не так: прибавить изменение суммы для записей, у который дата больше текущей. И написать update ... where date>@date. С одной стороны тоже самое, но если приглядеться, то уже мы не употребляем слово "запись" в единственном числе.
Вроде на таком примере всё очевидно, но для более сложных задач начинающих очень часто тянет использовать первый способ.
Удачи
С приветом Сергей
PS. А часть функций перекладывать на клиента не надо, даже если это кажется проще. Клиент должен только отображать.
KAA (2002-04-01 13:02:00) [2]>SergSuper
Что значит, работать с массивом данных?
Первоначальная идея была сделать все средствами SQL, не привлекая клиента. Хотя сейчас уже вроде как готовы возложить часть функций на клиента.
KAA (2002-04-01 12:10:00) [3]>Delirium
Шеф, он же писатель клинеской части программы, вспомнил что есть такая замечаетльная вещь как TDecisionCube, и мне не обязательно шахматку делать.
Вот только в этом кубе сам черт голову сломет, да еще делфи периодически разваливается из-за него.
Где-нибудь есть какая-нибудь дока по нему, чтоб понятно было и на русском?
SergSuper (2002-04-01 10:51:00) [4]2 Fay
Чуть выше эта тема раскрыта, мессадж от 29.03.02 12:48
Тогда повторю вопрос, как еще можно работать с отдельными
ячейками таблицы, в частности пробежать в цикле по ним?
Очень характерный пример. Вместо того что бы работать с массивом данных, KAA думает как ему пробежаться по записям.
2 KAA
С курсорами за день можно разобраться, а вот опыт года работы на SQL за день не получить :)
Fay (2002-03-31 04:48:00) [5]2Alex-A
IMHO, LOCAL курсоры в этом не сильно нуждаются
2SergSuper
>А вообще в MSSQL с курсорами лучше не работать,
>тем более чайнику Необходимость их использования
>возникает очень редко, а соблазн их использовать уводит от
>реаляционной теории (чё-то как-то слишком умно написал)
Чайнику лучше не работать с курсорами - это точно.
Но не_чайники в чём провинились?
Если можно, раскройте получше тему "уводит от реаляционной теории "
JibSkeart (2002-03-29 17:45:00) [6]Ну ребята не знаю с курсорами некоторые веши делать удобнее
то что реже используешь конечно
я допустим их использую в тех случаях когда все таблички надо посмотреть и что то в таком духе ...
KAA (2002-03-29 15:31:00) [7]А по поводу компонент в Делфи, мне этот вариант не подходит, т.к. я пишу исключительно хранимые процедуры в MSSQL, не привязываясь к какому-либо языку.
KAA (2002-03-29 15:27:00) [8]OLAP надо сесть и спокойно почитать. Просто у меня тест уже готов, используя то что мне уже посоветовали, шахматка у меня уже получилась. А будет спокойный денек, почитаю и про OLAP.
Delirium (2002-03-29 14:55:00) [9]Если OLAP пользовать не хочешь (или не можешь) - в Delphi есть компонент TDecisionCube
KAA (2002-03-29 14:20:00) [10]>Delirium
Да я все бьюсь с шахматкой, тест делаю. Есть произвольное чило людей, которых нужно протестировать, есть произвольное число тестов. По каждому тесту человек получит сколько-то балов. Нужно все это в одну матрицу вывести.
Delirium (2002-03-29 13:06:00) [11]
> KAA ©
На вопрос КАК - ответ дан : пользровать курсор. Мне-же интересно в какой ситуации тебе это понадобилось делать средствами MSSQL?
KAA (2002-03-29 12:48:00) [12]>Delirium
Тогда повторю вопрос, как еще можно работать с отдельными ячейками таблицы, в частности пробежать в цикле по ним?
Delirium (2002-03-29 12:43:00) [13]Поддеживаю SergSuper - Курсоры, необходимы лишь в редких случаях, и пользовать их надо с умом.
KAA (2002-03-29 12:13:00) [14]>SergSuper
А что значит год работы? Если надо и хорошо объяснят, можно и за день разобраться с этими курсорами.
Собственно задача, в цикле бегать по записям таблицы.
SergSuper (2002-03-29 11:47:00) [15]А вообще в MSSQL с курсорами лучше не работать, тем более чайнику
Необходимость их использования возникает очень редко, а соблазн их использовать уводит от реаляционной теории
(чё-то как-то слишком умно написал)
Пока у Вас не будет как минимум год работы с MSSQL - не используйте их вообще, даже если кажется что без них никак(на самом деле как).
JibSkeart (2002-03-29 10:12:00) [16]to KAA
верно говорищь
KAA (2002-03-29 09:17:00) [17]Поглядел я эти заготовки скриптов и нашел одно отличее от предлогаемого метода, после чего все заработало.
WHILE (@@fetch_status <> -1)
Alex-A (2002-03-29 06:51:00) [18]К сказанному Fay могу добавить: после close c
deallocate c
Fay (2002-03-28 23:01:00) [19]DECLARE @<ИМЯ_ПЕРЕМЕННОЙ> <КАКОЙ-ТО ТИП>
DECLARE C CURSOR LOCAL FOR SELECT <ЧЁ-ТО> FROM <ГДЕ-ТО>
OPEN C
FETCH NEXT FROM C INTO @<ИМЯ_ПЕРЕМЕННОЙ>
WHILE @@FETCH_STATUS=0
BEGIN
<ЧЁ-ТО_ТУТ_ДЕЛАЕМ_ИЛИ_НЕ_ДЕЛАЕМ>
FETCH NEXT FROM C INTO @<ИМЯ_ПЕРЕМЕННОЙ>
END
CLOSE C
GO
Delirium (2002-03-28 15:49:00) [20]В Query Analuzer, в закладке Templates (внизу Oject Browser) есть заготовки скриптов различных объектов БД, в т.ч. и курсоров.