ADO... проблема с базой Help!!!

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Lex87
Сообщения: 1
Зарегистрирован: 29 ноя 2006, 17:45

Здравствуйте!!! Help плиз...
В Delphi новичок создаю программу. База данных в access. В Delphi базу привязываю через ADO. Проблема в том что при заполнении значений в сетке DB Grid вылазиет ошибка: "EOleException with message 'Недостаточные или неполные сведения о ключевом поле. Обновление влияет на слишком большее число строк'.
В чём проблема не знаю... подскажите, кто знает. ОЧЕНЬ надо!!! :( :( :(

Вот архив с моей прогой...посмотрите кому не лень пожалуйста. :rolleyes:
Вложения
Praktik.zip
(32.31 КБ) 20 скачиваний
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Блин, у меня шары выпали из орбит :) Ты пробовал поставить контрольную точку на Button1 и запустить прогу, а потом с F8 смотреть что она делает? Я думаю, что не пробовал, т.к. она такую хрень там выполняет, с пустыми строками как-то работает, считая что там какие-то действия, я ваще поражаюсь как компилятор съел это перед запуском, извиняюсь конечно...

Совет первый, переделай While do на repeat until
AdoTable1.first;
repeat
...
adotable1.next;
until adotable1.eof;

уже будет что-то проясняться, и наглядней выглядеть

Совет второй, обращайся к полям как Adotable1<имя поля>.text
например Adotable1IdTab.text.

Совет третий, чтобы узнать кол-во записей в таблице используй
Adotable1.recordcount

я то у тебя много циклов со счетчиками записей.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

И по-моему в конфигурации базы на аксесе ты используешь поля типа численные, одинарные с точкой, сегодня только сталкнулся с этой проблемой, лучше двойной с точкой. Меньше хлопот
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

Очень интересный случай. У меня тоже шары чуть не выпали при попытке продебажить программу.
А что ещё интереснее, так это то, что когда я в самом начале процедуры TForm1.Button1Click написал свой код - один в один к его (не копировал, а именно набрал с нуля) то дебагер определил его правильно, стоило мне скопировать строку из оригинального кода и у дебагера сносило крышу. Создал новый проект, вставил ADOConnection, ADOTable, DataSource, Grid, Button, событие Button1Click - все ок, написал первую часть его кода, все ок, заменил написанное мной его аналогом и у деббагера снесло крышу. Очень интересно, я такого никогда не встречал.
Lex, делай следующее: напиши программу заново, не копируй старый код (перепиши построчно), отлаживай программу после каждого этапа. Это наверное единственный хороший совет в твоём случае.
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

Нашёл способ побороть проблему с дебаггером, нужно весь текст Unit1.pas скопировать в Far manager'е (в других программах не пробовал) и заменить им текст Unit1.pas в Delphi IDE. После этого программа начала нормально дебажиться. Думаю что там где-то закрался левый символ, IDE его не отображала, но обрабатывала и путалась, а фар его не копирует следовательно копирование позволило избавиться от этого символа.
А ошибка у меня выходит следующая Invalid floating operation - там у тебя деление на ноль, а это логическая ошибка и искать её уже тебе :)
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

прикола ради скачал... под Д5 открыл с большим трудом проигнорив кучу всяких ошибков, в результате чего не запускал ;)
Непонятки:
1) жмакаем кнопку и прога 6 раз пролетает одинаковые операции (для разных полей) в результате на экране в Лейблах имеет результат последнего вычисления...
2) почему бы не использовать для вывода в TLabel стандартную фукнцию форматирования Format()?
3) предполагаю в процессе работы мелькание в TDBGrid связанное с перемещением активной записи, чтобы такого не было используют парные функции DisableControls/EnableControls

Возражу Dr_Grizzly, менять While на Repeat я бы не стал ;)

Для подсчёта всяких сумм (и количеств) напрашивается SQL-запрос...
Кроме того те 6 блоков также напрашиваются в процедуру ;)
Изображение
Ответить