Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

2000 Работа с курсором 


KAA   (2002-03-28 15:43) [0]

Ни по одному примеру не смог сделать работающий кусор. Можете объяснить чайника, как правильно сделать курсор и по нему перемещаться?
И как перемещаться по обычной таблице, переберая ячейки в цикле?



Delirium   (2002-03-28 15:49) [1]

В Query Analuzer, в закладке Templates (внизу Oject Browser) есть заготовки скриптов различных объектов БД, в т.ч. и курсоров.



Fay   (2002-03-28 23:01) [2]

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



Alex-A   (2002-03-29 06:51) [3]

К сказанному Fay могу добавить: после close c
deallocate c



KAA   (2002-03-29 09:17) [4]

Поглядел я эти заготовки скриптов и нашел одно отличее от предлогаемого метода, после чего все заработало.
WHILE (@@fetch_status <> -1)



JibSkeart   (2002-03-29 10:12) [5]

to KAA
верно говорищь



SergSuper   (2002-03-29 11:47) [6]

А вообще в MSSQL с курсорами лучше не работать, тем более чайнику
Необходимость их использования возникает очень редко, а соблазн их использовать уводит от реаляционной теории
(чё-то как-то слишком умно написал)
Пока у Вас не будет как минимум год работы с MSSQL - не используйте их вообще, даже если кажется что без них никак(на самом деле как).



KAA   (2002-03-29 12:13) [7]

>SergSuper
А что значит год работы? Если надо и хорошо объяснят, можно и за день разобраться с этими курсорами.
Собственно задача, в цикле бегать по записям таблицы.



Delirium   (2002-03-29 12:43) [8]

Поддеживаю SergSuper - Курсоры, необходимы лишь в редких случаях, и пользовать их надо с умом.



KAA   (2002-03-29 12:48) [9]

>Delirium
Тогда повторю вопрос, как еще можно работать с отдельными ячейками таблицы, в частности пробежать в цикле по ним?



Delirium   (2002-03-29 13:06) [10]


> KAA ©

На вопрос КАК - ответ дан : пользровать курсор. Мне-же интересно в какой ситуации тебе это понадобилось делать средствами MSSQL?



KAA   (2002-03-29 14:20) [11]

>Delirium
Да я все бьюсь с шахматкой, тест делаю. Есть произвольное чило людей, которых нужно протестировать, есть произвольное число тестов. По каждому тесту человек получит сколько-то балов. Нужно все это в одну матрицу вывести.



Delirium   (2002-03-29 14:55) [12]

Если OLAP пользовать не хочешь (или не можешь) - в Delphi есть компонент TDecisionCube



KAA   (2002-03-29 15:27) [13]

OLAP надо сесть и спокойно почитать. Просто у меня тест уже готов, используя то что мне уже посоветовали, шахматка у меня уже получилась. А будет спокойный денек, почитаю и про OLAP.



KAA   (2002-03-29 15:31) [14]

А по поводу компонент в Делфи, мне этот вариант не подходит, т.к. я пишу исключительно хранимые процедуры в MSSQL, не привязываясь к какому-либо языку.



JibSkeart   (2002-03-29 17:45) [15]

Ну ребята не знаю с курсорами некоторые веши делать удобнее

то что реже используешь конечно
я допустим их использую в тех случаях когда все таблички надо посмотреть и что то в таком духе ...



Fay   (2002-03-31 04:48) [16]

2Alex-A
IMHO, LOCAL курсоры в этом не сильно нуждаются

2SergSuper
>А вообще в MSSQL с курсорами лучше не работать,
>тем более чайнику Необходимость их использования
>возникает очень редко, а соблазн их использовать уводит от
>реаляционной теории (чё-то как-то слишком умно написал)

Чайнику лучше не работать с курсорами - это точно.
Но не_чайники в чём провинились?
Если можно, раскройте получше тему "уводит от реаляционной теории "



SergSuper   (2002-04-01 10:51) [17]

2 Fay
Чуть выше эта тема раскрыта, мессадж от 29.03.02 12:48

Тогда повторю вопрос, как еще можно работать с отдельными
ячейками таблицы, в частности пробежать в цикле по ним?


Очень характерный пример. Вместо того что бы работать с массивом данных, KAA думает как ему пробежаться по записям.

2 KAA
С курсорами за день можно разобраться, а вот опыт года работы на SQL за день не получить :)



KAA   (2002-04-01 12:10) [18]

>Delirium
Шеф, он же писатель клинеской части программы, вспомнил что есть такая замечаетльная вещь как TDecisionCube, и мне не обязательно шахматку делать.
Вот только в этом кубе сам черт голову сломет, да еще делфи периодически разваливается из-за него.
Где-нибудь есть какая-нибудь дока по нему, чтоб понятно было и на русском?



KAA   (2002-04-01 13:02) [19]

>SergSuper
Что значит, работать с массивом данных?
Первоначальная идея была сделать все средствами SQL, не привлекая клиента. Хотя сейчас уже вроде как готовы возложить часть функций на клиента.



SergSuper   (2002-04-01 13:56) [20]

2 KAA
Да я не знаю, как это объяснить
Допустим у Вас есть таблица с остатками денег на счете по дате. В какой-то момент пришли деньги.
Вы можете найти запись с текущей датой и к каждой последющей записи прибавлять изменение суммы. Сделаете курсор и всё будет работать.
Можно рассуждать не так: прибавить изменение суммы для записей, у который дата больше текущей. И написать update ... where date>@date. С одной стороны тоже самое, но если приглядеться, то уже мы не употребляем слово "запись" в единственном числе.
Вроде на таком примере всё очевидно, но для более сложных задач начинающих очень часто тянет использовать первый способ.

Удачи
С приветом Сергей
PS. А часть функций перекладывать на клиента не надо, даже если это кажется проще. Клиент должен только отображать.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.022 c
1-69770           Джафар                2002-04-10 08:41  2002.04.22  
Как подключитькомпонент ?


4-70072           Demn                  2002-02-17 09:44  2002.04.22  
Как перезагрузить чужую рабочую станцию?


3-69747           совсем Новенький      2002-04-02 13:44  2002.04.22  
Базы даных


3-69686           Merle Corey           2002-03-29 20:46  2002.04.22  
Як сконфигурировать DCOM?


3-69731           Kirill                2002-03-28 17:15  2002.04.22  
Помогите сформировать запрос