1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
1

Ошибка при оставлении пустым поля Integer

24.01.2020, 06:34. Показов 3823. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
1. При оставлении пустым полей "Integer" выдает ошибку. Lazarus & Firebird. с другими полями такого нет.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
begin
      Query_Add.Close;
      Query_Add.SQL.Text := 'Update Obrazovanie SET SPR_OBRAZOVANIE_ID=:Obr, SPR_UCH_ZAV_ID=:Uch_zav, SPECIALNOST=:Spec, UCH_ZAV_DATE=:Data, FORMA_OBUCH=:Forma, SROK_OBUCH=:Srok, N_DIPLOMA=:Diplom where Obrazovanie_id=:Obr_ID';
      Query_Add.ParamByName('Obr_ID').AsString := Edit_Kand_id.text;   
      Query_Add.ParamByName('Obr').AsString := DBEdit_Obrazov_id.text;  // Пока не заплнишь строку - выдает ошибку "Invalid variant type cast."
      Query_Add.ParamByName('Uch_zav').AsString := DBEdit_Uch_zav_ID.text;  // то же самое
      Query_Add.ParamByName('Spec').AsString := DBEdit_Specialnost.text;
      Query_Add.ParamByName('Data').AsString := DBEdit_UCH_ZAV_DATE.text;
      Query_Add.ParamByName('Forma').AsString := DBEdit_Forma_obuch.text;
      Query_Add.ParamByName('Srok').AsString := DBEdit_Srok_obuchen.text;
      Query_Add.ParamByName('Diplom').AsString := DBEdit_N_Diploma.text;
      Query_Add.ExecSQL;
      SQLTransaction_Now.Commit;
  end;
Как этого избежать. Не всегда требуется заполнение этих полей
2. И еще. Подскажите, как перенести длинную строку кода "Query_Add.SQL.Text :=..." на новую без потери работоспособности???
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2020, 06:34
Ответы с готовыми решениями:

BSOD при оставлении ноута включенным на ночь
Оставляю компьютер, прихожу утром и смотрю на бсод.

Внешний отчет (материальный) выводится пустым при формировании. Ошибка в запросе
Здравствуйте. Есть база в БП 2.0 и есть внешний материальный отчет (добавлен архив с ним во...

Ошибка : Нельзя преобразовать тип array [1..8] of integer к integer
Дана целочисленная матрица В размером 5х8. Получить массив С из 0 и 1, в котором Ci=1, если в i –ой...

Ошибка 'is not a valid integer value' при вводе в Edit
Подскажите пожалуйста, ввожу в edit целые числа, но мне нужно отделить их пробелом. Когда отделяю...

13
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
24.01.2020, 10:17 2
Цитата Сообщение от salaev Посмотреть сообщение
2. И еще. Подскажите, как перенести длинную строку кода "Query_Add.SQL.Text :=..." на новую
Pascal
1
2
3
'Update Obrazovanie SET SPR_OBRAZOVANIE_ID=:Obr, SPR_UCH_ZAV_ID=:Uch_zav, ' +
  'SPECIALNOST=:Spec, UCH_ZAV_DATE=:Data, FORMA_OBUCH=:Forma, SROK_OBUCH=:Srok, ' +
  'N_DIPLOMA=:Diplom where Obrazovanie_id=:Obr_ID'
1
1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
25.01.2020, 06:17  [ТС] 3
То же самое происходит, если не заполнить поле типа "Date"
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,754
Записей в блоге: 3
25.01.2020, 07:49 4
Цитата Сообщение от salaev Посмотреть сообщение
Не всегда требуется заполнение этих полей
Ну а зачем включать в запрос UPDATE поле, которое не заполнено?
0
1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
25.01.2020, 10:13  [ТС] 5
Тогда каждое поле проверять - заполнено или нет и сохранять после этого???
- разве нет другого способа???
Аналогичная ситуация при добавлении новой записи.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,754
Записей в блоге: 3
25.01.2020, 11:17 6
Есть. В СУБД не делать поле обязательным или установить значение по умолчанию (для числовых полей)
0
1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
25.01.2020, 12:32  [ТС] 7
Самое интересное, что из них нет ни одного обязательного поля. Присваивать значение по умолчанию возможно при добавлении новой записи, но как быть при редактировании???
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,754
Записей в блоге: 3
25.01.2020, 13:29 8
Лучший ответ Сообщение было отмечено salaev как решение

Решение

1. Не использовать компоненты DBEdit
2. Динамически формировать запрос.
3. Пересмотреть свою архитектуру БД: в ней не должно быть незаполненных полей.
1
1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
26.01.2020, 09:32  [ТС] 9
Теперь, если в поле были изменения, то выполняется обновление. Так ошибок не выдаёт. Но если я удаляю дату из поля (она не всегда нужна), это воспринимается как изменение и сново ошибка, т. К. Он не может присвоить пустое значение ячейке (хотя оно не является обязательным)
Это касается полей integer и date
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,754
Записей в блоге: 3
26.01.2020, 12:26 10
Цитата Сообщение от salaev Посмотреть сообщение
если я удаляю дату из поля
Если у Вас поле таблицы БД типа TDateTime - оно просто не может быть пустым
0
1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
26.01.2020, 13:29  [ТС] 11
Когда я присваиваю полю Date значение Null ошибки не возникает. Все работает.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
begin
      if DBEdit_UCH_ZAV_DATE.text = '' then begin
      Query_Add.Close;
      Query_Add.SQL.Text := 'Update Obrazovanie SET UCH_ZAV_DATE= null where Obrazovanie_id=:Obr_ID';
      Query_Add.ParamByName('Obr_ID').AsString := Edit_Kand_id.text;
      Query_Add.ExecSQL;
      SQLTransaction_Now.Commit;  
      end else 
      begin
          Query_Add.Close;
          Query_Add.SQL.Text := 'Update Obrazovanie SET UCH_ZAV_DATE=:Date where Obrazovanie_id=:Obr_ID';
          Query_Add.ParamByName('Obr_ID').AsString := Edit_Kand_id.text;
          Query_Add.ParamByName('Date').AsString := DBEdit_UCH_ZAV_DATE.text;
          Query_Add.ExecSQL;
          SQLTransaction_Now.Commit; end;
    end;
Думаю код может быть короче. Как то можно условие поставить сразу в строке запроса,
типа 'Update Obrazovanie SET UCH_ZAV_DATE= если поле пусто-тогда Null, иначе значение поля...' ?
0
1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
20.01.2021, 19:47  [ТС] 12
остановился на таком варианте
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TfEditing.DBEdit_Srok_kontrEditingDone(Sender: TObject);              //  Оформление Срок контракта
begin
  Query_Safe4.Close;
  if DBEdit_Srok_kontr.Text=''
  then
  Query_Safe4.SQL.Text:='Update DK SET SROK_KONTRAKTA=Null where DOROZHNAYA_KARTA_ID=:DK_ID'
  else begin
  Query_Safe4.SQL.Text:='Update DK SET SROK_KONTRAKTA=:S_kon where DOROZHNAYA_KARTA_ID=:DK_ID';
  Query_Safe4.ParamByName('S_kon').AsString:=DBEdit_Srok_kontr.text;
  end;
  Query_Safe4.ParamByName('DK_ID').AsString:=DBEdit_DK_ID.text;
  Query_Safe4.ExecSQL;
end;
0
D1973
20.01.2021, 20:21
  #13

Не по теме:

мда... медленно, но не верно...

0
1 / 1 / 0
Регистрация: 27.03.2018
Сообщений: 93
22.01.2021, 08:19  [ТС] 14
Сделал давно. Решил поделиться. Может пригодиться кому.
0
22.01.2021, 08:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2021, 08:19
Помогаю со студенческими работами здесь

Ошибка при преобразовании типов Integer и String
Выполняла задание с помощью JavaFX: сложить многочлены заданной степени, используя TextField и...

Ошибка при создании поля таблицы и указании расположения поля в таблице
Пытаюсь создать поле с указанием его расположения в таблице. Пока безрезультатно ALTER TABLE AAA...

Как создать таблицу с пустым названием поля
Здравствуйте! Можно ли как-то в акцессе создать таблицу с пустым полем? Чтобы при подключении к...

Запрет ввода поля с пустым значением в форме
Коллеги ну очень надо - никак не могу сделать - заклинило в таблице - поле необязательное а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru