Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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) есть заготовки скриптов различных объектов БД, в т.ч. и курсоров.


Наверх

Титульная страница Поиск, карта сайта Написать письмо