Ошибка Declared cursor already exists

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Ошибка Declared cursor already exists

Сообщение Juice » 05 май 2005, 13:33

Запускаю программу из под IDE Delphi 5 - Все нормально. Когда же запускаю ее из проводника возникает ошибка
ERROR: Dynamic SQL Error
SQL error code = - 502
Declared cursor already exists.

Поиск в по "королевству Delphi" дал такой результат (привожу ответ на похожий вопрос) :
Имя курсора в IBX строится так CursorName:=RandomString(12);
На всех клиентах вызывай Randomize; Должно заработать.

Непонятно что такое CursorName ? Это св-во какого-то компонента или что? Функцию RandomString я тоже не встречал ...
Взято отсюда:
http://www.delphikingdom.ru/asp/answer. ... nswer=7759

Порылся в баг-листе и нашел:

Что это за COBOL такой и причем тут нуль-терминальные строки ? Просто проблемы с английским испытываю :( Надеюсь что кто-то уже сталкивался с такой проблемой и знает как ее решить.
PS. установлен IBXDP504Upd.EXE - вроде как последний

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 05 май 2005, 13:50

Похоже на глючок в IBX. Говорили, что в последних вроде уже он для этого GUID пользует. Так что, видать GUID таки кончились :lol: Загляни у себя в ibsql.pas, constructor TIBSQL.Create, из чего он там FCursor лепит.

Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Сообщение Juice » 05 май 2005, 14:43

Теперь уже понятнее стало чуточку. Написана там вот такая строчка :
FCursor := Name + RandomString( 8 );
Вот решил переписать как было посоветовано :
Randomize;
FCursor := RandomString(12);

Откомпилировал модуль, теперь глюк появляется и в IDE Delphi :D Чудеса :D
Ради любопытства решил посмотреть что он там генерирует :
Randomize;
FCursor := RandomString(12);
ShowMessage(FCursor);

... И после того как я раз 30 нажал ОК программа запустилась и не выдала ошибку ! Получается что тут дело в генераторе случайных чисел ? Пробовал так:
FCursor := chr(Random(100)+50) + chr(Random(100)+50) + chr(Random(100)+50) +
chr(Random(100)+50) + chr(Random(100)+50) + chr(Random(100)+50) +
chr(Random(100)+50) + chr(Random(100)+50) + chr(Random(100)+50) +
chr(Random(100)+50) + chr(Random(100)+50) + chr(Random(100)+50);

Не помогло. Может у кого какие идеи есть ?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 05 май 2005, 14:57

Тебе же уже сказали - не трожь ничего в кишках, а просто на старте пргораммы вызывай Randomize для инициализации генeратора Random псевдослучайным Seed, а не одним и тем же числом при всех запусках.

Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Сообщение Juice » 05 май 2005, 15:25

Не помогает вызов Randomize на старте программы, да и чего он вообще должен помогать на старте если даже в коде компонента он не помогает ?

MuirsheenDurkin
Сообщения: 44
Зарегистрирован: 21 янв 2005, 10:18

Сообщение MuirsheenDurkin » 05 май 2005, 15:52

juice писал(а):Не помогает вызов Randomize на старте программы, да и чего он вообще должен помогать на старте если даже в коде компонента он не помогает ?
Неправильный ответ. Randomize устанавливает Seed (не знаю, как по-русски, я по-русски не очень) алгоритма генерации случайных чисел. Ты все время его переустанавливаешь и не даешь генератору "раскрутиться" как следует.

Randomize правильно вызывать ОДИН раз при старте процесса (в смысле, перед первым обращением к Random).

А правильный ответ в том, что надо GUID надо генерить функцией CoCreateGuid (объявлено в модуле ActiveX).

Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Сообщение Juice » 05 май 2005, 16:10

MuirsheenDurkin, Merlin, огромное вам спасибо! Целый день провозился с этим! С GUID все отлично заработало! ]

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 05 май 2005, 16:52

MuirsheenDurkin писал(а): Randomize устанавливает Seed (не знаю, как по-русски, я по-русски не очень)
Семя. В смысле семечко, из которого растёт последовательность, а не то, что гусары подумали :lol:

MuirsheenDurkin
Сообщения: 44
Зарегистрирован: 21 янв 2005, 10:18

Сообщение MuirsheenDurkin » 06 май 2005, 09:21

Merlin писал(а): Семя. В смысле семечко, из которого растёт последовательность
Спасибо, буду знать. А я все думал, причем тут семечко?...

Ответить