Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 10:19   #1
masterdela
Пользователь
 
Аватар для masterdela
 
Регистрация: 28.01.2008
Сообщений: 66
Вопрос Ошибка при заполнении таблицы

Всем здрасьте!
Возникла селдующая проблема, не могу понять от чего! При заполнении DBGrid бывает вылетает ошибка (скрин ошибки ниже), Ошибка не постоянная, но если произошла - то всё! Restart! . Когда хочешь чтобы вылетела эта ошибка, ее как след простыл. Буду благодарен за любой совет!
Да и, пользуясь случаем, как мне отключить перемещение по DBGrid с помощью Tab?

Вот скрин ошибки:
Изображения
Тип файла: jpg error.jpg (22.3 Кб, 139 просмотров)
Была бы цель - и всё получится!
masterdela вне форума Ответить с цитированием
Старый 13.01.2009, 13:45   #2
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Что за база? Через какие компоненты и как вы к ней обращаетесь?

Могу предположить.

Если для идентификации изменяемой записи используется не уникальный ключ, а сумма прежних значений полей, то, в момент отсылки серверу запроса на изменение, записи с такими значениями на сервере может уже не существовать так как они изменены другим пользователем. Об этом и говорит сообщение программы.

Вообще-то в клиент-серверных приложениях при обращении через TQuery и его разновидности это не может быть критической ошибкой и вызывать зависание. Не прошло и не прошло. Бог с ним.

Почему это вешает вашу программу - не знаю.


По второму вопросу.
Свойства DBGrid -> Options -> dgTabs = False
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 13.01.2009, 16:27   #3
masterdela
Пользователь
 
Аватар для masterdela
 
Регистрация: 28.01.2008
Сообщений: 66
По умолчанию

Обыкновенная локальная MS Access... В качестве ключей всех таблиц идет тип счетчик. Все данные выводятся с помощью запросов через AdoQuery.

Цитата:
Почему это вешает вашу программу - не знаю.
Программа не виснет, просто сообщение вылетает безконечно! Ошибка вылетела, закрываю, сразу тоже самое вылазиет!

Буду искать, спасибо за внимание...
Была бы цель - и всё получится!
masterdela вне форума Ответить с цитированием
Старый 13.01.2009, 17:06   #4
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

а можно посмотреть как вы добавляете и какой запрос в AdoQuery?
фЁдОр вне форума Ответить с цитированием
Старый 13.01.2009, 19:36   #5
masterdela
Пользователь
 
Аватар для masterdela
 
Регистрация: 28.01.2008
Сообщений: 66
Радость

Цитата:
Сообщение от фЁдОр Посмотреть сообщение
а можно посмотреть как вы добавляете и какой запрос в AdoQuery?
На примере таблицы с отчетом по внесению оплаты студентом:

Вот запрос:
Код:
SELECT *
FROM tOplata
WHERE :id_student = tOplata.id_student
ORDER BY id_semestr
Добавление строки по нажатию на кнопку:
Код:
Module.tOplataQuery.Append;
Поле tOplata.id_student заполняется автоматически и служит связкой, при создании новой строки, по событию OnNewRecord компонента tOplataQuery. Способ нестандартный конечно, но ошибки тут нет, просто добавляется связывающий идентификатор, все работает!

Я сейчас пытался специально сделать ошибку и сделал! Допустим я добавляю новую строку, заполняю какое-нибудь поле, нормально, заполняю другое и щелкаю по другому полю. Вылетает сообщение, при закрытие вылетает снова и так бесконечно! Приходиться убивать процесс!
Открываю программу снову, открываю туже таблицу, и строка там есть с теми данными которые я ввел... Строка соответствует запросу, т.е. связывающее поле заполнено верно!
Ошибка вылетает тогда, когда ты знаешь что делать чтобы она вылетела! А так программа работает, все заполняется как нужно, связки все на месте! Но все же ошибка через чур критическая, надо найти в чем проблема...

Тааак!!! Пока писал это сообщение, параллельно искал решение проблемы, несколько раз подряд выполнил абсолютно одинаковые действия при которых вылетала ошибка, после по событию onAfterEdit компонента tOplataQuery добавил сохранение:
Код:
    if Module.tOplataQuery.Modified then
    Module.tOplataQuery.Post;
И, о чудо! Выполнил теже действия - а ошибки нет! Буду мучать прогу пока не выдаст мне эту ошибку вновь! Эх, надеюсь я этого не добьюсь!

Жду комментарии, если кто еще сталкивался с такой проблемой...

Вот еще раз скрин ошибки:
Изображения
Тип файла: jpg Clipboard01.jpg (25.7 Кб, 126 просмотров)
Была бы цель - и всё получится!
masterdela вне форума Ответить с цитированием
Старый 15.01.2009, 10:07   #6
masterdela
Пользователь
 
Аватар для masterdela
 
Регистрация: 28.01.2008
Сообщений: 66
Восклицание

Продолжу тему.... Почти во всех таблицах проблема решилась, но вот только "почти"! Ошибка была найдена в одной большой таблице, и метод, описанный выше не помогал... Искал решение... Проблема решилась обновление таблицы после сохранения, т.е. по событию AfterPost компонента AdoQuery:

Код:
AdoQuery.Refresh;
Все работает. Буду дальше искать баги...
Спасибо за внимание...
Была бы цель - и всё получится!
masterdela вне форума Ответить с цитированием
Старый 26.01.2009, 01:16   #7
crc83
Пользователь
 
Аватар для crc83
 
Регистрация: 24.01.2009
Сообщений: 38
По умолчанию

Существует некоректное добавление даных встроеными средствами АДО.
Для повышения надежности советую получать даные с помощью отдельного диалога и вставлять их запросами типа INSERT/UPDATE.

Сдесь же помагает если ввести все даные сразу.... или для каждого поля в таблице (это надо сделать с помощью Access) присвоить значение по умолчанию!!!
crc83 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при добавлении новой записи через форму подставлолось значение из другой таблицы Baxxter Microsoft Office Access 1 07.01.2009 22:23
Ошибка при попытке вывода полей из таблицы в ORACLE older Общие вопросы Delphi 2 04.06.2008 17:26
Возник вопрос при заполнении массива.. SnakeMan Помощь студентам 8 15.01.2008 12:31
Создание связной таблицы при помощи SQL Worms БД в Delphi 1 04.12.2007 16:18
Связанные таблицы - проблема при обращении к полю БД nataly_ukr БД в Delphi 7 13.11.2007 10:47