C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
глюк 6-го Buidera с ADO или нет, Ошибка при работе с DBGrid
Александр
Отправлено: 23.11.2005, 09:55


Не зарегистрирован







Всё казалось бы очень просто. Имею С++Builder 6.0 русифицированный через ADOTable подсоединяюсь к таблице базы данных Access 2002.

Проблему свёл к элементарщине. Прописал ODBC источник, есть коннект всё нормально. Ставлю DataSet, и DBGrid. В отдельных колонках стоят PickListы но они никак не влияют (проверял). Таблица без проблем визуализируется в DBGride. НО


При изменении (добавлении) в DBGride нескольких полей (не id) выдает ошибку:

Project ... raised exeption class EOleExeption with message
"Не удается найти строку для обновления.Некоторые значения могли быть изменены со времени ее последнего чтения."

выяснил что ошибка возникает как при увеличении числа изменяемых полей, так и при изменении определенных полей таблицы. Т.е. в некоторых запросах разрешает изменять 1-2 поля, в других 3-4.
На мой взгляд глюк компилятора, потому что
подобная ошибка помню была тоже с ADO c Builder 5.0, для ее решения находил патчи.
Поиск в нете ничего не дал.
Если есть подобные патчи для 6.0, или знаете в чем ошибка очень прошу помочь.
Переделывать прогу под 5.0 — это вешалка.
Kuks
Отправлено: 23.11.2005, 10:22


Станционный диспетчер

Группа: Участник
Сообщений: 108



Ключевое поле в таблице есть?
Александр
Отправлено: 23.11.2005, 10:42


Не зарегистрирован







Есть но я его не трогаю абсолютно, оно нормально увеличивается (тип счётчик в Accesse) и вообще не визуализируется в DBGride
AVC
Отправлено: 23.11.2005, 12:16


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

через ADOTable подсоединяюсь к таблице базы данных Access 2002.
Проблему свёл к элементарщине. Прописал ODBC источник

А почему ODBC?
Александр
Отправлено: 23.11.2005, 13:47


Не зарегистрирован







QUOTE (AVC @ 23/11/2005, 12:16)
QUOTE

через ADOTable подсоединяюсь к таблице базы данных Access 2002.
Проблему свёл к элементарщине. Прописал ODBC источник

А почему ODBC?

BDE слишком громоздка, а какие ещё могут быть альтернативы?
Gedeon
Отправлено: 23.11.2005, 14:35


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE
На мой взгляд глюк компилятора

Ну а при чем тут компилятор?

Это м.б. кривизна библиотеки АДО борланда, но не компилятора.
Адо в 6 кривоватая, но это уже совсем. Проверил у себя, вышеописанного глюка нету. Так что попробуйте обновить МДАК, что еще не знаю.

Да, кстати а эта таблица у Вас не результаты ли какого более сложного запроса, сохраненного в эксес отображает, тогда причина м.б. в этом.
Александр
Отправлено: 23.11.2005, 14:40


Не зарегистрирован







Нет ни о каких запросах речь не идёт. А библиотека может и виновата, кто же её знает. Неужели придётся с BDE связываться?
avc*
Отправлено: 23.11.2005, 15:35


Не зарегистрирован







QUOTE

BDE слишком громоздка, а какие ещё могут быть альтернативы?

Ну при чем тут BDE. Для ADO прямой путь в Access — Provider = Microsoft.Jet.OLEDB (у меня 4.0) и файл базы.
Александр
Отправлено: 25.11.2005, 09:22


Не зарегистрирован







QUOTE (avc* @ 23/11/2005, 15:35)
QUOTE

BDE слишком громоздка, а какие ещё могут быть альтернативы?

Ну при чем тут BDE. Для ADO прямой путь в Access — Provider = Microsoft.Jet.OLEDB (у меня 4.0) и файл базы.

Спасибо за совет, я им воспользовался

Проблему я эту не решил, а обошёл. Но обращался я к таблице только через
ADOTable не используя вообще TQuery. Вообщем что только не пробовал. Ничего
не помогло. В итоге я уже стал предполагать что сам компонент DBNavigator
кривой.

Вообщем написал свой навигатор. Перешёл на TQuery и сейчас этой ошибки нет.
Kuks
Отправлено: 25.11.2005, 09:30


Станционный диспетчер

Группа: Участник
Сообщений: 108



Умные люди говорят, что при работе с ADO компонент
TADOTable лучше не использовать, а использовать TADOQuery...

Так что ты (как впрочем и я) убедился на собственном опыте.

Вернуться в Работа с базами данных в C++Builder