Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240

Редактирование записи

07.02.2015, 16:15. Показов 1292. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу сообразить почему так, и как это исправить? На форме редактирование, если исправить значения в обоих Combobox, то сохраняет отлично. Но если, я не буду исправлять хотя бы один Combobox, то ошибка
Использую для БД Access.
На кнопку "сохранить" код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Try DataModule2.ADOConnection1.BeginTrans;
    with DataModule2.Redakt do
      begin
        Parameters.ParamByName('Vozrast').Value:=edit20.text;
        Parameters.ParamByName('PJT').Value:=edit14.text;
          ...............................
        Parameters.ParamByName('Id_Gruppa').Value:=Integer(Combobox1.Items.Objects[Combobox1.ItemIndex]); 
        Parameters.ParamByName('Id_Pol').Value:=Integer(Combobox2.Items.Objects[Combobox2.ItemIndex]);
        Parameters.ParamByName('ID_FIO').Value:= form3.DBGrid1.Datasource.DataSet.FieldByName('I_DFIO').Value;
        DataModule2.Redakt.ExecSQL;
      end;
    DataModule2.ADOConnection1.CommitTrans;
  except
  DataModule2.ADOConnection1.RollbackTrans;
  ShowMessage('Невозможно выполнить. Повторите');
  end;
  Try DataModule2.ADOConnection1.BeginTrans;
    with DataModule2.Redakt1 do
      begin
        Parameters.ParamByName('Rost').Value:=edit24.text;
        Parameters.ParamByName('Ves').Value:=edit25.text;
        Parameters.ParamByName('PZ').Value:=edit7.text;
 ..............................
        Parameters.ParamByName('ID_FIO').Value:= form3.DBGrid1.Datasource.DataSet.FieldByName('I_DFIO').Value;
        DataModule2.Redakt1.ExecSQL;
        ShowMessage('Сохранение завершено');
      end;
    DataModule2.ADOConnection1.CommitTrans;
  except
  DataModule2.ADOConnection1.RollbackTrans;
  end;
  form9.Close;
   end;
Миниатюры
Редактирование записи  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2015, 16:15
Ответы с готовыми решениями:

Редактирование записи
пишу прогу для директора и столкнулся с таким делом.. if label7.Caption='' then ADOQuery1.Insert else ADOQuery1.Edit; ...

Редактирование записи
Приветствую. Такая проблема. Нужно сделать редактирование записей в таблице. Запись редактируется, но только та, которая идет первая в...

Редактирование записи в бд
В общем суть в том что есть две таблицы AUTO_LIST и NEW_TABLE в NEW_TABLE необходимо записать в столбце FIELDNAME -...

12
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
07.02.2015, 17:03
Если в Combobox'е ничего не выбрано, то ItemIndex = -1, Вот и ошибка.
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
07.02.2015, 17:44  [ТС]
northener, У меня есть ДБГрид. Щелкаю в нужную мне строку и открывается форма редактирования с уже заполненными полями т.е. в комбобоксах имеются записи. Я меняю все, что мне нужно, и нажимаю сохранить.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
07.02.2015, 17:50
Цитата Сообщение от POVT Посмотреть сообщение
открывается форма редактирования с уже заполненными полями т.е. в комбобоксах имеются записи
Что значит "в комбобоксах имеются записи"? Поясни кодом.
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
07.02.2015, 17:53  [ТС]
northener,
Цитата Сообщение от northener Посмотреть сообщение
Поясни кодом.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
procedure TForm3.DBGrid1DblClick(Sender: TObject);
begin
  Form9.Show;
  Form9.Edit6.Text:=DBGrid1.Fields[0].AsString;
  DataModule2.Vivod_Redakt.SQL.Clear ;
  DataModule2.Vivod_Redakt.SQL.Text:='SELECT Rezultat.FIO, Itog.Vozrast, Pol.Pol, Gruppa.Name_Gruppa, Rezultat.Rost, Rezultat.Ves, Rezultat.PZ,'+
  'Rezultat.PP, Rezultat.BV, Rezultat.BN, Rezultat.Jivot, Rezultat.Lopatka, Rezultat.Inter_GM, Rezultat.OPV, Rezultat.OPN, Rezultat.OBV, Rezultat.OBN,'+
  'Rezultat.Inter_MM, Rezultat.DP, Rezultat.DPP, Rezultat.DB, Rezultat.DG, Rezultat.Inter_KM, Itog.PJT, Itog.CMM, Itog.CM,'+
  'Itog.MO FROM Rezultat INNER JOIN (Pol INNER JOIN (Gruppa INNER JOIN Itog ON Gruppa.Id_Gruppa = Itog.Id_Gruppa) ON Pol.Id_Pol = Itog.Id_Pol) ON Rezultat.Id_FIO = Itog.Id_FIO where Rezultat.FIO='+#39+form9.edit6.Text+#39;
  DataModule2.Vivod_Redakt.Active:=True;
  Form9.Edit20.Text:=DataModule2.Vivod_Redakt.FieldByName('Vozrast').AsString;
  Form9.ComboBox2.Text:=DataModule2.Vivod_Redakt.FieldByName('Pol').AsString;
  Form9.ComboBox1.Text:=DataModule2.Vivod_Redakt.FieldByName('Name_Gruppa').AsString;
  Form9.Edit24.Text:=DataModule2.Vivod_Redakt.FieldByName('Rost').AsString;
  Form9.Edit25.Text:=DataModule2.Vivod_Redakt.FieldByName('Ves').AsString;
  Form9.Edit7.Text:=DataModule2.Vivod_Redakt.FieldByName('PZ').AsString;
  Form9.Edit8.Text:=DataModule2.Vivod_Redakt.FieldByName('PP').AsString;
  Form9.Edit9.Text:=DataModule2.Vivod_Redakt.FieldByName('BV').AsString;
  Form9.Edit10.Text:=DataModule2.Vivod_Redakt.FieldByName('BN').AsString;
  Form9.Edit21.Text:=DataModule2.Vivod_Redakt.FieldByName('Jivot').AsString;
  Form9.Edit22.Text:=DataModule2.Vivod_Redakt.FieldByName('Lopatka').AsString;
  Form9.memo3.Text:=DataModule2.Vivod_Redakt.FieldByName('Inter_GM').AsString;
  Form9.Edit5.Text:=DataModule2.Vivod_Redakt.FieldByName('OPV').AsString;
  Form9.Edit11.Text:=DataModule2.Vivod_Redakt.FieldByName('OPN').AsString;
  Form9.Edit12.Text:=DataModule2.Vivod_Redakt.FieldByName('OBV').AsString;
  Form9.Edit13.Text:=DataModule2.Vivod_Redakt.FieldByName('OBN').AsString;
  Form9.memo1.Text:=DataModule2.Vivod_Redakt.FieldByName('Inter_MM').AsString;
  Form9.Edit1.Text:=DataModule2.Vivod_Redakt.FieldByName('DP').AsString;
  Form9.Edit2.Text:=DataModule2.Vivod_Redakt.FieldByName('DPP').AsString;
  Form9.Edit3.Text:=DataModule2.Vivod_Redakt.FieldByName('DB').AsString;
  Form9.Edit4.Text:=DataModule2.Vivod_Redakt.FieldByName('DG').AsString;
  Form9.memo2.Text:=DataModule2.Vivod_Redakt.FieldByName('Inter_KM').AsString;
  Form9.Edit14.Text:=DataModule2.Vivod_Redakt.FieldByName('PJT').AsString;
  Form9.Edit16.Text:=DataModule2.Vivod_Redakt.FieldByName('CMM').AsString;
  Form9.Edit18.Text:=DataModule2.Vivod_Redakt.FieldByName('CM').AsString;
  Form9.Edit19.Text:=DataModule2.Vivod_Redakt.FieldByName('MO').AsString;
end;
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
07.02.2015, 17:58
Лучший ответ Сообщение было отмечено POVT как решение

Решение

Цитата Сообщение от POVT Посмотреть сообщение
Form9.ComboBox2.Text:=DataModule2.Vivod_ Redakt.FieldByName('Pol').AsString;
Вот это как раз ситуация из серии "На сарае написано ххх, а на самом деле в нем дрова".
Присвоение значения свойству TCombobox.Text не означает выбор из него. Надо так
Delphi
1
Form9.ComboBox2.ItemIndex:=Form9.ComboBox2.Items.IndexOf(DataModule2.Vivod_Redakt.FieldByName('Pol').AsString);
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
07.02.2015, 18:07  [ТС]
northener,
Цитата Сообщение от northener Посмотреть сообщение
Надо так
Заменила, теперь комбобокс вообще не заполнился(
Миниатюры
Редактирование записи  
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
07.02.2015, 18:48
Цитата Сообщение от POVT Посмотреть сообщение
теперь комбобокс вообще не заполнился
Значит в Itens комбобокса нет такой строки. А где и как заполняется Items?
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
08.02.2015, 07:50  [ТС]
northener,
Цитата Сообщение от northener Посмотреть сообщение
А где и как заполняется Items?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm9.ComboBox2DropDown(Sender: TObject);
begin
with DataModule2.ADOQuery3 do begin
  SQL.Text:='Select Pol.Pol, Pol.Id_Pol from Pol';
  open;
  ComboBox2.Items.Clear;
  while (not  Eof)  do   begin
   ComboBox2.AddItem(FieldByName('Pol').AsString,
      TObject(FieldByName('Id_Pol').AsInteger));
    Next;
   end;
 end;
end;
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
08.02.2015, 13:30
Цитата Сообщение от POVT Посмотреть сообщение
procedure TForm9.ComboBox2DropDown(Sender: TObject);
Ну так и что ты хотела получить? Поздно заполнять комбобокс в событии OnDropDown. Раньше это надо делать. Гораздо раньше.
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
08.02.2015, 15:16  [ТС]
northener,
Цитата Сообщение от northener Посмотреть сообщение
Раньше это надо делать. Гораздо раньше.
куда еще то раньше?)
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
08.02.2015, 15:25
Этот конкретный комбо хоть в дизайнере. Список возможных "полоа" всё-таки всегда один и тот же. Ну а список групп, например при старте программы и после его (списка групп) редактирования, если такое редактирование предусмотрено программой.
1
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
09.02.2015, 14:08  [ТС]
northener, Точно блин. Спасибо))) Разобралась
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2015, 14:08
Помогаю со студенческими работами здесь

Редактирование записи
Использую тот же код, что и для добавления. только ADOQuery1.Edit; вместо Append. Текущая запись не изменяется. Просто создается новая. В...

Редактирование записи
Программа пишет ошибку "Не найдено поле в ADOQqery1 Id_FIO" Подскажите, пожалуйста, как исправить или переделать? Хотя вроде это поле -то у...

Редактирование записи из DBGrid
Допустим есть база: ФИО, Дата рождения. Хочу сделать так: в дбгриде ищем нужную нам запись, щелкаем два раза мышкой или жмем кнопку...

Редактирование записи в dbgrid
Здравствуйте, уважаемые гуру. Знаю, что данная тема поднималась не один раз, но ... SQL Server 2005 + Delphi 7 В общем, в dbgrid...

Удаление и редактирование записи
Делаю БД в InterBase, одна таблица редактируется удаляется нормально, а вторая никак, даже когда редактируешь непосредственно в IB, в...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru