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

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

курсор не возвращает записи [D7, XP]


ekto ©   (2008-10-15 09:33:00) 

всем доброго времени суток

есть запрос(SQL Server 2005):

DECLARE @name NVARCHAR(255), @i INT
DECLARE crLenta CURSOR STATIC
 FOR SELECT [name],  COUNT(tl.id) cn  
       FROM text_lenta tl JOIN messages ms ON tl.id = ms.id_text
     GROUP BY  [name]
     HAVING COUNT(tl.id) > 1

DECLARE crID CURSOR STATIC
 FOR SELECT tl.id , ms.id
       FROM text_lenta tl JOIN messages ms ON tl.id = ms.id_text
      WHERE [name] = @name
 
 OPEN crLenta

 FETCH crLenta INTO @name, @i
 WHILE @@FETCH_STATUS = 0
   BEGIN
     OPEN crID
     FETCH crID INTO @mess_id, @text_id
     print @@fetch_status

строка print @@fetch_status печатает -1, хотя отдельно выполненный запрос:

SELECT tl.id , ms.id
       FROM text_lenta tl JOIN messages ms ON tl.id = ms.id_text
      WHERE [name] = @name

возвращает записи. Где ошибка?


ekto   (2008-10-15 10:32:00) [1]


> Palladin ©   (15.10.08 10:20) [8]

спасибо большое!


Palladin   (2008-10-15 10:20:00) [2]

@name на момент декларации - Null
попробуй так


DECLARE @name NVARCHAR(255), @i INT
DECLARE crLenta CURSOR STATIC
FOR SELECT [name],  COUNT(tl.id) cn  
    FROM text_lenta tl JOIN messages ms ON tl.id = ms.id_text
    GROUP BY  [name]
    HAVING COUNT(tl.id) > 1

OPEN crLenta
FETCH crLenta INTO @name, @i
WHILE @@FETCH_STATUS = 0
  BEGIN
    DECLARE crID CURSOR STATIC
    FOR SELECT tl.id , ms.id
       FROM text_lenta tl JOIN messages ms ON tl.id = ms.id_text
       WHERE [name] = @name

    OPEN crID
    FETCH crID INTO @mess_id, @text_id
    print @@fetch_status
    ....
    close crID
    deallocate crID


ekto   (2008-10-15 10:12:00) [3]


> Palladin ©   (15.10.08 10:09) [6]

почему? Поле в выборку надо включить?


Palladin   (2008-10-15 10:09:00) [4]

сомневаюсь, что подобное сработает

DECLARE crID CURSOR STATIC
FOR SELECT tl.id , ms.id
      FROM text_lenta tl JOIN messages ms ON tl.id = ms.id_text
     WHERE [name] = @name


ekto   (2008-10-15 09:57:00) [5]

не, не помогает


ekto   (2008-10-15 09:53:00) [6]


> Palladin ©   (15.10.08 09:50) [3]

вроде как NEXT FROM по умолчанию... ща гляну


Palladin   (2008-10-15 09:50:00) [7]

упс, извнияюсь, внутри второй open не заметил...
ну не знаю как 2005, я сильно еще с ним не работал, но в 2000 я явно всегда указываю

FETCH NEXT FROMcrLenta INTO @name, @i
WHILE @@FETCH_STATUS = 0
  BEGIN
    OPEN crID
    FETCH NEXT FROMcrID INTO @mess_id, @text_id
    print @@fetch_status


ekto   (2008-10-15 09:46:00) [8]


> Palladin ©   (15.10.08 09:42) [1]

да не, ругается на crID... т.е. не ругается, просто не выбирается ничего, хотя должно


Palladin   (2008-10-15 09:42:00) [9]


> ekto ©   (15.10.08 09:33) 

интересный ты парень... ругается на crLenta, а проверяешь crID... молодец, что еще можно сказать...


Наверх

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