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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2010, 02:00   #1
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию И снова SQL

Доброго времени суток уважаемые эксперты.
Возник вопрос:
Для добавления записи в базу Access использую такой код:
Код:
  if (EScore.Text <> '') and (ComboBoxLevel.Text <> '') and (ComboBoxResult.Text <> '') then
  begin
   with DataModule1.TMPQueryIndicators do
   begin
    Close;
    Active:=false;
    SQL.Clear;
      SQL.Text:='INSERT INTO [Indicators] ([PartitionNumber], [CodeLevel], [CodeResults], [Score]) VALUES (:ed1,:ed2,:ed3,:ed4);';
      Parameters.ParamByName('ed1').Value:=ComboBoxPartitionNumber.ItemIndex;
      Parameters.ParamByName('ed2').Value:=ComboBoxLevel.ListSource.DataSet.FieldByName('CodeLevel').AsInteger;
      Parameters.ParamByName('ed3').Value:=ComboBoxResult.ListSource.DataSet.FieldByName('CodeResults').AsInteger;
      Parameters.ParamByName('ed4').Value:=StrToInt(EScore.Text);
    ExecSQL;
    Active:=true;
   end
  end else
  begin
    MessageDLG('Одно или несколько полей не заполнено.',mtWarning,[mbOK],0);
  end;
Все поля - типа Длинное Целое.
ComboBoxLevel и ComboBoxResult - LookupComboBoxEh.
PartitionNumber, CodeLevel, CodeResults - ключевые поля таблицы.
Данный код добавляет запись в таблицу, но приложение вылетает с ошибкой:
error.jpg
Подскажите пожалуйста, что я не так делаю?
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 13.03.2010, 09:10   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Ошибка выскакивает из за:
Цитата:
PartitionNumber, CodeLevel, CodeResults - ключевые поля таблицы.
Вы знаете, что такое ключевое поле(набор полей)?
А то, что оно(или они) должны быть уникальны в пределах таблицы, догадываетесь?!
Вам же прямо английским по белому пишут - что такие значения ключей УЖЕ ЕСТЬ В ТАБЛИЦЕ! Поэтому их записать нельзя!

кроме того, в программе есть маленькая избыточность и грубая ошибка.
избыточность - если Вы присваиваете выражение SQL.Text - то перед этим SQL.Clear можно не делать....

Ошибка. Уж сколько раз твердили миру...
Нельзя делать Query.Open (или, что является полным аналогом Open) Query.Active := true
для запросов, изменяющих данные (insert/delete/update)
Открывать запрос можно ТОЛЬКО если в запросе выполняется выборка данных (SELECT). ВСЁ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2010, 13:16   #3
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Какие проблемы могут быть с индексами, если таблица пустая?
Clear - наверное - это сила привычки, по крайней мере она никому не помешает. Хуже будет, если она понадобиться и я ее забуду)))
За Query.Active -за это спасибо. Все работает на ура...
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 13.03.2010, 22:46   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Impuls1989 Посмотреть сообщение
Какие проблемы могут быть с индексами, если таблица пустая?
значит в коде где-то не проставляются значения этих ключевых полей или соответствующие датасеты не открыты
soleil@mmc вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MDIChild снова и снова... Siber_Dec Общие вопросы Delphi 2 13.12.2009 03:24
Авторизация. Снова(( newmister Работа с сетью в Delphi 25 09.02.2009 00:49
И снова Service! Shurik Hacker Общие вопросы Delphi 5 27.01.2008 21:36
И снова сервисы Баламут Win Api 3 13.12.2007 01:26