Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > BOF or EOF = True на sp.Parameters.Refresh |
Автор: kami 26.11.2013, 13:35 | ||||
Добрый день, уважаемые! Столкнулся с непонятной мне проблемой в виде "EOLEException - BOF или EOF имеет значение True, либо текущая запись удалена." Но возникает оно на Parameters.Refresh, что как бы вообще не.
Реализация ReadFromDB почти идентичная:
Callstack указывает на: ADODB.RefreshFromADO ADODB.TParameters.InternalRefresh ADODB.TParameters.Refresh Меняем местами List1 и List2 - проблема исчезает, но это половинчатое решение - списков может быть несколько, часть с параметрами, часть без. Почему так и что можно сделать? |
Автор: Frees 29.11.2013, 11:28 | ||
|
Автор: kami 29.11.2013, 14:01 |
Увы - нет. Пробовал и так, но sp гарантированно закрыта. Принудительное добавление sp.Close в оба (и по отдельности) метода ReadFromDB результата не дает, ошибка та же... P.S. изначально забыл сказать - используется D2010, Win7 со всеми обновлениями. |
Автор: kami 3.12.2013, 21:13 | ||||
Думаю, что дело не в Delphi... хотя... Минимальная конфигурация (другой, к сожалению, нет), на которой воспроизводится это хозяйство: MySQL v5.6 + ODBC драйвер (ох, не помню версию, но вроде последняя - 5.2.6). В параметрах ODBC -подключения всё по умолчанию, кроме: Enable automatic reconnect и Allow multiple statements= True. Скрипт для БД:
Код приложения уместился в один обработчик события:
|
Автор: Frees 4.12.2013, 06:38 |
MySQL у меня нет, пробовал на Firebird через ODBC, на Delphi XE3. Conn - создавал в дизайне. в твоем коде не хватает conn.Connected := True; Ошибок не видел. |
Автор: kami 4.12.2013, 08:42 |
Оно автоматом выставится при первом sp.Open. Тогда - одно из двух. Либо мускул и его ODBC, либо Delphi 2010... (надеюсь, третье - кривые руки можно исключить). С Delphi и мускула я не слезу, так что... оставим всё как есть, благо это исключение вылезает только при отладке, даже не влияя на дальнейшее выполнение кода, правда - что происходит с самими параметрами при этом - не выяснял... |
Автор: Frees 4.12.2013, 17:42 |
Было исключение на Refresh, о том что нет коннекта. |
Автор: kami 4.12.2013, 21:48 |
А вот это странно. Ибо (по крайней мере в D2010) в TParameters.Refresh первым делом вызывается Command.SetConnectionFlag(cfParameters, True)и в нем железобетонно (при неактивном соединении) OpenConnection. Добавлено через 2 минуты и 27 секунд Да это легко проверить и в дизайнтайм - при любой манипуляции с параметрами, списком полей, при попытке выбрать из списка имя sp или выставить sp.Active - автоматом активируется ADOConnection. |